JavaWeb Servlet处理form表单 缺相关包的解决办法
前言
这是一个小demo
需求
用户进入网站 填写表单
Java web可以获取到表单的信息并响应处理。
扩展
从这个小demo可以学到 如何用servlet去处理get/post请求
后期可以使用这个技术,写点简单的后台网络接口
实现过程
创建JavaWeb项目
打开idea软件,试着创建一个Java Web项目
勾选 Java EE下的 Web Application
随便起个名字
这个时候,整个项目的结构就搭建起来了。
为了方便tomcat调试项目,还需要稍微微调一下
在项目运行起来的时候,通过浏览器访问到的是我们javaweb项目打包好的war包,
所以在这个默认位置加上我们项目打包好的地址
# JavaWebDemo1_war_exploded idea自动为我们是打包好的war包
http://localhost:8080/JavaWebDemo1_war_exploded
JSP代码
这里因为我们是要做表单,所以并没有用到jsp的技术
更多的是html,
然后为了方便,我直接书写在项目下的index.jsp文件里面
<%--
Created by IntelliJ IDEA.
User: 26480
Date: 2022/9/28
Time: 17:16
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>表单处理</title>
</head>
<body>
<div class="container">
<form action="myservlet" action="get">
<table border="1px soli black" >
<tr>
<td>账号:</td>
<td><input type="text" name="id"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="text" name="password" ></td>
</tr>
<tr>
<td>真实姓名:</td>
<td><input type="text" name="name" ></td>
</tr>
<tr>
<td>出生日期:</td>
<td><input type="text" name="birth" ></td>
</tr>
<tr></tr>
<tr>
<td>性别:</td>
<td>
<input type="radio" name="sex" value="男"> 男
<input type="radio" name="sex" value="女"> 女
</td>
</tr>
<tr>
<td><input type="submit" value="提交"></td>
<td><input type="reset" value="重置"></td>
</tr>
</table>
</form>
</div>
</body>
<style>
body {
position: relative;
}
.container {
position: absolute;
left: 50%;
/* top: 50%; 因为body不确定高度,由内容撑开,故无法生效 */
margin-top: 50px;
transform: translateX(-50%);
width: 600px;
height: auto;
/* background-color: rgb(210, 255, 255); */
}
</style>
<script>
// function send() {
// window.location.href = "/answer.html"
// }
</script>
</html>
利用form表单的action属性和method属性,就可以简单发起get请求
- action属性,指定你的表单提交路径
- method属性,指定你发起请求的方式,例如 get/post
- 最后在表单内添加一个submit按钮,点击即可发起请求
把我们的项目运行起来
试着提交表单:
可以看到,上方地址栏出现了我们填写的内容 数据以键值对的方式呈现
但是由于我们尚未编写处理表单提交数据的servlet,
所以tomcat提示404找不到资源
servlet代码
在项目下的src目录下新建一个包
接着在我们的包下建一个类
类名同我们form表单action指定的一样
这里发现一个小问题,就是
编写代码的时候,idea无法识别我想导入的javax包
还有没有能智能提示 HttpServlet的相关类
这一定是缺少了相关jar包,但是咱也不知道少了啥
干脆直接点,把咱tomcat的lib全部复制丢到项目的lib目录下
接着找到这个
右键 add as library
这不就有了 javax 还有 httpservlet
此时,在我们的代码里面 按 alt + enter
idea就可以自动为我们导入相关包了
现在,就可以快乐书写代码了
package DemoServlet;
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;
@WebServlet("/myservlet")
public class myservlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
String id = req.getParameter("id");
String password = req.getParameter("password");
String name = req.getParameter("name");
String birth = req.getParameter("birth");
String sex = req.getParameter("sex");
resp.setCharacterEncoding("utf-8");
resp.getWriter().write("您提交的信息是:");
resp.getWriter().write("id为:"+id);
resp.getWriter().write("password为:"+password);
resp.getWriter().write("name为:"+name);
resp.getWriter().write("birth为:"+birth);
resp.getWriter().write("sex为:"+sex);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
运行测试
jsp界面发起请求
servlet成功获取到了form表单提交的数据,但是这里乱码了
莫慌,修改一下代码
可能是之前我们代码写的不对,目测是这里出了问题
改成这句
resp.setHeader("Content-type", "text/html;charset=UTF-8");
由于,javaweb项目,你跑起来没办法 热更新代码
因此,我们需要把项目停止下来重新跑
这次就没有问题了,字符编码正确
转载自:https://juejin.cn/post/7148397068535627789