在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. }