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. 20160924-1——mysql存储引擎

    一.主要存储引擎 5.5以后的版本,默认存储引擎从myisam改成了innodb:线上推荐都用innodb 二.innodb存储引擎 (一)结构 INNODB存储引擎大致分三部分,图中已经(1)(2) ...

  2. iOS蓝牙接收外设数据自动中断

    一.错误原因 在做iOS设备作为central,与蓝牙外设连接,接收蓝牙外设传输的数据时发生蓝牙中断. 在- (void)centralManager:(CBCentralManager *)cent ...

  3. 计算属性 vs 侦听属性 当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的

    https://cn.vuejs.org/v2/guide/computed.html#基础例子 计算属性 vs 侦听属性 Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属 ...

  4. delphi下excel的操作

    1.首先引用comobj.varints单元 2.声明xlApp,xlBook, xlSheet,picture: Variant; 3.基本操作 xlApp:=CreateOleObject('Ex ...

  5. Eslint使用指南

    本文主要讲如何在前端项目中引入Eslint静态代码检查工具,提升代码质量和统一代码风格,避免一些低级错误. 一 引入静态代码检查工具的目的 在团队协作中,为避免低级 Bug.产出风格统一的代码,会预先 ...

  6. ES6学习笔记(三)——数值的扩展

    看到这条条目录有没有感觉很枯燥,觉得自己的工作中还用不到它所以实在没有耐心看下去,我也是最近得闲,逼自己静下心来去学习去总结,只有在别人浮躁的时候你能静下心来去学去看去总结,你才能进步.毕竟作为前端不 ...

  7. 0x08 MySQL 超详细-索引原理&慢查询优化【转-多图】(重点)

    Content From——Egon's Blog http://www.cnblogs.com/linhaifeng/articles/7274563.html#top 0x01 介绍 为何要有索引 ...

  8. jQuery中获取特定顺序子元素(子元素种类不定)的方法

    提出问题:只已知父元素和父元素中子元素的次序,怎么通过jQuery方法获得该元素? <p>第一部分:</p> <ul> <li>1</li> ...

  9. JAVA使用DES加密解密

    在使用DES加密解密的时候,遇到了一些问题,廖记一下.如有哪位大神亲临留言指点,不胜感激. 先上代码: public DESUtil() { } //密码,长度要是8的倍数 注意此处为简单密码 简单应 ...

  10. Funq之Lambda表达式2

    Last month I started a series of posts covering some of the new VB and C# language features that are ...