浅谈doGet和doPost

本文详细解析了Servlet中GET与POST请求的区别及应用场景,特别是forward跳转时如何保持请求方式不变。

Servlet中的两个方法,一个是doPost(),另一个是doGet()方法,有很多朋友不知道什么时候用doPost来接受请求,什么时候用doGet来接受请求,其实很简单,get方式请求就用doGet方法来接受,post方式就用doPost方法来接受。哈哈,听到这里你可能想打人了,你会问那什么就算是get方式请求,什么就算是post方式请求呢?这个解释起来很简单,初了form表单的method="post"这种方式属于post方式提交,其它都是get方式提交,比方说什么超链接了,什么页面重定向了,这些方式访问Servlet都属于get方式提交。不过这里我要说一点了,也是最重要的一点,那就是forward跳转这种方式,它很特殊的,我们一起来看看:

-----------------------------------------------------------------------------------------
A.jsp页面内容
...
<form action="B.jsp">
    <input type="submit"/>
</form>
...
---------------------------------------------------------------------------------------
B.jsp页面内容
...
<jsp:forward page="MS"/>
...
-------------------------------------------------------------------------------------- 
MS指定的Servlet内容
...
public void doGet(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {    System.out.println("doGet方法调用了");}
public void doPost(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {    System.out.println("doPost方法调用了");}
...
---------------------------------------------------------------------------------------


        这个小例子猛一看你会这么理解,B.jsp通过forward访问Servlet,那么一定属于get方式请求了,一运行,结果还真是:doGet方法调用了。其实这是一个小误区,不信你改一下A.jsp,你把method改成post,再运行,看到什么了?是不是这里又显示成:doPost方法调用了,从这个小例子我们发现forward跳转访问Servlet说不定的感觉,其实我们要想弄明白这个问题,就要从forward本身来研究了。
        我们都知道forward跳转是转发请求,不转发地址的,简单点说,forward不但把请求的内容转发了,连同请求的方式也转发了,这样我们就明白了,B.jsp通过forward来访问Servlet到底是get还是post,关键要看A.jsp是如何请求B.jsp的,因为forward把请求的方式也转发了,这就是为什么A.jsp的提交方式变了,B.jsp访问Servlet的方式也变了的原因。

       以上是我对这个问题的一些自己的认识,希望大家多多交流!


文章出处:http://www.diybl.com/course/4_webprogram/ajax/ajaxxl/2008921/144266.html

doGet doPostServlet 中用于处理 HTTP 请求的两个重要方法,它们在使用上有相似之处,也存在一些区别。 ### 基本介绍 这两个方法的使用比较相似,都两个参数相关,doPost 方法默认是调用 doGet 方法。在 Servlet 类中,若没有参数的传递,也就是前后端之间未使用 form 表格或传递参数,可使用 doGet() 方法;若涉及到参数的接收,即使用 form 表单把数据从前端页面传递到后端数据中涉及参数的接收传递,就要在后端 Servlet 类中重写 doPost() 方法 [^1][^2]。 ### 使用示例 以下是一个简单的 Java Servlet 示例,展示了 doGet doPost 方法的使用: ```java import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; @WebServlet("/example") public class ExampleServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<h2>这是 doGet 方法处理的请求</h2>"); out.println("</body></html>"); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<h2>这是 doPost 方法处理的请求</h2>"); // 处理表单提交的数据 String param = request.getParameter("param"); if (param != null) { out.println("<p>接收到的参数是: " + param + "</p>"); } out.println("</body></html>"); } } ``` 在这个示例中,当客户端发送 GET 请求到 `/example` 路径时,会调用 doGet 方法;当发送 POST 请求时,会调用 doPost 方法。若 POST 请求中包含名为 `param` 的参数,doPost 方法会将其输出。 ### 方法调用关系 HttpServlet 中的 service 方法对接收到的请求进行解析后调用相应的方法进行处理,其中就包括了 doGet doPost 方法。当没有重写 service 方法时,每一次接收到请求就会调用默认的 service 方法对请求进行解析来选取相应的方法来处理请求。当同时重写了 service、doGetdoPost 方法,如果在 service 方法中不调用 doGetdoPost 方法,那么就只会调用 service 方法响应请求。若在覆写的 service 方法中调用了父类的 service 方法(`super.service(arg0, arg1)`),则 service 方法处理完后,会再次根据请求方式调用相应的 doGet doPost 方法执行 [^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值