Servlet规范简介
Servlet规范
1. 作用
- 接受客户端请求,完成操作任务
- 指定动态资源文件开发步骤
- 指定动态资源文件调用规则
2. Servlet接口
2.1 实现方式
- 实现Servlet接口
- 继承GenericServlet 抽象类(无协议,需要重写service方法)
- 继承HttpServlet抽象类(有协议,常用)
2.2 生命周期
Servlet的生命(周期)是由容器管理的,换句话说,Servlet程序员不能用代码控制其生命
初始化
Servlet 初始化后调用 init () 方法。请求处理
Servlet 调用 service() 方法来处理客户端的请求。销毁
Servlet 销毁前调用 destroy() 方法。回收
Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
2.3 ServletRequest接口
-
介绍
ServletRequest接口的实现类封装了客户端请求的所有信息
-
常用方法
- 一些HTTP请求头部的获取方法,如getHeader、getHeaders和getHeaderNames。
- 一些获取请求路径的方法,如getContextPath、getServletPath和getPathInfo,对于路径变量,其中requestURI=contextPath+servletPath+pathInfo,而getRealPath方法则是获取某个相对路径对应的文件系统路径。
- 获取Cookie的方法,如getCookies方法;提供了判断标识是否为HTTPS的方法,如isSecure方法。
- 获取客户端语言环境的方法,如getLocale和getLocales,它们对应HTTP的Accept-Language头部
- 获取客户端编码的方法,如getCharacterEncoding,对应HTTP协议的Content-Type头部。
2.4 ServletResponse接口
-
介绍
ServletResponse接口的对象封装了服务器要返回客户端的所有信息。如果使用HTTP,则包含了HTTP的响应行、响应头部和响应体。
-
功能
- 将执行结果以二进制形式写入到【响应体】。
- 设置响应头中[content-type]属性值,从而控制浏览器使用对应编译器将响应体二进制数据编译为【文字,图片,视频】等。
- 设置响应头中【location】属性,将一个请求地址赋值给location,从而控制浏览器向指定服务器发送请求。
2.5 Filter接口
- 作用
- 拦截Http服务器,帮助Http服务器检测当前请求合法性
- 拦截Http服务器,对当前请求进行增强操作
3. Servlet调用规则
- 重定向
- 请求转发
3.1 重定向
-
工作原理
-
客户浏览器发送http请求
-
服务器接受后发送302状态码响应及对应新的location给客户浏览器
-
客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址
-
服务器根据此请求寻找资源并发送给客户
-
-
实现命令
response.sendRedirect("url") //将地址写入到响应包中响应头中location属性
-
特征
1)请求地址:内部的资源地址or其它网站URl
2)请求次数:浏览器至少发起两次请求
3)客户端发起
-
缺点
重定向解决方案需要在浏览器与服务器之间进行多次往返,大量时间 消耗在往返次数上,增加用户等待服务时间
3.2 请求转发
-
工作原理
- 客户浏览器发送http请求
- web服务器接受此请求,调用内部的一个方法在容器内部完成请求处理和转发动作,将目标资源发送给客户
-
实现命令
//1.通过当前请求对象生成资源文件申请报告对象 RequestDispatcher report = request.getRequestDispatcher("/资源文件名"); //2.将报告对象发送给Tomcat report.forward(request,response);
-
特征
1) 在请求转发过程中,浏览器只发送一次请求
2) 转发只能将请求转发给同一个WEB应用中的组件
3) 服务器发起
-
优点
Servlet之间调用发生在服务端计算机上,节省服务端与浏览器之间往返次数增加处理服务速度
4.Servlet数据共享
- ServletContext
- HttpSession
- Cookie
4.1 ServletContext
- 介绍
- 全局作用域对象
- 可以读取全局配置参数
- 可以搜索当前工程目录下面的资源文件
- 常用方法
// 域对象
setAttribute(name,value);
getAttribute(name);
removeAttribute(name);
// 读取全局配置参数
servletContext.getInitParameter("name"); //根据指定的参数名获取参数值
servletContext.getInitParameterNames(); //获取所有参数名称列表
4.2 HttpSesssion
-
介绍
HttpSession
是由JavaWeb提供的,用来会话跟踪的类。session是服务器端对象,保存在服务器端【会话作用域对象】 -
常用方法
void setAttribute(String name, Object value); Object getAttribute(String name); void removeAttribute(String name);
-
销毁机制
- 直接调用invalidate()方法
- 服务器关闭了挡墙应用
- 超出HttpSession过期时间,默认30s
4.3 Cookie
-
介绍
Cookie是由服务器生成的,保存在客户端的一种载体
-
原理
-
常用方法
// 新增 Cookie cookie = new Cookie(name,value); response.addCookie(cookie); // 查询 Cookie[] cookies = request.getCookies();
-
分类
-
会话级别的Cookie:默认的关闭了浏览器Cookie就销毁了
-
持久级别的Cookie:需要设置有效时长,关闭浏览器也不会销毁的Cookie
setMaxAge(int expiry): 以秒为单位的时间,超过了该时间后Cookie会自动销毁 setMaxAge(0): setPath(Stirng uri):
-