doGet()和doPost()的使用
doGet()和doPost()的使用
在页面用post传参时,后台应该用dopost(), 当用doget()传参时,会出现下面的结果:
源码:
index.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>登录</title> </head> <body> <h2>登录</h2> <div style="text-align:center"> <%-- 这里表单表示的意思,以post方式提交表单,提交到我们的login请求 --%> <form action="${pageContext.request.contextPath}/login" method="post"> 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> 爱好: <input type="checkbox" name="hobbys" value="女孩">女孩 <input type="checkbox" name="hobbys" value="代码">代码 <input type="checkbox" name="hobbys" value="唱歌">唱歌 <input type="checkbox" name="hobbys" value="电影">电影 <br> <input type="submit" value="注册"> </form> </div> </body> </html>
后端代码:
public class LoginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String username=req.getParameter("username"); String password=req.getParameter("password"); String[] hobbys=req.getParameterValues("hobbys"); System.out.println("------------------------"); System.out.println(username); System.out.println(password); System.out.println(Arrays.toString(hobbys)); System.out.println("-----------------------"); //通过请求转发 req.getRequestDispatcher("/success.jsp").forward(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } }
修改后:
index.jsp还是保持post传参
后端变更为dopost()
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String username=req.getParameter("username"); String password=req.getParameter("password"); String[] hobbys=req.getParameterValues("hobbys"); System.out.println("------------------------"); System.out.println(username); System.out.println(password); System.out.println(Arrays.toString(hobbys)); System.out.println("-----------------------"); //System.out.println(req.getContextPath()); //通过请求转发 req.getRequestDispatcher("/success.jsp").forward(req,resp); }
测试结果为:
*************************************************************************************************************************************************************************************************************
从名字上来看可以很容易的有一个直观感觉,do即“处理”,所以doGet()用于处理Get请求,而doPost()用于处理Post请求,
查看API(http://tomcat.apache.org/tomcat-5.5-doc/servletapi/)可以看到servlet接口中有5个方法:init()、destroy()、getServletConfig()、getServletInfo()和service(),
根据API可知其中的方法service()的作用是:“Called by the servlet container to allow the servlet to respond to a request”,也就是说“由servlet容器调用,并允许servlet对请求作出响应”,
因此service() 方法会检查 HTTP 请求类型Get、Post等,并在适当的时候调用 doGet()、doPost()等方法,
而我们不需要对 service() 方法做任何动作,只重写 doGet() 或 doPost() 即可。
如何使用:
当新建一个servlet时,IDEA默认会给出如下形式:
@WebServlet(name = "ServletXXX") public class ServletXXX extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
此时,只需要根据servlet请求的类型,重写相应的方法即可,
如果是Get请求,就让doGet()方法去处理,如果是Post请求,就让doPost()方法去处理,
但是通常doPost()方法更强大一些,所以如果是Post请求,就直接重写doPost()方法就好了,
而如果是Get请求,也可以把方法体写在doPost()中,在doGet()中通过doPost(request,response);调用一下即可。
————————————————
版权声明:本文为CSDN博主「潇潇的潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/gxx_csdn/article/details/78862377