`

servlet中service doGet doPost 的联系和区别

阅读更多
在servlet中默认情况下,无论你是get还是post 提交过来 都会经过service()方法来处理,然后转向到doGet

或是doPost方法,可以看HttpServlet 类的service方法:
Java代码

   1. protected void service(HttpServletRequest req, HttpServletResponse resp)   
   2.        throws ServletException, IOException   
   3.     {   
   4.         String method = req.getMethod();   
   5.        if(method.equals("GET"))   
   6.         {   
   7.            long lastModified = getLastModified(req);   
   8.            if(lastModified == -1L)   
   9.             {   
  10.                 doGet(req, resp);   
  11.             } else  
  12.             {   
  13.                long ifModifiedSince = req.getDateHeader("If-Modified-Since");   
  14.                if(ifModifiedSince < (lastModified / 1000L) * 1000L)   
  15.                 {   
  16.                     maybeSetLastModified(resp, lastModified);   
  17.                     doGet(req, resp);   
  18.                 } else  
  19.                 {   
  20.                     resp.setStatus(304);   
  21.                 }   
  22.             }   
  23.         } else  
  24.        if(method.equals("HEAD"))   
  25.         {   
  26.            long lastModified = getLastModified(req);   
  27.             maybeSetLastModified(resp, lastModified);   
  28.             doHead(req, resp);   
  29.         } else  
  30.        if(method.equals("POST"))   
  31.             doPost(req, resp);   
  32.        else  
  33.        if(method.equals("PUT"))   
  34.             doPut(req, resp);   
  35.        else  
  36.        if(method.equals("DELETE"))   
  37.             doDelete(req, resp);   
  38.        else  
  39.        if(method.equals("OPTIONS"))   
  40.             doOptions(req, resp);   
  41.        else  
  42.        if(method.equals("TRACE"))   
  43.         {   
  44.             doTrace(req, resp);   
  45.         } else  
  46.         {   
  47.             String errMsg = lStrings.getString("http.method_not_implemented");   
  48.             Object errArgs[] = new Object[1];   
  49.             errArgs[0] = method;   
  50.             errMsg = MessageFormat.format(errMsg, errArgs);   
  51.             resp.sendError(501, errMsg);   
  52.         }   
  53.     }  

protected void service(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException
    {
        String method = req.getMethod();
        if(method.equals("GET"))
        {
            long lastModified = getLastModified(req);
            if(lastModified == -1L)
            {
                doGet(req, resp);
            } else
            {
                long ifModifiedSince = req.getDateHeader("If-Modified-Since");
                if(ifModifiedSince < (lastModified / 1000L) * 1000L)
                {
                    maybeSetLastModified(resp, lastModified);
                    doGet(req, resp);
                } else
                {
                    resp.setStatus(304);
                }
            }
        } else
        if(method.equals("HEAD"))
        {
            long lastModified = getLastModified(req);
            maybeSetLastModified(resp, lastModified);
            doHead(req, resp);
        } else
        if(method.equals("POST"))
            doPost(req, resp);
        else
        if(method.equals("PUT"))
            doPut(req, resp);
        else
        if(method.equals("DELETE"))
            doDelete(req, resp);
        else
        if(method.equals("OPTIONS"))
            doOptions(req, resp);
        else
        if(method.equals("TRACE"))
        {
            doTrace(req, resp);
        } else
        {
            String errMsg = lStrings.getString("http.method_not_implemented");
            Object errArgs[] = new Object[1];
            errArgs[0] = method;
            errMsg = MessageFormat.format(errMsg, errArgs);
            resp.sendError(501, errMsg);
        }
    }

从上面可以看出 这里的service是用来转向的,但是如果你在自己的servlet类中覆盖了service方法,比如说你的service是这样的:

Java代码

   1. public void service(ServletRequest req, ServletResponse res)   
   2.                    throws ServletException, IOException {   
   3.          res.getOutputStream().print(   
   4.          "image is <img src='images/downcoin.gif'></img><br>");   
   5.      }  

public void service(ServletRequest req, ServletResponse res)
                   throws ServletException, IOException {
        res.getOutputStream().print(
         "image is <img src='images/downcoin.gif'></img><br>");
    }

那么这时service就不是用来转向的,而是用来处理业务的,现在不论你的客户端是用pos还是get来请求此servlet

都会执行service方法也只能执行servlet方法,不会去执行doPost或是doGet方法。

比如说:你的客户端代码是:
Java代码

   1. <%@page contentType="text/html; charset=utf-8"%>   
   2. <html>   
   3. <head><title>选择</title></head>   
   4. <body>   
   5. 请选择你喜欢的水果:<br>   
   6. <form action = "Test" method = "post">   
   7. <input type="checkbox" name="fruit" value ="apple" >苹果<br>   
   8. <input type="checkbox" name="fruit" value ="orange">桔子<br>   
   9. <input type="checkbox" name="fruit" value ="mango">芒果<br>   
  10. <input type="submit" value="提交">   
  11. </form>   
  12. </body>   
  13. </html>   
  14.   
  15. 服务端servlet是:Test类   
  16.   
  17. import java.io.IOException;   
  18.   
  19. import javax.servlet.ServletException;   
  20. import javax.servlet.ServletOutputStream;   
  21. import javax.servlet.ServletRequest;   
  22. import javax.servlet.ServletResponse;   
  23. import javax.servlet.http.HttpServlet;   
  24. import javax.servlet.http.HttpServletRequest;   
  25. import javax.servlet.http.HttpServletResponse;   
  26.   
  27. /**
  28. * 演示service方法
  29. */  
  30. public class Test extends HttpServlet {   
  31.   
  32. public void service(ServletRequest req, ServletResponse res)   
  33.    throws ServletException, IOException {   
  34.             res.getOutputStream().print("This is the service");   
  35.   
  36. }   
  37.   
  38. protected void doGet(HttpServletRequest request,   
  39.     HttpServletResponse response) throws ServletException, IOException {   
  40.    doPost(request,response);   
  41.   
  42. }   
  43. protected void doPost(HttpServletRequest request,   
  44.     HttpServletResponse response) throws ServletException, IOException {   
  45.    ServletOutputStream out=response.getOutputStream();   
  46.    String[] args=(String[])request.getParameterValues("fruit");   
  47.   for(int i=0;i<args.length;i++){   
  48.     out.print(args[i]+"<br>");   
  49.    }   
  50.      
  51. }   
  52. }  


分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Servlet中doGet与doPost的区别

    Servlet中`doGet`与`doPost`方法的区别是理解和掌握Servlet工作原理的关键,它们分别对应HTTP协议中的GET和POST请求方式,下面将详细阐述这两个方法的特点及其应用场景。 ### 一、`doGet`与`doPost`的基本概念 `...

    doget和dopost的区别

    标题与描述概述的知识点主要集中在GET与POST请求方法的区别,以及它们在Web开发,特别是Java Servlet环境中的应用。为了深入理解和掌握这些知识点,我们可以从以下几个方面进行详细探讨: ### 安全性差异 GET请求...

    13-Servlet访问流程以及doGet和doPost.pdf

    在本文中,我们将深入探讨Servlet的访问流程、生命周期以及doGet和doPost方法的工作原理。 首先,让我们了解Servlet的访问流程。当用户在浏览器中输入URL并提交请求时,这个请求会被发送到服务器。Tomcat这样的Web...

    doget dopost区别

    - **doGet/doPost 方法**:在 `javax.servlet.http.HttpServlet` 类中实现,用于处理 GET 和 POST 请求。 综上所述,选择正确的 HTTP 方法不仅能够提高应用程序的安全性和性能,还能更好地满足不同的业务需求。...

    servlet中方法执行次序及API简介(init,service,doservice,doget等)

    例如,通过doGet()和doPost()方法实现动态网页,使用ServletConfig和ServletContext配置和管理Servlet,利用RequestDispatcher进行页面间的跳转。 总之,Servlet是Java Web开发的基础,理解其生命周期和API对于构建...

    crm项目jsp+servlet+service+dao

    Servlet通过`doGet`和`doPost`等方法处理HTTP请求,与JSP配合实现MVC(Model-View-Controller)架构中的Controller角色。 3. Service层:Service层是业务逻辑的实现层,它封装了DAO(Data Access Object)操作,...

    用servlet写的九九乘法表

    在Servlet中实现九九乘法表,开发者通常会创建一个二维数组来存储乘积,并在`doGet()`或`doPost()`方法中生成HTML字符串。这个字符串将包含表格的结构,如`&lt;table&gt;`、`&lt;tr&gt;`、`&lt;td&gt;`等标签,以及每个单元格内的乘积...

    servlet 中文帮助文档

    2. `service(ServletRequest request, ServletResponse response)`: 处理客户端请求,根据请求类型调用`doGet()`或`doPost()`。 3. `destroy()`: 销毁Servlet,服务器在Servlet不再使用时调用,释放Servlet占用的...

    servlet技术初步入门

    在Web应用的web.xml文件中,可以通过&lt;Servlet&gt;和&lt;Servlet-Mapping&gt;元素配置Servlet。例如: ```xml &lt;servlet&gt; &lt;servlet-name&gt;MyServlet&lt;/servlet-name&gt; &lt;servlet-class&gt;com.example.MyServlet&lt;/servlet-class&gt; ...

    Servlet中文API文档 servlet

    1. **Servlet接口**:所有Servlet类必须实现javax.servlet.Servlet接口,该接口定义了Servlet的基本方法,如init()、service()和destroy()。其中,init()用于初始化Servlet,service()处理客户端请求,destroy()则在...

    sevlet用法总结

    为了代码复用,你可以只实现一个`doGet()`或`doPost()`,并在另一个方法中调用它。 关于Servlet的生命周期,主要有以下几个阶段: 1. 初始化:当Web容器加载Servlet时,会调用`init()`方法。你应该避免覆盖带参数的...

    Servlet中文api帮助文档

    在web应用的web.xml文件中,可以通过`&lt;servlet&gt;`和`&lt;servlet-mapping&gt;`元素来配置Servlet。`&lt;servlet-name&gt;`定义Servlet的别名,`&lt;servlet-class&gt;`指定Servlet类全名,`&lt;url-pattern&gt;`用于映射Servlet处理的URL路径...

    servlet与jsp的区别

    - **生命周期**:Servlet具有明确的生命周期,包括初始化(init)、服务(service)和销毁(destroy)三个阶段。 - **请求处理**:Servlet通过覆盖`service`方法来处理客户端请求。对于HTTP请求,通常还需要重写`...

    使用Servlet实现用户注册共4页.pdf.zip

    【标题】:使用Servlet实现用户注册 在Web开发中,Servlet是Java EE平台中的一个核心组件,用于扩展服务器的功能,处理HTTP...而“用doget和dopost打印乘法表”是一个练习题,可以帮助巩固对Servlet请求处理的理解。

    servlet中文帮助

    Servlet是Java Web开发中的核心组件,它用于扩展服务器的功能,处理来自客户端(通常是Web浏览器)的请求,并...在Java+Servlet+API说明文档.pdf中,您将找到更详细的API说明和示例,帮助您深入学习和掌握Servlet技术。

    servlet反编译源码

    例如,你可以看到service()方法如何根据请求类型分发任务,以及doGet()和doPost()如何处理具体请求。此外,init()和destroy()方法的实现揭示了Servlet如何管理自己的状态和资源。 通过分析源码,我们可以学习到: ...

    servlet源码 servlet-api-src javax.servlet.Servlet源码

    `service()`方法是Servlet处理请求的核心,它根据请求类型调用适当的doXXX()方法(如`doGet()`、`doPost()`等)来处理HTTP请求。 Servlet的生命周期包括加载、初始化、服务、销毁四个阶段。在Web应用启动时,...

    servlet 函数 中文介绍

    3. 服务:每当有新的请求到达,Servlet容器会调用`service()`方法,根据请求类型选择合适的`doGet()`、`doPost()`等方法来处理请求。 4. 销毁:当Servlet不再需要,或者服务器关闭时,容器会调用`destroy()`方法释放...

Global site tag (gtag.js) - Google Analytics