Servlet如何处理请求及生命周期
来源:互联网 发布:python huey 编辑:程序博客网 时间:2024/05/01 23:03
一、servlet容器如何处理请求资源路径?
比如,在浏览器地址栏输入http://ip:port/web04_2/abc.html
浏览器会将请求资源路径("/web04_2/abc.html")放到请求数据包里面,发送给容器。容器收到之后,会依据应用名("/web04_2")找到应用所在的文件夹,然后,容器默认认为访问的是一个servlet,会依据<url-pattern>来查找有没有对应的servlet:
方式一: 精确匹配
<url-pattern>的值是"/abc.html"。
方式二: 通配符匹配
即使用"*"来匹配任意的0个或者多个字符,比如
<url-pattern>/*</url-pattern>
方式三: 后缀匹配
即使用"*."开头,后接1个或者多个字符,比如
<url-pattern>*.do</url-pattern>
会匹配所有以".do"结尾的请求。
http://ip:port/web04_2/aaaa.do ok
http://ip:port/web04_2/adfasdfa/asdfasfd.do ok
如果容器找不到匹配的servlet,容器会认为访问的是一个html文件,然后查找该文件,找到了,就返回该文件的内容,找不到,返回404。
二、让一个servlet处理多个请求
step1, 使用后缀匹配模式<url-pattern>*.do</url-pattern>
step2, 分析请求资源路径,依据请求的不同,调用不同的分支来处理。
request.getRequestURI();
三、servlet的生命周期
(1)生命周期的含义servlet容器创建servlet对象、分配相应的资源给servlet对象、调用servlet对象的方法处理请求,以及销毁servlet对象的过程。
(2)四个阶段
1)实例化
a,什么是实例化?
容器调用servlet的构造器,创建servlet对象。
注意:
容器只会创建一个servlet对象。
b,什么时候创建servlet对象?
情况1:容器收到请求之后,才会创建。
情况2: 容器在启动的时候,会检查servlet的配置,如果某个servlet配置了<load-on-startup>参数,则会马上进行实例化操作。参数值是一个大于等于0的整数,越小,优先级越高(即先被容器创建)。
2)初始化
a,什么是初始化?
容器在创建好servlet对象之后,会立即调用该对象的init方法。
b,GenericServlet的init方法是如何实现的?
将容器传递进来的ServletConfig对象保存下来,并且,提供了getServletConfig方法来获得ServletConfig对象。
c,ServletConfig对象的作用
访问servlet的初始化参数:
step1, 配置初始化参数,比如
<init-param>
<param-name>company</param-name>
<param-value>IBM</param-value>
</init-param>
step2,调用
config.getInitParameter("company");
d,如果GenericServlet提供的init方法不满足编程的要求,可以override init()方法。
e,init方法只会执行一次。
3)就绪
a,什么是就绪?
容器调用servlet对象的service方法来处理请求。
b,HttpServlet的service方法是如何实现的?
依据请求方式分别调用doGet或者doPost方法。
HttpServlet提供了doGet,doPost方法的实现,但是,只是抛出了异常。
如果要实现业务处理,可以选择两个方式:
方式一:override HttpServlet的service方法。
方式二:override HttpServlet的doGet和doPost
方法。
4)销毁
a,什么是销毁?
容器在删除servlet对象之前,会先调用该对象的destroy方法。
b,容器会依据自身的算法来决定什么时候销毁servlet。
c,destroy方法只会执行一次。
(3)生命周期相关的几个接口与类如上图所示,Servlet容器处理请求的步骤如下:
1、容器接收请求
2-3、依次创建request、response对象
4、创建Servlet对象,调用其init()方法
5、因为init()方法需要传一个config对象作为参数,故还要创建ServletConfig对象
6、调用servlet的init()初始化方法完成初始化
7、调用servlet的service()方法,并将创建的request、response对象作为参数传入,执行处理逻辑
8、调用servlet的destory()方法。
Servlet接口
init(ServletConfig config)
service(ServletRequest req,ServletResponse res)
destroy()
GenericServlet抽象类
实现了Servlet接口中的部分方法(init,destroy)
HttpServlet抽象类
继承GenericServlet,实现了service方法。
ServletConfig接口
ServletRequest接口是HttpServletRequest的父接口
ServletResponse接口 是HttpServletResponse父接口
1 0
- Servlet如何处理请求及生命周期
- servlet图解。1。。tomcat处理请求过程、servlet的生命周期
- servlet容器如何处理http请求?
- Servlet容器如何处理多个请求??
- Servlet 容器如何处理请求资源路径
- Servlet如何处理多个请求访问?
- Servlet如何处理多个请求访问?
- servlet的创建步骤、请求流程及生命周期
- Servlet简介及生命周期
- servlet原理及生命周期
- web请求:servlet处理请求
- Servlet和SpringMVC的初始化及请求处理过程浅析
- Servlet请求的处理
- Servlet处理HTTP请求
- servlet处理请求
- servlet处理http请求
- servlet处理http请求
- servlet多请求处理
- MyEclipse中读取网页时总是多出现一个null
- swift简单学习之UITabbleView的简单应用(加动画效果)
- DBA索引优化 与 sqlldr使用
- Python ctypes 模块
- 10个随机数和
- Servlet如何处理请求及生命周期
- HashMap中capacity、loadFactor、threshold、size等概念的解释
- 15 电气 郄慧敏 vb 作业 循环程序计算10个随机数的和
- 若你早知道这些,毕业后就不会混成现在的样子!
- 过滤PHP输出JSON内容内容中包含回车双引号
- 郑州轻工业oj 1048
- M32别名区的理解 (转载)
- 域名资源大小限制
- ORACLE常用SQL语句