1、概念
Servlet是一个java编写的程序,此程序是在服务端运行的,是按照Servlet规范编写的一个java类。
Servlet作用是处理客户端的请求并响应再发送到客户端。
每一个自定义的Servlet都必须实现Servlet的接口,其中涉及到比较重要的三个方法,分别是init(), service(), destroy(), 一般来说,我们定义Servlet的时候只需要继承HTTPServlet即可。
2、工作原理
Servlet接收和响应客户请求的过程,首先是客户发送一个请求,Servlet是调用service()方法对请求进行响应的,通过源代码可见,service()方法中对请求的方式进行了匹配,选择调用doGet/doPost方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应,HTTPServlet中定义了这些方法,但是返回的都是error信息,所以,我们每次定义一个Servlet的时候,都必须实现doGet或doPost方法。
可将请求流程概括为以下四点:
1、客户端请求指定的servlet(url)
2、系统会根据web.xml的配置找到对应的url-pattern
3、根据url-pattern找到对应的servlet-name
4、根据指定的servlet类执行service方法
Servlet类创建及方法示例:
public class HelloServlet extends HttpServlet{
public HelloServlet() {
// HelloServet hs = new HelloServlet();
System.out.println("执行构造器");
}
@Override
public void init() throws ServletException {
System.out.println("helloServlet被初始化");
}
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// System.out.println("servlet被执行。。。。");
// PrintWriter out = response.getWriter();
// out.println("<h1>hello Servlet</h1>");
// out.println("<input type=\"text\">");
// out.flush();
System.out.println("service被执行....");
super.service(request, response);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet被执行。。。");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPost被执行....");
}
@Override
public void destroy() {
System.out.println("helloServlet被销毁!!!");
}
}
3、生命周期
Servlet的生命周期由Servlet容器控制,该容器创建Servlet的实例。Servlet生命周期指的是常见Servlet实例后响应客户请求直至销毁的全过程。
生命周期分为以下四大步:
1、容器启动之后,会对web.xml进行加载,主要验证映射配置是否正确,出现任何映射异常,则服务器抛出异常。
2、web.xml被成功加载之后,当客户端对指定的servlet第一次发起访问时,容器会自动执行servlet的init方法(只会在第一次访问时执行),完成一些初始化操作。
3、容器会自动执行service方法,再根据客户端发起的请求(get,post...)决定调用doGet/doPost完成相应的操作。
4、当容器停止服务时,servlet会执行destroy完成销毁操作。
web.xml文件配置示例(联系上面的Servlet类创建):