`
jzinfo
  • 浏览: 118164 次
  • 性别: 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根本没有执行?

相关推荐

    Servlet中doGet与doPost的区别

    Servlet中`doGet`与`doPost`方法的区别是理解和掌握Servlet工作原理的关键,它们分别对应HTTP协议中的GET和POST请求方式,下面将详细阐述这两个方法的特点及其应用场景。 ### 一、`doGet`与`doPost`的基本概念 `...

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

    在本文中,我们将深入探讨Servlet的访问流程、生命周期以及doGet和doPost方法的工作原理。 首先,让我们了解Servlet的访问流程。当用户在浏览器中输入URL并提交请求时,这个请求会被发送到服务器。Tomcat这样的Web...

    doget和dopost的区别

    在HttpServlet类中,service()方法被实现,它会根据请求类型自动调用doGet或doPost等方法。开发者也可以选择重写service()方法,自定义请求处理流程,但这将覆盖默认的行为,不再自动调用doGet或doPost等方法。 ###...

    doget dopost区别

    - **service() 方法**:在 `javax.servlet.Servlet` 接口中定义,由容器调用来处理请求。在 `javax.servlet.GenericServlet` 中实现了该方法。 - **doGet/doPost 方法**:在 `javax.servlet.http.HttpServlet` 类中...

    crm项目jsp+servlet+service+dao

    Servlet通过`doGet`和`doPost`等方法处理HTTP请求,与JSP配合实现MVC(Model-View-Controller)架构中的Controller角色。 3. Service层:Service层是业务逻辑的实现层,它封装了DAO(Data Access Object)操作,...

    servlet中方法执行次序及API简介(init,service,doservice,doget等)

    例如,通过doGet()和doPost()方法实现动态网页,使用ServletConfig和ServletContext配置和管理Servlet,利用RequestDispatcher进行页面间的跳转。 总之,Servlet是Java Web开发的基础,理解其生命周期和API对于构建...

    Servlet与JSP之间的关系

    执行阶段,Servlet通过`service()`方法处理请求,根据HTTP方法(如GET、POST)调用相应的`doGet()`或`doPost()`方法;终止阶段,当Servlet不再需要时,调用`destroy()`方法,释放资源。 尽管Servlet具有很多优点,...

    用servlet写的九九乘法表

    在Servlet中实现九九乘法表,开发者通常会创建一个二维数组来存储乘积,并在`doGet()`或`doPost()`方法中生成HTML字符串。这个字符串将包含表格的结构,如`&lt;table&gt;`、`&lt;tr&gt;`、`&lt;td&gt;`等标签,以及每个单元格内的乘积...

    sevlet用法总结

    为了代码复用,你可以只实现一个`doGet()`或`doPost()`,并在另一个方法中调用它。 关于Servlet的生命周期,主要有以下几个阶段: 1. 初始化:当Web容器加载Servlet时,会调用`init()`方法。你应该避免覆盖带参数的...

    servlet 中文帮助文档

    2. `service(ServletRequest request, ServletResponse response)`: 处理客户端请求,根据请求类型调用`doGet()`或`doPost()`。 3. `destroy()`: 销毁Servlet,服务器在Servlet不再使用时调用,释放Servlet占用的...

    Servlet中文API文档 servlet

    HttpServlet提供了doGet()、doPost()等方法,分别对应HTTP的GET和POST请求。开发者通常重写这些方法来实现业务逻辑。 4. **Servlet生命周期**:Servlet的生命周期包括加载和初始化、服务、销毁三个阶段。Servlet...

    servlet技术初步入门

    5. service()方法根据请求类型(GET、POST等)选择合适的doXXX方法(如doGet、doPost)进行处理。 6. Servlet处理完请求后,通过ServletResponse对象向客户端发送响应。 7. 当Servlet不再需要时,容器会调用destroy...

    Servlet中文api帮助文档

    3. `HttpServlet`:继承自GenericServlet,提供了处理HTTP请求的方法,如doGet(), doPost()等。 4. `ServletConfig`:在Servlet初始化时由容器提供,包含关于Servlet的配置信息。 5. `ServletRequest`:代表客户端的...

    使用Servlet实现用户注册共4页.pdf.zip

    【标题】:使用Servlet实现用户注册 在Web开发中,Servlet是Java EE平台中的一个核心组件,用于扩展服务器的功能,处理HTTP...而“用doget和dopost打印乘法表”是一个练习题,可以帮助巩固对Servlet请求处理的理解。

    servlet生命周期演示代码

    值得注意的是,这个示例中还调用了 `doPost` 方法,这可能并不是一个好的做法,但在教学演示中可以用来说明 `doGet` 和 `doPost` 方法的调用顺序。 ```java public void doPost(HttpServletRequest request, ...

    servlet中文帮助

    3. 服务:每当有请求到达,容器都会调用Servlet的service()方法。这个方法会根据请求类型(GET、POST等)选择合适的doGet()或doPost()方法处理请求。 4. 响应:Servlet处理完请求后,通过OutputStream或Writer向...

    servlet实现身高体重比测试

    - 在Servlet的`doGet()`或`doPost()`方法中获取参数,计算BMI,然后可以通过转发或重定向返回结果页面。 通过实践这个项目,你不仅可以掌握Servlet的基本操作,还能深入了解EL表达式的应用,以及如何在实际Web应用...

    servlet执行过程与生命周期

    `service()`方法的核心作用是根据请求的方法类型(GET、POST等)选择合适的处理方法,通常是调用`doGet()`或`doPost()`方法。 对于GET请求,Servlet会调用`doGet()`方法;对于POST请求,则调用`doPost()`方法。这些...

Global site tag (gtag.js) - Google Analytics