一、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()方法。