HttpServlet 里的三个方法:service(HttpServletRequest req, HttpServletResponse resp) ,doGet(HttpServletRequest req, HttpServletResponse resp), doPost(HttpServletRequest req, HttpServletResponse res)的区别和联系:

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

  1. 注意,sun只是定义了servlet接口,而实现servlet接口的就是类似于tomcat的服务器,所以我是在tomcat的安装目录下找到实现的类。
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是这样的:

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

servlet中service() doGet() doPost() 方法的更多相关文章

  1. servlet 中 service ,doGet , doPost 关系

    web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2 ...

  2. [转]servlet中的service, doGet, doPost方法的区别和联系

    原文地址:http://m.blog.csdn.net/blog/ghyg525/22928567 大家都知道在javax.servlet.Servlet接口中只有init, service, des ...

  3. servlet中的doGet()与doPost()以及service()的用法

    doget和dopost的区别 get和post是http协议的两种方法,另外还有head, delete等 1.这两种方法有本质的区别,get只有一个流,参数附加在url后,大小个数有严格限制且只能 ...

  4. Java之通过反射机制选择servlet中的对应的方法

    此方法用于在对Javaee开发中的通过对应的名称而选择servlet中的对应的方法 注:主要代码如下 protected void doGet(HttpServletRequest req, Http ...

  5. servlet中service() 和doGet() 、doPost() 学习笔记

    Sevlet接口定义如下: 与Sevlet接口相关的结构图: service() 方法是 Servlet 的核心.每当一个客户请求一个HttpServlet 对象,该对象的service() 方法就要 ...

  6. SERVLET中的doGet与doPost两个方法之间的区别

    get和post是http协议的两种方法,另外还有head, delete等 这两种方法有本质的区别,get只有一个流,参数附加在url后,大小个数有严格限制且只能是字符串.post的参数是通过另外的 ...

  7. Servlet中Service方法

    doGet方法只能处理Get方式提交的请求,doPost则可以处理Post方式提交的请求, 一种既可以处理Get方式又可以处理Post方式的提交的请求,它就是Service方法. service方法用 ...

  8. Servlet中service()方法

    在学习Servlet的过程中,我们大多时候编码都是直接继承HttpServlet这个类,并且重写doGet ,doPost,但是查看Api时我们会发现Servlet接口 ,GenericSevlet抽 ...

  9. Servlet 小试牛刀(doGet,doPost)

    实验说明: 通过javax.servlet.http下的HttpServlet,HttpServletRequest,HttpServletResponse来完成一些常用Servlet实例 java代 ...

随机推荐

  1. 爬虫实战【7】Ajax解析续-今日头条图片下载

    昨天我们分析了今日头条搜索得到的信息,一直对图集感兴趣的我还是选择将所有的图片下载下来. 我们继续讲一下如何通过各个图集的url得到每个图集下面的照片. 分析图集的组成 [插入图片,某个图集的页面] ...

  2. A - 士兵队列训练问题

    A - 士兵队列训练问题 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit ...

  3. 解决asp.net中HTML中talbe的行高被内容撑的变高的问题

    将asp.net页面中的如下语句: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...

  4. 【转】mysql利用init-connect增加访问审计功能

    mysql的连接首先都是要通过init-connect初始化,然后连接到实例. 我们利用这一点,通过在init-connect的时候记录下用户的thread_id,用户名和用户地址实现db的访问审计功 ...

  5. HDFS涉及ACLs的命令

    What is ACL Hadoop中的ACL与Linux中的ACL机制基本相同,都是用于为文件系统提供更精细化的权限控制. 参考 HDFS ACLs: Fine-Grained Permission ...

  6. ubuntu16.04的下载地址

    官网不推荐 https://www.ubuntu.com/download 阿里云开源镜像站 http://mirrors.aliyun.com/ubuntu-releases/16.04/ 浙江大学 ...

  7. 字符串之strchr

    功能:查找字符在字符串中第一次出现的位置. #include <iostream> #include <assert.h> using namespace std; char ...

  8. iOS警告框和操作表

    应用如何与用户交流呢? 警告框(AlertView)和操作表(ActionSheet)就是为此而设计的. 本文案例的原型草图如图3-48所示,其中有两个按钮“Test警告框”和“Test操作表”,点击 ...

  9. jQuery 中让我误解的那些方法

    至今我都不能说把 jQuery 中的方法在实践中都用了一遍, 一部分是用不到,一部分则是我未能体会它的魅力, 所以今天就来收录一下,那些从我们之间溜走的美丽. $.fn.add() 一开始对它的理解就 ...

  10. Hearbeat 工作原理

    Hearbeat 原理 heartbeat (Linux-HA)的工作原理:heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗 余链路, ...