servlet 规范
作用:
1. 在 servlet 规范中,指定【动态资源文件】
2. 指定 Http 服务器调用动态资源文件规则
3. 指定 Http 服务器管理动态资源文件实例对象规则
Servlet规范中,Http服务器能调用的【动态资源文件】必须是一个Servlet接口实现类
class Student{}//不是动态资源文件,Tomcat 无权调用
class Student implements Servlet{} //动态资源文件
Servlet 接口实现类开发步骤
- 创建一个Java类继承与HttpServlet父类,使之成为一个Servlet接口实现类
- 重写HttpServlet父类两个方法。doGet或doPost
- 将Servlet接口实现类信息【注册】到Tomcat服务器
web.xml
<servlet>
<servlet-name>xxx</servlet-name>
<servlet-class>servlet接口实现类类路径</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xxx</servlet-name>
<url-pattern>/one</url-pattern> <!--设置简短请求别名,别名在书写时必须以"/"为开头-->
</servlet-mapping>
Servlet 对象的生命周期
- 网站中所有的Servlet接口实现类的实例对象,只能由Http服务器负责额创建。开发人员不能手动创建Servlet接口实现类的实例对象
- 在默认的情况下,Http服务器接收到对于当前Servlet接口实现类第一次请求时自动创建这个Servlet接口实现类的实例对象
- 在Http服务器运行期间,一个Servlet接口实现类只能被创建出一个实例对象
- 在Http服务器关闭时刻,自动将网站中所有的Servlet对象进行销毁
HttpServletResponse接口
主要功能:
1. 将执行结果以二进制形式写入到【响应体】
2. 设置响应头中[content-type]属性值,从而控制浏览器使用对应编译器将响应体二进制数据编译为【文字,图片,视频,命令】
3. 设置响应头中【location】属性,将一个请求地址赋值给location.从而控制浏览器向指定服务器发送请求
HttpServletRequest接口
主要功能:
1. 可以读取Http请求协议包中【请求行】信息
2. 可以读取保存在Http请求协议包中【请求头】或则【请求体】中请求参数信息
3. 可以代替浏览器向Http服务器申请资源文件调用
请求对象和响应对象生命周期
1. 在Http服务器接收到浏览器发送的【Http请求协议包】之后, 自动为当前的【Http请求协议包】生成一个【请求对象】和一个【响应对象】
2. 在Http服务器调用doGet/doPost方法时,负责将【请求对象】和【响应对象】作为实参传递到方法,确保doGet/doPost正确执行
3. 在Http服务器准备推送Http响应协议包之前,负责将本次请求关联的【请求对象】和【响应对象】销毁
贯穿一次请求的处理过程
Http 状态码
100 - 599 ; 分为 5 大类
范围 | 特征 |
---|---|
1XX | 最有特征 100; 通知浏览器本次返回的资源文件并不是一个独立的资源文件,需要浏览器在接收响应包之后,继续向Http服务器所要依赖的其他资源文件 |
2xx | 最有特征200,通知浏览器本次返回的资源文件是一个完整独立资源文件,浏览器在接收到之后不需要所要其他关联文件 |
3xx | 最有特征302,通知浏览器本次返回的不是一个资源文件内容而是一个资源文件地址,需要浏览器根据这个地址自动发起请求来索要这个资源文件 |
4xx | 404: 通知浏览器,由于在服务端没有定位到被访问的资源文件. 405:通知浏览器,在服务端已经定位到被访问的资源文件(Servlet)但是这个Servlet对于浏览器采用的请求方式不能处理 |
5xx | 通知浏览器,在服务端已经定位到被访问的资源文件(Servlet)这个Servlet可以接收浏览器采用请求方式,但是Servlet在处理请求期间,由于Java异常导致处理失败 |
response.sendRedirect(“资源文件地址”)写入到响应头中 location 而这个行为导致Tomcat将302状态码写入到状态行
多个 Servlet 之间的调用规则
1. 重定向解决方案
用户第一次通过【手动方式】通知浏览器访问OneServlet。OneServlet工作完毕后,将TwoServlet地址写入到响应头location属性中,导致Tomcat将302状态码写入到状态行,在浏览器接收到响应包之后,会读取到302状态。此时浏览器自动根据响应头中location 属性地址发起第二次请求,访问 TwoServlet 去完成请求中剩余任务。
实现命令:
response.sendRedirect("请求地址") //将地址写入到响应包中响应头中location属性
2. 请求转发解决方案
用户第一次通过手动方式要求浏览器访问OneServlet。OneServlet工作完毕后,通过当前的请求对象代替浏览器向Tomcat发送请求,申请调用TwoServlet。Tomcat在接收到这个请求之后,自动调用TwoServlet来完成剩余任务
实现命令:
//1.通过当前请求对象生成资源文件申请报告对象 2.将报告对象发送给Tomcat
request.getRequestDispatcher("/资源文件名").forward(当前请求对象,当前响应对象); 一定要以"/"为开头
多个Servlet之间数据共享实现方案
- ServletContext接口 (全局作用域对象)
- Cookie类
- HttpSession接口
- HttpServletRequest接口