Servlet的生命周期和工作原理
2016-04-29 15:51
441 查看
Servlet
Servlet是用Java编写的服务端程序,其主要功能在于交互式地浏览和修改数据,生成动态的Web内容。Servlet的生命周期
下面我们通过一段代码和配置文件来试验一下Servlet的生命周期代码
package Servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Servlet extends HttpServlet { public Servlet() { System.out.println("调用了Servlet的构造方法"); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub super.doGet(req, resp); } @Override public void init() throws ServletException { System.out.println("调用了Servlet的init方法"); } @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("调用了Servlet的service方法"); } @Override public void destroy() { System.out.println("调用了Servlet的destory方法"); } }
Web.xml文件配置
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name></display-name> <servlet> <servlet-name>Servlet</servlet-name> <servlet-class>Servlet.Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Servlet</servlet-name> <url-pattern>/servlet/Servlet</url-pattern> </servlet-mapping> </web-app>
通过网页访问Servlet方法,在控制带依次输出的文字为:
调用了Servlet的构造方法
调用了Servlet的init方法
调用了Servlet的service方法
如果刷新网页,或者打开一个新的网页访问会发现,程序在控制台中接着输出
调用了Servlet的service方法
没有在调用Serlvet的构造方法和init初始化方法,说明Servlet是单实例多线程的,所以我们在写代码的时候要注意线程安全的问题。
那么Servlet的调用过程是怎样的呢?下面用一个图简单说明一下
详细的执行过程为
1、 Servlet容器启动,加载web.xml文件,读取相关配置2、 客户访问Servlet容器,如果Servlet类还没有被初始化,那么Servlet容器根据客户输入的URL地址,去配置文件中找到与之相对应的映射类
3、 Servlet容器通过反射的方法实例化该类
4、 实例化类后Servlet容器会调用init(ServletConfigconfig)方法,获取web.xml中的相关配置。
5、 Servlet容器会调用调用init()方法。
6、 调用 publicvoid service(ServletRequest req, ServletResponse res)方法,将ServletRequest和ServletResponse转换成HttpServletRequest和HttpServletResponse方法。并调用protectedvoid service(HttpServletRequest req, HttpServletResponse resp)方法
7、 在service(HttpServletRequestreq, HttpServletResponse resp)方法中判断用户是通过什么请求来进行的页面访问,并调用相关的方法。
8、 当容器关闭的时候调用destory()方法销毁。
注意
1、 Servlet容器的默认配置是当有用户访问Serlvet类的时候才会对该类进行初始化操作,这样首次访问的用户等待的时间可能会比较长,所以用户可以通过在<servlet></servlet>中添加<load-on-startup>(正整数)</load-on-startup>来使该类在Servlet容器启动的时候就完成Servlet类的初始化。2、 init(ServletConfig config)方法是Servlet容器自己调用的初始化方法,最好不要重写这个方法,如果需要在容器初始化时候进行某些操作,可以重写init()方法,该方法是专门为开发人员设置的。
3、 重写service方法最好重写service(HttpServletRequestreq, HttpServletResponse resp)方法,因为service(ServletRequest req, ServletResponse res)方法是将ServletRequest和ServletResponse对象转换为HttpServletRequest对象和HttpServletResponse对象的。
相关文章推荐
- Android Studio中断开SVN连接
- C# 调用C++ DLL 返回类型为字符的接口 出现异常 解决办法
- 三维插件客户端矢量更新操作文档
- 主流浏览器引擎简介
- MySQL数据库迁移(数据文件直接迁移)
- nodejs 发送邮件
- JNDI+Spring获取配置数据源的三种方法
- ListView优化和图片闪烁探析
- javascript中继承(一)-----原型链继承的个人理解
- GMM(Gaussian Mixture Model),高斯混合模型
- 无人驾驶系列】光学雷达(LiDAR)在无人驾驶技术中的应用
- 最全前端资源汇集
- nginx限制某个IP同一时间段的访问次数
- Python(2)--布尔值、变量、常量
- 读写Android中assets目录下的文件的方法详解
- iOS TableView优化的两个方法(优化卡顿)
- quartz高级使用
- 如何在caffe中添加新的Layer
- ios键盘遮挡问题
- 趣谈设计模式