A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在servlet中默认情况下,无论你是get还是post 提交过来都会经过service()方法来处理,然后转向到doGet
或是doPost方法,可以看HttpServlet 类的service方法:
Java代码
[java] view plain copy
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.           }  

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

Java代码
[java] view plain copy
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.            }  

那么这时service就不是用来转向的,而是用来处理业务的,现在不论你的客户端是用pos还是get来请求此servlet
都会执行service方法也只能执行servlet方法,不会去执行doPost或是doGet方法。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马