美文网首页
Servlet的理解

Servlet的理解

作者: 红烧排骨饭 | 来源:发表于2017-04-28 15:49 被阅读0次

前言

好记性不如烂笔头,而且学习了却没有做笔记总结,就不算学习。因此写了一篇文章总结一下对 Servlet的理解。

什么是 Servlet

  • 一个负责接收和响应客户端请求的 Java 程序

A servlet is a small Java program that runs within a Web server.
Servlets receive and respond to requests from Web clients, usually across HTTP, the HyperText Transfer Protocol.

打开 Servlet.java 的源码,可以看到这一段注释。它说:Servlet 就是一个运行在 Web 服务器中的 Java 程序。servlet 可以接收和响应 Web 客户端的网络请求。

  • Java Web 的三大组件(Servlet、Filter、Listener)之一

Servlet 的架构

Servlet 的继承关系

public interface Servlet
public abstract class GenericServlet implements Servlet, ServletConfig, java.io.Serializable
public abstract class HttpServlet extends GenericServlet

所有的 Servlet 都需要实现 Servlet 接口。Servlet 接口定义了 Servlet 的生命周期方法

init(ServletConfig config)
service(ServletRequest req, ServletResponse res)
destroy()

Servlet 初始化时会调用 init(ServletConfig config) 方法;在 service(ServletRequest req, ServletResponse res) 方法中对客户端的请求进行处理;如果 Servlet 不用了,会调用 destroy() 方法销毁,然后等待垃圾回收。

GenericServlet

为了方便编写 Servlet,创造了 GenericServlet 抽象类,只需要实现 public abstract void service(ServletRequest req, ServletResponse res) 方法即可。

HttpServlet

HttpServlet 是和 HTTP 协议有关的 Servlet,只需要重写几个 HTTP 相关的方法

  • doGet(HttpServletRequest req, HttpServletResponse resp)
  • doPost(HttpServletRequest req, HttpServletResponse resp)
  • doPut(HttpServletRequest req, HttpServletResponse resp)
  • doDelete(HttpServletRequest req, HttpServletResponse resp)

和 Servlet 生命周期的相关方法

  • init()
  • destroy()

当请求到来时,会调用 service(ServletRequest req, ServletResponse res),在 HttpServlet 中方法的实现如下

public void service(ServletRequest req, ServletResponse res) {
    HttpServletRequest  request;
    HttpServletResponse response;
    
    if (!(req instanceof HttpServletRequest &&
            res instanceof HttpServletResponse)) {
        throw new ServletException("non-HTTP request or response");
    }

    request = (HttpServletRequest) req;
    response = (HttpServletResponse) res;

    service(request, response);
}

这个方法只做了两件事

  • ServletRequest 强转为 HttpServletRequest;ServletResponse 强转为 HttpServletResponse
  • 调用 service(HttpServletRequest req, HttpServletResponse resp) 方法,在这个方法中会对 HTTP 的请求进行判断,然后调用对应的 doXX() 方法
protected void service(HttpServletRequest req, HttpServletResponse resp) {
    String method = req.getMethod();

    if (method.equals(METHOD_GET)) {
        // ...
        doGet(req, resp);
    } else if (method.equals(METHOD_HEAD)) {
        // ...
        doHead(req, resp);
    } else if (method.equals(METHOD_POST)) {
        doPost(req, resp);          
    } else if (method.equals(METHOD_PUT)) {
        doPut(req, resp);          
    } else if (method.equals(METHOD_DELETE)) {
        doDelete(req, resp);          
    } else if (method.equals(METHOD_OPTIONS)) {
        doOptions(req,resp);          
    } else if (method.equals(METHOD_TRACE)) {
        doTrace(req,resp);          
    } else {
        // ...          
    }
}

Servlet与线程安全

  • 不要在Servlet中创建成员,创建局部变量即可
  • 可以创建无状态成员
  • 可以创建有状态的成员,但状态必须为只读的

相关文章

  • 理解Servlet、Servlet容器

    本文参考总结自 理解Servlet和Servlet容器、Web服务器等概念 CGI是什么 CGI 早期的Web服务...

  • Servlet的理解

    前言 好记性不如烂笔头,而且学习了却没有做笔记总结,就不算学习。因此写了一篇文章总结一下对 Servlet的理解。...

  • 理解Servlet

    搞Java开发不可避免要用到Servlet,知其然知其所以然,它是什么呢?可以看我前面写的1-Java的认识扫盲,...

  • 理解Servlet

    前言 这篇文章的出发点是为了整理Servlet相关知识点,以免在相关概念混淆或分不清的时候到处查阅资料。 一、什么...

  • 第12讲.Servlet

    Servlet 学习摘要: 理解为何要学习Servlet? 什么是Sevlet?如何编写一个Servlet程序。S...

  • JavaEE学习笔记Day2

    JavaEE学习笔记day2 理解Servlet的编写和访问过程掌握Servlet父子类之间的继承关系理解Serv...

  • java web 学习

    servlet 的理解 servlet:java server applet 服务端小程序,它是JSP组件的前身,...

  • 深入理解Servlet

    深入理解Servlet 什么是Servlet 在Java web中Servlet是一种用来处理请求和发送响应的组件...

  • 对servlet的理解

    使用java编写的服务器端程序,而这些servlet都要实现或者servlet这个借口,主要的功能是交互式的浏览器...

  • servlet 理解大全

    看完我的servlet大全希望你对servlet有个清晰的认识 JVM与编辑器对比 java拾荒 java创建的对...

网友评论

      本文标题:Servlet的理解

      本文链接:https://www.haomeiwen.com/subject/hobwzttx.html