Servlet生命周期 HttpServlet Mapping配置

来源:互联网 发布:水琴为何声音恐怖知乎 编辑:程序博客网 时间:2024/05/18 03:55

Servlet的生命周期

API
这里写图片描述
init()
实例化对象 初始化Servlet
-仅调用一次
-常用于数据库连接

service()
响应客户端请求,通过response对象修改客户端内容
-可执行多次
-创建代表请求的request对象
-创建代表响应的response对象
-请求结束后对象会自动销毁

destory()
Servlet对象被摧毁后执行的方法
-servlet对象一旦创建就会驻留内存
直到web容器(如tomcat)的退出
-常用于数据库的释放

HttpServlet
HttpServlet是GenericServlet的子类,复写了service()方法,会判断http的请求方式,然后执行doget()或dopost()方法或其他方法doxxx(),因而不用去直接重写service()方法,而是使用doxxx()方法。
HttpServlet和GenericServlet的不同

GenericServlet是个抽象类,必须给出子类才能实例化。它给出了设计servlet的一些骨架,定义了servlet生命周期,还有一些得到名字、配置、初始化参数的方法,其设计的是和应用层协议无关的,也就是说 你有可能用非http协议实现它。

HttpServlet是GenericServlet的子类,当然就具有GenericServlet的一切特性,还添加了doGet, doPost, doDelete, doPut, doTrace等方法对应处理http协议里的命令的请求响应过程。

关于mapping:

同一个servlet可以被多个地址映射,即:

 <servlet-mapping>    <servlet-name>MyServlet</servlet-name>    <url-pattern>/s</url-pattern>  </servlet-mapping>

中的<url-pattern>/s</url-pattern>地址映射可以是多个

缺省Servlet

<servlet-mapping>    <servlet-name>MyServlet</servlet-name>    <url-pattern>/</url-pattern>  </servlet-mapping>

/ 则该Servlet定义为web应用程序的缺省
Mapping找不到的Servlet会自动使用此Servlet,
此时所有的静态web资源都无法访问到
-服务器会默认配置一个缺省Servlet,最好不要配置缺省servlet

*通配符的使用:

<servlet-mapping>    <servlet-name>MyServlet</servlet-name>    <url-pattern>/*</url-pattern>  </servlet-mapping>

/*则可以匹配所有地址

<servlet-mapping>    <servlet-name>MyServlet</servlet-name>    <url-pattern>*.html</url-pattern>  </servlet-mapping>

*.html则可以匹配web应用下各种html

<load-on-startup>标签

 <servlet>    <servlet-name>MyServlet</servlet-name>    <servlet-class>cn.lemon.MyServlet</servlet-class><load-on-startup>1</load-on-startup>  </servlet>

<load-on-startup> 标签会使得该Servlet的init()在web应用创建伊始就执行 而不是请求servlet时才执行init()

-标签中数字的大小是启动顺序,越小启动越早

-Servletd的线程安全:

SingleThreadModel 标记接口
实现了该接口的Servlet会使用单例访问方式,避免资源冲突访问

原创粉丝点击