第二章 一个简单的servlet容器
2.1 javax.servlet.Servlet接口
该接口是Servlet编程中最重要的,所有的servlet都必须实现该接口或继承自实现该接口的类
5个方法
public void init(ServletConfig config) throws ServletException |
public void service(ServletRequest request, ServletResponse response) throws ServletException, java.io.IOException |
public void destroy() |
public ServletConfig getServletConfig() |
public java.lang.String getServletInfo() |
前三个方法是与servlet生命周期相关的方法。
init()方法进行初始化,servlet容器只会调用该方法一次,调用后则可以执行服务的方法。
service()方法,可能被调用多次
destroy()方法,一般当servlet容器关闭时或者servlet容器要释放内存时,才会将servlet实例移除
package ecnu.cv.ex01; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class PrimitiveServlet implements Servlet { public void init(ServletConfig config) throws ServletException { System.out.println("init"); } public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { System.out.println("service...."); PrintWriter writer = response.getWriter(); writer.println("Hello servlet"); } public void destroy() { System.out.println("destroy"); } public ServletConfig getServletConfig() { return null; } public String getServletInfo() { return null; } }
2.2 应用程序1
需求分析:
一个功能齐全的servlet容器有以下几件事要做:
1. 当第一次调用某个servlet时,要载入该servlet,并调用其init()方法(仅仅调用一次)
2. 针对每个request请求,创建一个javax.servlet.ServletRequest实例和一个javax.servlet.ServletResponse实例
3. 调用该servlet的service方法,将servletRequest对象和servletResponse对象作为参数传入;
4. 当关闭该servlet时,调用其destroy()方法,并卸载该servlet类
目标:
1. 实现HTTP请求
2. 创建一个servletRequest对象和一servletResponse对象
3. 若请求是一个静态资源,则调用staticResourceProcessor对象的process()方法,传入servletRequest对象和servletResponse对象
4. 若请求的是servlet,则载入相应的servlet类,调用其service方法,传入servletRequest对象和servletResponse方法