使用 HttpServlet 接收网页的 post/get 请求

时间:2024-07-15 07:00:42

前期工作:部署好 idea 和 一个 web 项目

idea(2021),tomcat(9)

->创建一个空的项目

-> 新建一个空的模块

-> 右键单击模块 选择 Add..Fra.. Sup..

-> 勾选Web App...后点击OK

-> 点击 file - Project Struc...

-> 选择刚刚的模块 -> 点击 + (JAR Or...)引入 tomcat 的 lib 文件夹下的 servlet-api.jar 和 jsp-api.jar (也可以选择+(Library)将整个 tomcat 引入)

->点击右上角 绿色小锤子右边的按钮

-> 找到 tomcat - local tomcat 添加

-> 点击 deployment

-> 拉到最下面设置这个项目的名称,(我起的项目名是 bjm),之后要访问这个项目就在浏览器输入:localhost:8080/bjm

-> 点击 + (Art...) 

-> 在src 下新建一个放类的文件夹 -> 在新建一个类,这个类就是用来实现接收 post 请求的

-> 在 web 下新建一个 html 文件,这个是前端页面,用于发送 post 请求的

-> 确保 WEB-INF 文件夹下有 web.xml 文件,后续需要在 xml 文件中设置文件的访问路径

完成后大概页面是这样的,就只差代码的填入了(这里我已经填了代码,后面我会给出填入的代码,我是直接导入的 Libary)

815b2a6064af4f3780c4e47cc231e5c2.png

部署完毕:完成代码的编写

首先完成 xml 文件的配置,将 html 文件 的访问路径与类联系起来

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>httpServlet</servlet-name><!--这里的名字只要和下面的 mapping 名字一样就可以,可以自己起-->
        <!--设置访问路径所对应的实现类,这里是装类的文件名.类名-->
        <servlet-class>Servlet.httpSl</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>httpServlet</servlet-name>
        <!--设置浏览器的访问路径,这里的路径是自己指定的,需要与 html 文件中指定的路径一致-->
        <url-pattern>/http</url-pattern>
    </servlet-mapping>

</web-app>

接着完成 html 页面的编写:

<!DOCTYPE html>
<html lang = "en">
<head>
    <meta charset="UTF-8">
    <title>register</title>
</head>
<body>
    <h1>user register</h1>
    <form action="/bjm/http" method="post"><!--这里的路径是/项目名/xml文件中的指定路径名-->
        name: <input type = "text" name = "username"><br>
        pw: <input type = "text" name = "password">
        <br>
        <input type="submit" value = "提交">
    </form>
</body>
</html>

最后完成接收请求的类的代码编写,这个类需要继承 HttpServlet 接口

package Servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class httpSl extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        req.setCharacterEncoding("UTF-8");
        String name = req.getParameter("username");//对应html 的 name 属性 的 = 后面的内容
        String passwd = req.getParameter("password");
        System.out.println(name +":"+passwd);

        //响应
        resp.setContentType("text/html;charset=UTF-8");//UTF-8的html
        PrintWriter writer = resp.getWriter();
        writer.println("<p>成功提交数据!</p>");

    }
}

然后我们点击右上角的绿色小三角启动 Tomcat

浏览器输入 localhost:8080:/bjm/register.html

然后输入用户名和密码

e6b7da8bed9b48da9af5379675167dff.png

点击提交,我们可看到tomcat控制台接收到了浏览器发送的 post 请求

9c0d324b527648ccbbdf0171428b08b9.png

掌握 post 后,get 就简单了,我们只需在刚刚写的类再去实现一个 doGet 方法

package Servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class httpSl extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        //设置请求体的字体
        req.setCharacterEncoding("UTF-8");
        String name = req.getParameter("username");//对应html 的 name 属性 的 = 后面的内容
        String passwd = req.getParameter("password");
        System.out.println(name +":"+passwd);

        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter writer = resp.getWriter();
        writer.println("<p>成功提交数据!</p>");
    }

    //get请求
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String nm = req.getParameter("name");
        System.out.println(nm);
    }
    
}

然后我们在浏览器输入地址后,在末尾加上:

?name=花下的晚风(这里随便起就行)

便可以得到 get 请求的请求体

可能会遇到的问题

1.在访问时出现500错误

出现这个错误大概率是版本不适配的问题

检查环境变量的jdk版本和模块所使用的版本是否一致,若不一致,需要将jdk版本修正后重新新建一个项目,再从新部署一次

检查是否使用Tomcat10及其以上的版本,但是jdk版本却只有8及其以下,Tomcat较新的版本与Java较老的版本会出现不适配的情况

2.在访问时出现404错误

这是路径设置的问题,检查html文件和xml文件的路径是非正确,点击绿色小锤子旁边的按钮,查看浏览器输入的路径和项目名是否匹配

3.在访问时出现405错误

这是请求和响应不匹配所产生的错误,检查接收参数的名称是否和html设置的name属性的名称一致,检查设置的发送方式是否正确(本次请求使用的是post)