Servlet 引言 问题1: tomcat+HTML展示信息不变? 原因: ① HTML网页中信息是静态(数据不变) ② tomcat直接读取html源文件内容,响应给浏览器. 解决思路: 将java程序交给tomcat管理. 服务器调用java程序,获得结果响应浏览器. 概念: 概念: 一段Java程序,可以运行在tomcat端. 语法: Servlet标准.(接口) JavaEE标准(servlet-api.jar) Servlet开发的具体步骤 手动部署servlet程序[最重要基础] 需求: 显示当前系统时间? 编写Servlet程序 导入servlet-api的jar.(编写编译java程序使用) 将servlet部署tomcat 在tomcat/webapps下创建文件夹(web项目) 在项目下创建创建WEB-INF/classes,将代码带包拷贝在classes下面 在web.xml描述(全类名+访问路径) 启动tomcat 访问servlet,查看执行响应的结果. MyEclipse集成开发Servlet和部署 MyEclipse管理tomcat tomcat交个MyEclipse管理 window--preferences--搜tomcat--->tomcat 8.x---brwose--找到tomcat目录+ 选择ebable.---apply 管理tomcat窗口: window-showview--other-->servers 启动tomcat servers-tomcat8.x---右键---run server 关闭tomcat servers-tomcat8.x---右键--stop server 部署项目 参考下面 MyEclipse开发部署Servlet 新建web project 创建web.xml 自动创建好对应的目录结构(WEB-INF classes web.xml) 编写servlet 编写web.xml 部署 servers--tomcat8.x---右键---add deployment--选择项目部署 Servlet生命周期[面试] 概念: servlet创建时机和活跃使用时机,销毁时机. servlet创建 第一个浏览器访问servlet,对象会被创建 一个Servlet类只会创建一个servlet对象. servlet服务 浏览器每次访问都会调用service方法. servlet销毁 tomcat关闭,销毁servlet对象 重点: Servlet对象只有一个单实例,面向多线程(用户)访问,线程不安全. 如果servlet有属性, service方法中对属性的操作,加锁. 要求: Servlet中不要添加数据属性 Servlet执行原理(原理) 问题: 浏览器发送url的请求---直到浏览器接收到响应结果,过程发生了什么? 浏览器向tomcat发出url的http请求: http://ip:port/web项目名/servlet的url-pattern tomcat 获得url的项目名, 从本tomcat下的webapps下找到对应文件夹. 根据url中servlet的url-pattern,从web.xml找到 servlet-name, 找到servlet-class Class clazz = Class.forName('Servlet的全类名');//获得servlet的类对象. Servlet servlet = (Servlet)clazz.newInstance();//创建出了类的对象(Servlet), tomcat先调用 方法,(servlet第一被访问) 调用servlet的service方法; 服务器将响应结果返回给浏览器. 浏览器发出第二次请求. tomcat会直接根据url-pattern,找到servlet对象,调用servlet.service方法. Servlet请求参数 概念: 浏览器请求servlet携带的数据,叫做请求参数 Servlet接收请求参数: 浏览器请求Servlet的方式 浏览器地址栏. form表单(的action)请求Servlet 超链接的href. 请求参数乱码问题 Post提交乱码 了解: tomcat接收数据默认编码: 接收: 注意: 设置编码,在接收请求参数之前设置 Get提交乱码 方式: form action='' method='get' 超链接携带的数据. 浏览器发送请求参数 修改tomcat的conf/server.xml中 多个Servlet配合工作 请求转发(foward) 作用:多个Servlet配合完成一个功能 核心特点: 是服务器(当前web项目)内部发送的流程跳转. forward请求转发连接的多个servlet,处于一个请求过程中. 页面显示信息和浏览器地址栏不一致(效果,不是错) 代码: Request作用域 概念: JavaEE提供的存储数据(命名属性)的空间. 命名属性: 名字---值 生命周期: 一次请求过程.[备注:请求转发的servlet正好处于一次请求过程] 存: 取: 请求重定向(Redirect) 核心特点: 服务器(web应用)外部跳转。 通知浏览器,自动去请求下一个要跳转的页面或者Servlet(不需要用户操作) 重定向连接的servlet或者资源,处于两个不同的请求过程。 请求重定向后的页面和浏览器的地址一致。 代码实现: 总结跳转方式 会话技术 http协议: 无状态协议,(协议本身不会记录任何信息,两次信息传输之间没有任何关系) 概念: 客户端(浏览器)会话技术。 应用场景: 浏览器记录 登录验证 验证码 购物车(阉割版) 另一种解释: 浏览器和服务器之间,多次交互依然保存数据(状态)的一种机制。(每个浏览器一份) Cookie 概念: 服务器保存在浏览器上的一小段字符串[key=value] 工作机制: 服务器tomcat创建 保存在浏览器 浏览器每次访问服务器,都会将服务器(web项目)保存在本浏览器上的cookie发送到服务器上。(发送当前服务器保存的cookie) 编码: 创建: 将cookie存入浏览器 其他方法(设置生命周期,设置存活多久) 获得浏览器请求携带的cookie信息? 总结Cookie的特点 存在浏览器上的一小段字符串 缺点: (数据不太安全) 优点: 分担服务器的压力。(不会占用服务器的任何资源) cookie只能保存字符串,不能保存中文。 cookie生命周期: (跨多次请求) 设置: setMaxAge(秒) 10 存活10s 0 删除cookie -1 设置cookie浏览器关闭之前。 默认: 浏览器关闭,cookie丢失。 cookie和浏览器(用户)一一对应。 HttpSession 概念: 服务器会话技术。 核心工作机制: 服务器为每个浏览器分配的一个一一对应的存储空间。 详细: 浏览器第一次访问web应用服务器,服务器分配一个session对象,该浏览器第二次后再访问,服务器直接将原有sessino对象分配给该浏览器。 HttpSession的特点 存放在服务器 每个浏览器和session一一对应 HttpSession的生命周期夸多次请求依然存在。 HttpSession 相关的API 属性: id. 获得session: 浏览器第一次访问: 创建session对象。 浏览器第二 三…次访问: 获得原有的session对象给你。 HttpSession作用 作用域,存储命名属性 存: 取: 移除: 特点: 浏览器一一对应 跨多次请求依然存在 存放在服务器 Session失效时机(补充) 浏览器关闭,session失效。 session默认保留30分钟。 【浏览器和服务器之间,超过30分钟没有请求】 主动失效: 应用: 用户退出登录: ① ② Cookie和Session对比[笔试] Session和Cookie的相同点: 和浏览器一一对应。 生命周期跨多次请求依然存。 Session和Cookie的不同点: Cookie: 存在浏览器 cookie只能存储字符串,不能存汉字.(缺点) cookie数据容易通过浏览器直接查看,不太安全。(缺点) Session: 存在于服务器端 session可以存对象,可以存入任何类型。(优点) session数据保存服务器,相对安全。(优点) session中数据过多,侵占服务器内存资源(对服务器运行造成压力)[缺点] 应用场景分析: 用户私密信息(Session) 用户浏览器过的商品信息(cookie保存) Session实现原理 机制: 浏览器第一请求服务器web项目,会为该浏览器创建一个session对象。获得session的id,并且将id以cookie的形式写回到浏览器。以后每次浏览器,请求服务器都会自动携带该cookie(JsessionId)信息,tomcat通过获得cookie中名字为jesessionid的cookie的value值,和内部所有的session对象匹配,找到对应的session对该浏览器使用。 内部代码实现(局部代码): 浏览器第一请求服务器 浏览器第二次(以后)请求服务器 用户禁用cookie(了解) 导致session失效,解决办法? 总结: 对所有超链接+表单等一切请求服务器的url路径,全部进行url重写。 方法: 纠错: ; Filter过滤器 概念: Servlet中提供的技术,可以过滤浏览器发出的请求,并且决定放行请求还是中断请求。 核心工作机制: 编码步骤 自定义一个java类,实现Filter接口 } } 在web.xml中注册信息 生命周期(了解) 创建: tomcat启动 销毁: tomcat关闭 Filter的url-pattern的写法: 写多个。 ---过滤所有请求 ---过滤请求以.do的请求 ----过滤路径中的url-pattern部分,以/xxxxxooaa开头的请求 |
|
来自: AnonymousV脸 > 《手机电脑类知识的文章》