Java Servlet详解

124 阅读2分钟

我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第n篇文章,点击查看活动详情

1. Servlet 简介

Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

通俗的讲,servlet是运行在web服务器如tomcat这样应用服务器上的一段程序,他可以响应http协议的请求,并且实现用户自己的逻辑,最终将结果返回到用户的客户端(浏览器)。

2. Servlet 生命周期与对应方法

image.png

  1. 初始化阶段——init() 在 Servlet 的整个生命周期内,init() 方法只被调用一次,有可能是在服务器启动时加载,也有可能是第一次请求过来时加载。

  2. 运行阶段——service() Servlet 生命周期中最核心的阶段。在该阶段中,Servlet 容器会为当前的请求创建一个 ServletRequest 对象和一个 ServletResponse 对象(它们分别代表 HTTP 请求和 HTTP 响应),并将这两个对象作为参数传递给 Servlet 的 service() 方法。service() 方法从 ServletRequest 对象中获得用户的详细请求信息并处理该请求,通过 ServletResponse 对象生成响应结果。

  3. 销毁阶段——destroy() 当服务器停止时,Servlet 容器需要回收 Servlet 对象所占用的内存,在回收之前,会自动调用该对象的 destroy() 方法做好回收内存前的准备,辟如关闭后台线程。和 init() 方法类似,destroy() 方法也只会被调用一次。

3. HttpServlet

我们真正使用的更多是HttpServlet接口,HttpServlet接口实现了SevletConfig和Servlet两个接口。

image.png

在应用的时候,我们一般需要重写HttpServlet接口实现类的doGet()或者doPost()等方法,在调用这些方法时,需要传入HttpServletRequest与HttpServletResponse两个参数。

@WebServlet(name = "annotation",urlPatterns = "/*") 
public class AnnotationServlet extends HttpServlet { 
    @Override 
    protected void doGet(
    HttpServletRequest req, HttpServletResponse resp) 
    throws ServletException, IOException { 
        PrintWriter writer = resp.getWriter(); 
        writer.print("this is servlet html"); 
        writer.flush(); 
        writer.close(); 
    } 
}

doGet()或者doPost()主要是通过重写父类的service()方法来实现具体的请求。

4. ServletConfig

public interface ServletConfig { 
    //用于获取Servlet名,web.xml中定义的servlet-name public 
    String getServletName(); 
    //获取应用本身(非常重要) 
    public ServletContext getServletContext(); 
    //获取init-param中的配置参数 
    public String getInitParameter(String name); 
    //获取配置的所有init-param名字集合 
    public Enumeration<String> getInitParameterNames(); 
}

ServletConfig 提供了解析并提取xml配置文件的方法,另外提供了getServletContext()方法来获取Servlet的上下文,每个Servlet只有一个上下文,不同的Servlet可以通过其进行通信。