一、Servlet规范介绍:
1,servlet规范来自于JavaEE规范中的一种
2,作用
1)在Servlet规范中,指定【动态资源文件】开发步骤(给人看的)
2)在Servlet规范中,指定Http服务器调用动态资源文件规则
3)在Servlet规范中,指定Http服务器管理动态资源文件实例对象规则
二、Servlet接口实现类:
1,Servlet接口来自于Servlet规范下一个接口,这个接口存在Http服务器提供jar包
2,Tomcat服务器下lib文件有一个servlet-api.jar存放Servlet接口(javax.servlet.Servlet接口)
3,Servlet规范中认为,Http服务器能调用的【动态资源文件】必须是一个Servlet接口实现类
三、Servlet接口实现类开发步骤
1,第一步:创建一个Java类继承HttpServlet父类,使之成为一个servlet接口实现类
2,第二步:重写HttpServlet父类两个方法。doGet或者doPost。
3,第三步:将Servlet接口实现类信息【注册】到Tomcat服务器
【网站】--->【web】--->【WEB-INF】---> web.xml
<!--将Servlet接口实现类类路径地址交给Tomecat--> <Servlet> <!--声明一个变量存储servlet接口实现类类路径--> <servlet-name>test</servlet-name> <!--声明servlet接口实现类类路径--> <servlet-class>com.yth.controller.OneServlet</servlet-class> </Servlet> <!--需要设置简短请求别名,方便访问--> <servlet-mapping> <!--这里的变量名要与上边一致,表示给上述变量起别名--> <servlet-name>test</servlet-name> <!--设置别名--> <url-pattern>/one</url-pattern> </servlet-mapping>
四、Servlet对象生命周期:
1,网站中所有的Servlet接口实现类的实例对象,只能由Http服务器负责创建。开发人员不能手动创建Servlet接口实现类的实例对象
2,在默认的情况下,Http服务器接收到对于当前Servlet接口实现类第一次请求时,自动创建这个Servlet接口实现类的实例对象
在手动配置情况下,要求Http服务器在启动时自动创建某个Servlet接口实现类的实例对象
<servlet> <servlet-name>test</servlet-name> <setvlet-class>com.yth.controller.OneServlet</setvlet-class> <!--填写一个大于0的整数即可--> <load-on-startup>30</load-on-startup> </servlet>
3,在Http服务器运行期间,一个Servlet接口实现类只能创建出一个实例对象
4,在Http服务器关闭时刻,自动将网站中所有的Servlet对象进行销毁
五、HttpServletResponse接口
1,介绍:
1):HttpServletResponse接口来自于Servlet规范中,在Tomcat中存在servlet-api.jar
2):HttpServletResponse接口实现类由Http服务器负责提供
3):HttpServletResponse接口负责将doGet / doPost执行结果写入到响应体中交给浏览器
4):开发人员习惯将HttpServletResponse接口修饰的对象称为【响应对象】
2,主要功能:
1):将执行结果以二进制形式写入到【响应体】
PrintWriter out = response.getWriter(); out.print(result)
2):设置响应头中[content-type]属性值,从而控制浏览器使用对应编译器将响应体二进制数据编 译为【文字,图片,视频,命令】
response.setContentType("text/html"); response.setCharacterEncoding("UTF-8");
3):设置响应头中【location】属性,将一个请求地址赋值给location,从而控制浏览器向指定服 务器发送请求
String result = "http://www.baidu.com"; response.sendRedirect(result);
六、HttpServletRequest接口
1,介绍
1):HttpServletRequest接口来自于Servlet规范中,在Tomcat中存在servlet-api.jar
2):HttpServletRequest接口实现类由Http服务器负责提供
3):HttpServletRequest接口负责在doGet / doPost方法运行时读取Http请求协议包中信息
4):开发人员习惯于将HttpServletRequest接口修饰的对象称为【请求对象】
2,作用
1):可以读取Http请求协议包中【请求行】信息
String url = request.getRequestURL().toString(); String method = request.getMethod();
2):可以读取保存在Http请求协议包中【请求头】或者【请求体】中请求参数信息
(浏览器以GET方式发送请求,请求参数保留在【请求头】,在Http请求协议包到达Http服务器之后,第一件事就是进行解码,请求头二进制内容由Tomcat负责解码,Tomcat默认使用【UTF-8】)
(浏览器以POST方式发送请求,请求参数保留在【请求体】,在Http请求协议包到达Http服务器之后,第一件事就是进行解码,请求头二进制内容由request负责解码,request默认使用【ISO-8859-1】)
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //通知请求对象,使用utf-8字符集进行解码 req.setCharacterEncoding("utf-8"); //通过请求对象获得【请求体】中【所有请求参数名】 String value = req.getParameter("username"); System.out.println("从请求体中得到的参数值:" + value); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //通过请求对象获得【请求头】中【所有请求参数名】 String userName = request.getParameter("username"); System.out.println("从请求头得到的参数值:" + userName); }
3):可以代替浏览器向Http服务器申请资源文件调用
七、请求对象和响应对象生命周期
1,在Http服务器接收到浏览器发送的【Http请求协议包】之后,自动为当前的【Http请求协议包】生成一个【请求对象】和一个【响应对象】
2,在Http服务器调用doGet / doPost方法时,负责将【请求对象】和【响应对象】作为实参传递到方法,确保doGet / doPost正确执行
3,在Http服务器准备推送Http响应协议包之前,负责将本次请求关联的【请求对象】和【响应对象】销毁
【请求对象】和【响应对象】的生命周期贯穿一次请求的处理过程中