您的位置:首页 > 其它

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对象的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: