JAVA Servlet中 service doGet doPost的区别

73 阅读2分钟

简略说明

在Java Servlet中,doGet,doPost和service是处理HTTP请求的三个主要方法。这些方法由Servlet容器(如Tomcat)调用,以响应来自客户端(通常是Web浏览器)的请求。

  1. doGet(HttpServletRequest req, HttpServletResponse resp): 此方法用于处理HTTP GET请求。GET请求通常用于获取(或查询)资源信息。在GET请求中,请求参数附加在URL后面。
  2. doPost(HttpServletRequest req, HttpServletResponse resp): 此方法用于处理HTTP POST请求。POST请求通常用于发送(或提交)数据以进行处理。在POST请求中,数据包含在请求体中。
  3. service(HttpServletRequest req, HttpServletResponse resp): 此方法是Servlet的主要入口点,用于处理来自客户端的所有请求。它根据HTTP请求类型(GET,POST,PUT,DELETE等)调用适当的方法(doGet,doPost等)。如果你想要在所有类型的请求中执行相同的操作,可以重写此方法。

请注意,通常不建议直接重写service方法,而是应该重写doGet或doPost等方法,这样Servlet容器就可以正确地处理并发请求。

Servlet的概要继承结构

Servlet 接口 
GenericServlet 抽象类
HttpServlet 抽象类

service()方法是定义在Servlet接口中的方法,也许最初sun在设计Servlet这个概念时,是去包括了所有的网络请求(不止http请求),所以从最顶层接口上设计定义了 service(ServletRequest req,ServletResponse res)方法。

doGet()doPost()是定义在HttpServlet中的,专针对Http请求的。这个Servlet中还有doPut(),doDelete()方法。

并且在HttpServlet中,实现了service()方法,通过判断请求方式去调用不同的doXXX方法。

所以一般写HttpServlet的实现时,都去重写doXXX方法较好

备注: 以前学JSP时,都是使用Eclipse创建的JAVA EE项目,会带入Servlet的包,但现在新版已经可以使用maven管理,并且Servlet包都是由jakarta提供。maven配置如下:

<dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <version>6.0.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>jakarta.servlet.jsp</groupId>
    <artifactId>jakarta.servlet.jsp-api</artifactId>
    <version>3.1.1</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>jakarta.servlet.jsp.jstl</groupId>
    <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
    <version>3.0.0</version>
</dependency>
<dependency>
    <groupId>jakarta.el</groupId>
    <artifactId>jakarta.el-api</artifactId>
    <version>5.0.1</version>
</dependency>
<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jakarta.servlet.jsp.jstl</artifactId>
    <version>3.0.0</version>
</dependency>