您的位置:首页 > 编程语言 > Java开发

Servlet总结(1)--Servlet的生命周期

2016-12-09 20:17 417 查看
一、Servlet简介

Servlet是sun公司提供的一门用于开发动态web资源的技术。

主要过程

1、编写一个JAVA类,实现Servlet接口。

2、把项目部署到服务器上

二、Servlet的生命周期

1、servlet接口的主要方法

1)init()方法

初始化方法,在一个servlet创建时调用一次。何时为初始化?也就是Servlet容器装转Servlet时,进行的初始化,在以下情况下,Servlet容器会装载Servlet:

a、web.xml文件中配置了一下信息:

<loadon-startup>1</loadon-startup>


代表Servlet容器在启动后自动加载Servlet,这个时候会调用init()方法。

b、Servlet容器启动后,客户端第一次调用Servlet时,由于Servlet还没被加载,所以需要先进行加载,则调用init()方法

c、Servlet更新之后重新加载,也会调用init()方法

在整个Servlet的生命周期里,init()方法只被调用一次!!!!!!!!!!!!!!

2)service()方法

servlet创建之后调用该方法,用于响应客户端的请求,在此基础上,更具客户端调用方法的不同,分别还有doPost()和doGet()方法,通常,我们所有的响应程序都会写在改方法里面。

这里需要注意的是,Servlet接口是没有这些方法的,这些方法都是在HttpServlet接口中定义的。

这几个接口的关系:

新建的Servlet类,继承于HttpServlet

HttpServlet—-继承自—->GenericServlet—-继承自—->Servlet

GenericServlet和Servlet接口都不特定于任何协议,而HttpServlet特定于HTTP协议,所以,在HttpServlet实现service()方法时,将ServletRequest和ServletResponse对象强制转型为HttpRequest和HttpResponse对象。

客户端发送请求到Servlet之后,Servlet会创建两个对象ServletRequest和ServletResponse对象,我们可以通过ServletRequest对象获取到客户端传过来的参数。这些参数存放在一个HashTable当中,HashTable的定义为

private Hashtable<String String[]> paramHashStringArray = new Hashtable<String String[]>();


通过键值获取value值。

3)destroy()方法

一个servlet结束时,调用该方法,何时为结束?当web应用终止时,或者Servlet容器终止运行,或Servlet容器重新装载Servlet新实例,这些情况下,会调用该方法,释放servlet中的所有资源。

三、实例

通过代码输出到控制台可以清楚的看到servlet的生命周期

package day.servlet01;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletDemo01 extends HttpServlet {

static int i = 0;
private ServletConfig config;
/**
* Constructor of the object.
*/
public ServletDemo01() {

super();
sop("构造方法:"+i++);
}

/**
* Destruction of the servlet. <br>
*/
public void destroy() {
sop("destroy"+i++);
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}

/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
sop("doGet:"+i++);
response.setContentType("text/html");
PrintWriter out = response.getWriter();

/*
* 获取初始化参数
*/
String paramUser = this.config.getInitParameter("name");
out.print(paramUser);

out.print("<hr>");
//获取所有初始化参数
Enumeration<String> e = config.getInitParameterNames();

while(e.hasMoreElements()){
String name = e.nextElement();
String value = config.getInitParameter(name);
out.print(name + "=" + value+ "<br>");
}
out.print("<hr>");

out.close();
}

/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
sop("doPost:"+i++);
doGet(request, response);
}

/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init(ServletConfig config) throws ServletException {
// Put your code here
this.config = config;//获取初始化参数
sop("init:"+i++);

}

@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
sop("service:"+i++);
// TODO Auto-generated method stub
super.service(arg0, arg1);
}

public static void sop(Object o){
System.out.println(o);
}

}


控制台信息:

*构造方法:0

init:1

service:2

doGet:3*****

当停止tomcat服务时,相当于web应用终止,控制台:

destroy4

综上:

Servlet的生命周期

1、被加载时,创建一个servlet对象

2、调用初始化方法Init()

3、请求响应阶段调用service()方法

4、web应用终止时,调用destroy()方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java servlet