在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>");
}
}
}
分享到:
相关推荐
Servlet中`doGet`与`doPost`方法的区别是理解和掌握Servlet工作原理的关键,它们分别对应HTTP协议中的GET和POST请求方式,下面将详细阐述这两个方法的特点及其应用场景。 ### 一、`doGet`与`doPost`的基本概念 `...
在本文中,我们将深入探讨Servlet的访问流程、生命周期以及doGet和doPost方法的工作原理。 首先,让我们了解Servlet的访问流程。当用户在浏览器中输入URL并提交请求时,这个请求会被发送到服务器。Tomcat这样的Web...
在HttpServlet类中,service()方法被实现,它会根据请求类型自动调用doGet或doPost等方法。开发者也可以选择重写service()方法,自定义请求处理流程,但这将覆盖默认的行为,不再自动调用doGet或doPost等方法。 ###...
- **service() 方法**:在 `javax.servlet.Servlet` 接口中定义,由容器调用来处理请求。在 `javax.servlet.GenericServlet` 中实现了该方法。 - **doGet/doPost 方法**:在 `javax.servlet.http.HttpServlet` 类中...
Servlet通过`doGet`和`doPost`等方法处理HTTP请求,与JSP配合实现MVC(Model-View-Controller)架构中的Controller角色。 3. Service层:Service层是业务逻辑的实现层,它封装了DAO(Data Access Object)操作,...
例如,通过doGet()和doPost()方法实现动态网页,使用ServletConfig和ServletContext配置和管理Servlet,利用RequestDispatcher进行页面间的跳转。 总之,Servlet是Java Web开发的基础,理解其生命周期和API对于构建...
执行阶段,Servlet通过`service()`方法处理请求,根据HTTP方法(如GET、POST)调用相应的`doGet()`或`doPost()`方法;终止阶段,当Servlet不再需要时,调用`destroy()`方法,释放资源。 尽管Servlet具有很多优点,...
在Servlet中实现九九乘法表,开发者通常会创建一个二维数组来存储乘积,并在`doGet()`或`doPost()`方法中生成HTML字符串。这个字符串将包含表格的结构,如`<table>`、`<tr>`、`<td>`等标签,以及每个单元格内的乘积...
为了代码复用,你可以只实现一个`doGet()`或`doPost()`,并在另一个方法中调用它。 关于Servlet的生命周期,主要有以下几个阶段: 1. 初始化:当Web容器加载Servlet时,会调用`init()`方法。你应该避免覆盖带参数的...
2. `service(ServletRequest request, ServletResponse response)`: 处理客户端请求,根据请求类型调用`doGet()`或`doPost()`。 3. `destroy()`: 销毁Servlet,服务器在Servlet不再使用时调用,释放Servlet占用的...
HttpServlet提供了doGet()、doPost()等方法,分别对应HTTP的GET和POST请求。开发者通常重写这些方法来实现业务逻辑。 4. **Servlet生命周期**:Servlet的生命周期包括加载和初始化、服务、销毁三个阶段。Servlet...
5. service()方法根据请求类型(GET、POST等)选择合适的doXXX方法(如doGet、doPost)进行处理。 6. Servlet处理完请求后,通过ServletResponse对象向客户端发送响应。 7. 当Servlet不再需要时,容器会调用destroy...
3. `HttpServlet`:继承自GenericServlet,提供了处理HTTP请求的方法,如doGet(), doPost()等。 4. `ServletConfig`:在Servlet初始化时由容器提供,包含关于Servlet的配置信息。 5. `ServletRequest`:代表客户端的...
【标题】:使用Servlet实现用户注册 在Web开发中,Servlet是Java EE平台中的一个核心组件,用于扩展服务器的功能,处理HTTP...而“用doget和dopost打印乘法表”是一个练习题,可以帮助巩固对Servlet请求处理的理解。
值得注意的是,这个示例中还调用了 `doPost` 方法,这可能并不是一个好的做法,但在教学演示中可以用来说明 `doGet` 和 `doPost` 方法的调用顺序。 ```java public void doPost(HttpServletRequest request, ...
3. 服务:每当有请求到达,容器都会调用Servlet的service()方法。这个方法会根据请求类型(GET、POST等)选择合适的doGet()或doPost()方法处理请求。 4. 响应:Servlet处理完请求后,通过OutputStream或Writer向...
- 在Servlet的`doGet()`或`doPost()`方法中获取参数,计算BMI,然后可以通过转发或重定向返回结果页面。 通过实践这个项目,你不仅可以掌握Servlet的基本操作,还能深入了解EL表达式的应用,以及如何在实际Web应用...
`service()`方法的核心作用是根据请求的方法类型(GET、POST等)选择合适的处理方法,通常是调用`doGet()`或`doPost()`方法。 对于GET请求,Servlet会调用`doGet()`方法;对于POST请求,则调用`doPost()`方法。这些...