Servlet的生命周期

简介: 虽然在大学的jsp专业课里“听说”过Servlet,但当时对Servlet的认识,的的确确停只是留在“听说”的阶段。还记得刚到公司实习那时,报了个Servlet的错,师傅问我Servlet配置对了吗?我来了一句:“什么配置?”,原来前几天在做DRP的过程中,渐渐加深了对Servlet的认识。下面谈一下对Servlet的理解。

      虽然在大学的jsp专业课里“听说”过Servlet,但当时对Servlet的认识,的的确确停只是留在“听说”的阶段。还记得刚到公司实习那时,报了个Servlet的错,师傅问我Servlet配置对了吗?我来了一句:“什么配置?”,原来前几天在做DRP的过程中,渐渐加深了对Servlet的认识。下面谈一下对Servlet的理解。


       


      (文章中用登陆的业务逻辑来说明。)


      起初,java web 开发中,Client与Server的工作方式是客户端向Servlet提交请求(如提交用户名、密码),Servlet处理(如调用业务逻辑),将处理结果拼接成HTML格式返回到客户端:


12.png

12.png

        Client:login.html      

<html>
    <head>Servlet Test</head>
    <body>
        <form method="post" action="/servlet/LoginServlet">
            <input type="input" name="userName"/>
            <input type="input" name="password"/>
            <input type="submit" name="submit"/>
        </form>
    </body>
</html>


         Servlet:LoginServlet.java


import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.*;
/**
 * 登陆
 * @author Danny
 */
public class LoginServlet extends HttpServlet {
  @Override
  protected void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    super.doGet(request, response);
response.setContentType("text/html;chartset=utf-8");
    String userName=request.getParameter("userName");
    String password=request.getParameter("password");
    boolean isLoginSuccessful=Manager.Login(userName,password);
    if(isLoginSuccessful){
    response.getWriter().print("登陆成功!");
    }else{
    response.getWriter().print("登陆失败!");
    } 
  }
}



         Manager代码省略~~

         

         除此之外还要在web.xml中配置Servlet:


  <servlet>
    <servlet-name>LoginServlet</servlet-name> <!--Servlet的名字,可以任意命名-->
    <servlet-class>com.danny.servlet.LoginServlet</servlet-class> <!--Servlet所在的真实路径-->
  </servlet>
  <servlet-mapping>
    <servlet-name>ClientIdValidateServlet</servlet-name> <!--Servlet名字,必须与上面Servlet的名字一致-->
    <url-pattern>/servlet/LoginServlet</url-pattern><!--Servlet虚拟路径,可以任意命名,form的action的属性值就是它-->
  </servlet-mapping>


     (web.xml配置文件中每个标签的含义可以看后面的注释)


       每个Servlet都是一个java类,都要继承javax.servlet包下的GenerateServlet类。其生命周期如下:


⑴ 客户端发送请求之后,Servlet容器(如Tomcat)读取配置文件,将Servlet加载到内存并实例化(一个Servlet只实例化一次)。


        Servlet有两种实例化的方式:


        ①在Tomcat启动时实例化,在配置文件<servlet></servlet>标签中加入<load-on-startup>1</load-on-startup>。Servlet容器按属性值由小到大进行实例化,也就是<load-on-startup>属性值越小越先被实例化,值为0的Servlet最后被实例化。因为Servlet实例化需要较长的时间,所以这种方法的好处是用户等待时间较少。


        ②调用Servlet时进行实例化,<load-on-startup>属性值小于0时,Tomcat启动时不对Servlet进行实例化,<load-on-startup>属性值默认小于0。



⑵ 实例化时,调用init()方法(此方法继承自GenerateServlet类)进行初始化。



⑶ 创建HttpResponse、HttpRequest对象,执行Service(HttpServletRequest req,HttpServletResponse res)方法,根据客户端请求的类型(post/get)来判断是接下来是调用doPost()方法还是调用doGet()方法。(HttpServletRequest负责接收页面传过来的数据,HttpServletResponse负责向页面写数据)



⑷ 服务器停止时,调用destory()方法,销毁Servlet实例。


相关文章
|
7月前
Servlet生命周期
Servlet生命周期
35 1
|
7月前
|
Java 数据库连接 容器
Servlet的生命周期
Servlet的生命周期
|
7月前
|
Java 数据库连接 容器
8:Servlet生命周期-Java Web
8:Servlet生命周期-Java Web
64 0
|
3月前
|
Java 应用服务中间件 数据库连接
探索研究Servlet 生命周期
【9月更文挑战第22天】
53 7
|
5月前
|
Java 数据库连接 开发者
Java中的Servlet生命周期详解
Java中的Servlet生命周期详解
|
6月前
|
前端开发 应用服务中间件
servlet执行流程&生命周期
servlet执行流程&生命周期
|
6月前
Servlet的生命周期
Servlet的生命周期
|
6月前
|
Java
servlet生命周期面试题
servlet生命周期面试题
|
5月前
|
Java 数据库连接 开发者
Java中的Servlet生命周期详解
Java中的Servlet生命周期详解
|
5月前
|
XML 存储 前端开发
JavaEE:Servlet创建和使用及生命周期介绍
JavaEE:Servlet创建和使用及生命周期介绍