前期工作:部署好 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)
部署完毕:完成代码的编写
首先完成 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 {@Overrideprotected 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的htmlPrintWriter writer = resp.getWriter();writer.println("<p>成功提交数据!</p>");}
}
然后我们点击右上角的绿色小三角启动 Tomcat
浏览器输入 localhost:8080:/bjm/register.html
然后输入用户名和密码
点击提交,我们可看到tomcat控制台接收到了浏览器发送的 post 请求
掌握 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 {@Overrideprotected 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请求@Overrideprotected 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)