前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Servlet的生命周期

Servlet的生命周期

作者头像
DannyHoo
发布2018-09-13 11:48:01
3470
发布2018-09-13 11:48:01
举报
文章被收录于专栏:Danny的专栏

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1337006

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

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

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

            Client:login.html

代码语言:javascript
复制
<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

代码语言:javascript
复制
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:

代码语言:javascript
复制
  <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实例。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年06月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档