servlet中service() doGet() doPost() 方法

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方法。
时间: 2024-12-14 18:04:54

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

servlet中service doGet doPost 的关系

在servlet中默认情况下,无论你是get还是post 提交过来都会经过service()方法来处理,然后转向到doGet 或是doPost方法,可以看HttpServlet 类的service方法: protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String method = req.getMethod(); if(

转: servlet中的service, doGet, doPost方法的区别和联系

大家都知道在javax.servlet.Servlet接口中只有init, service, destroy方法 但是我们在继承HttpServlet的时候为何一般重写doGet和doPost方法呢 下面我们看一下Servlet源代码: 注意: JDK只是定义了servlet接口,而实现servlet接口的比如tomcat, jboss等服务器 下面我们找到tomcat源代码, 可以到官网下载, 目前最新版本是7.0.53 找到javax.servlet.http.HttpServlet类, 下

Servlet中的Cookie使用方法

Servlet中的doGet方法: 1 protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException { 2 request.setCharacterEncoding("utf-8"); 3 response.set

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

get和post是http协议的两种方法,另外还有head, delete等 这两种方法有本质的区别,get只有一个流,参数附加在url后,大小个数有严格限制且只能是字符串.post的参数是通过另外的流传递的,不通过url,所以可以很大,也可以传递二进制数据,如文件的上传. 在servlet开发中,以doGet()和doPost()分别处理get和post方法. 首先判断请求时是get还是post,如果是get就调用doGet(), 如果是post就调用doPost().都会执行这个方法. 1.

Servlet中service方法

在学习Servlet的过程中,我们大多时候编码都是直接继承HttpServlet这个类,并且重写doGet ,doPost,但是查看Api时我们会发现Servlet接口 ,GenericSevlet抽象类 以及HttpServlet类中都有service方法,那么为什么我们继承HttpSevlet类时不要重写service 而要重写doGet doPost呢?service的作用是什么捏?? 正如上文中所说的,Servlet中,service方法是一直存在的,因为最高层的接口Servlet(像H

我的Android进阶之旅------&gt;android中service的onStartCommand()方法中intent为null的问题

今天在维护公司的一个APP的时候,突然爆了空指针异常, Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.content.Intent.getBooleanExtra(java.lang.String, boolean)' on a null object reference 下面是报错的log. D/AndroidRuntime( 4721): Shuttin

doget,doPost在底层走的是service

doget,doPost在底层走的是service 因为在源码上 先执行service方法 然后再调用doget,doPost方法 原文地址:https://www.cnblogs.com/classmethond/p/10206051.html

Servlet中乱码的处理及理解

jsp传值到servlet中,分为set和post提交方式,在servlet中有doGet()\doPost()方法 1.使用post方式提交的,比较简单,有两种解决办法 ①.请求和响应乱码 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //处理响应乱码 response.setContentType("t

在servlet中出现service()、doGet()和doPost()方法时的执行问题

在建立一个继承了HttpServlet类并重写了该类的service().doPost()和doGet()方法时,java会如何执行?其实若是该三个方法都在存在的情况下,java只会执行service()方法,而其他的两种方法不会被执行.若是没有service() 方法,则是根据jsp传入方式选择对应的方法.比如说,若是jsp是以Post方式传入数据,则是调用doPost()方法处理数据.但是一般上在建立一个继承HttpServlet类时都会重写doPost()和doGet()方法,而且会在其中