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

posted @ 2022-08-02 12:42  wang1687  阅读(1246)  评论(0编辑  收藏  举报