`
jzinfo
  • 浏览: 116618 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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(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是这样的:

 

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方法。

 

比如说:你的客户端代码是:

<%@page contentType="text/html; charset=utf-8"%>
<html>
<head><title>选择</title></head>
<body>
请选择你喜欢的水果:<br>
<form action = "Test" method = "post">
<input type="checkbox" name="fruit" value ="apple" >苹果<br>
<input type="checkbox" name="fruit" value ="orange">桔子<br>
<input type="checkbox" name="fruit" value ="mango">芒果<br>
<input type="submit" value="提交">
</form>
</body>
</html>

服务端servlet是:Test类

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 演示service方法
 */
public class Test extends HttpServlet {

 public void service(ServletRequest req, ServletResponse res)
   throws ServletException, IOException {
           res.getOutputStream().print("This is the service");

 }

 protected void doGet(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  doPost(request,response);

 }
 protected void doPost(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  ServletOutputStream out=response.getOutputStream();
  String[] args=(String[])request.getParameterValues("fruit");
  for(int i=0;i<args.length;i++){
   out.print(args[i]+"<br>");
  }
  
 }
}

 

分享到:
评论
1 楼 googya 2010-08-12  
这段代码的结果是,dopost根本没有执行?

相关推荐

    13-Servlet访问流程以及doGet和doPost.pdf

    Servlet访问流程以及doGet和doPost 能力目标 能叙述Servlet访问流程以及Servlet的生命周期 能描述init()、service()、destory()什么时候被调用的 能描述doGet()和doPost()内部访问流程

    servlet知识点小结

    1、serialVersionUID作用, 一个是默认的1L,比如:private static final long serialVersionUID = 1L; 2、Servlet中service()方法 3、servlet中的doGet和doPost的不同 4、……

    jsp和servlet操作mysql中文乱码问题的解决办法

    2、如果乱码是在servlet中出现的,则有两种方法:一种是在每个servlet中doget和doPost方法头部加上request.setCharacterEncoding(“UTF-8″);第二种最保险,一劳永逸,是专门写一个过滤器类,也称国际化,类名为...

    JSP/Servlet Java面试逻辑题

    答:Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。 5、如何现实servlet的单线程模式★★ 答:&lt;%@page isThreadSafe=false%&gt; 面试中会遇到! 6、页面间对象传递的方法 答:...

    JavaWeb核心之Servlet-源代码

    2)覆盖doGet和doPost 3)在web.xml中进行servlet的配置。 (1)Servlet接口中的方法 1)init(ServletConfig config) 何时执行:servlet对象创建的时候执行 ServletConfig : 代表的是该servlet对象的配置信息 2)...

    servlet temple

    service() 方法可以调用其它方法来处理请求,例如 doGet()、doPost() 或其它的方法。  (3) 终止  当服务器不再需要 Servlet, 或重新装入 Servlet 的新实例时,服务器会调用 Servlet 的 destroy() 方法。  3. ...

    Tomcat服务器配置、启动分析、Servlet文件配置

    内容包括了Tomcat服务器配置、启动分析、Servlet文件配置等tomcat的基础应用配置。

    javaweb-tomcat浏览器聊天室毕业设计

    form表单提交数据给servlet,采用doget和dopost ${pageContext.request.contextPath }/user" onSubmit="return check()"&gt; servlet接收value的方法login方法 userservlet类登录 UserServlet-----...

    servlet2.4doc

    Called by the servlet container to indicate to a servlet that the servlet is being taken out of service. destroy() - Method in class javax.servlet.GenericServlet Called by the servlet container to ...

    Javaweb面试题.docx

    答:Web 容器加载Servlet 并将其实例化后,Servlet 生命周期开始,容器运行其init 方法进行Servlet 的初始化,请求到达时运行其service 方法,service方法自动派遣运行与请求对应的doXXX 方法(doGet,doPost)等,...

    JAVA笔试题目集合

    Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别...

    java-servlet-api.doc

    当客户端发出请求时,Servlet引擎传递给Servlet一个ServletRequest对象和一个ServletResponse对象,这两个对象作为参数传递到service()方法中。 Servlet也可以执行ServletRequest接口和ServletResponse接口。...

    servlet-src:从Maven仓库下载的Servlet原始码和文档,计划阅读,解析Servlet的源码及实现

    目前的我理解的Servlet生命周期: Request(POST / GET,HttpSession)-(HTTP)-&gt; [Servlet(create,service(doGet,doPost),destroy)]-(HTTP)-&gt;响应单击访问Java Servlet 4.0的官方文档。

    request.setAttribute 语句前总显示红色感叹号解决办法 HTTP Status 500 -

    y2ssh.sg.chp1.framework.Controller.doGet(Controller.java:25) y2ssh.sg.chp1.framework.Controller.doPost(Controller.java:33) javax.servlet.http.HttpServlet.service(HttpServlet.java:637) javax....

    面试葵花宝典

    Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其 service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其 destroy方法。与cgi的区别...

    简单的servlet增,删,改,查

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } protected void doPost(HttpServletRequest ...

    投票系统,基于mvc开发,jsp+servlet+mysql

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, ...

    Spring MVC中的DispatcherServlet的使用

    3. 运行 – service() 根据 HTTP 请求方法分发到一下方法中: doGet() doPost() doPut()早期版本默认无效 doDelete() 早期版本默认无效 4. 销毁 – destory() 默认一个 Servlet 映射一个 URL 路径 /...

    数据库的基本操作前端加后端.zip

    对数据库的增删改查,前端页面和后端数据 使用java对数据库进行... protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req,resp); } }

    zhifuba-demo.rar

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub doPost(req, resp); } @Override protected ...

Global site tag (gtag.js) - Google Analytics