likes
comments
collection
share

JavaWeb Servlet处理form表单 缺相关包的解决办法

作者站长头像
站长
· 阅读数 14

前言

这是一个小demo

需求

用户进入网站 填写表单

Java web可以获取到表单的信息并响应处理。

扩展

从这个小demo可以学到 如何用servlet去处理get/post请求

后期可以使用这个技术,写点简单的后台网络接口

实现过程

创建JavaWeb项目

打开idea软件,试着创建一个Java Web项目

JavaWeb Servlet处理form表单 缺相关包的解决办法

勾选 Java EE下的 Web Application

JavaWeb Servlet处理form表单 缺相关包的解决办法

随便起个名字

JavaWeb Servlet处理form表单 缺相关包的解决办法

这个时候,整个项目的结构就搭建起来了。

为了方便tomcat调试项目,还需要稍微微调一下

JavaWeb Servlet处理form表单 缺相关包的解决办法

在项目运行起来的时候,通过浏览器访问到的是我们javaweb项目打包好的war包,

所以在这个默认位置加上我们项目打包好的地址

# JavaWebDemo1_war_exploded idea自动为我们是打包好的war包
http://localhost:8080/JavaWebDemo1_war_exploded

JavaWeb Servlet处理form表单 缺相关包的解决办法

JSP代码

这里因为我们是要做表单,所以并没有用到jsp的技术

更多的是html,

然后为了方便,我直接书写在项目下的index.jsp文件里面

JavaWeb Servlet处理form表单 缺相关包的解决办法


<%--
  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按钮,点击即可发起请求

把我们的项目运行起来

JavaWeb Servlet处理form表单 缺相关包的解决办法

试着提交表单:

JavaWeb Servlet处理form表单 缺相关包的解决办法

可以看到,上方地址栏出现了我们填写的内容 数据以键值对的方式呈现

但是由于我们尚未编写处理表单提交数据的servlet,

所以tomcat提示404找不到资源

servlet代码

在项目下的src目录下新建一个包

JavaWeb Servlet处理form表单 缺相关包的解决办法

接着在我们的包下建一个类

类名同我们form表单action指定的一样

JavaWeb Servlet处理form表单 缺相关包的解决办法

这里发现一个小问题,就是

编写代码的时候,idea无法识别我想导入的javax包

还有没有能智能提示 HttpServlet的相关类

JavaWeb Servlet处理form表单 缺相关包的解决办法

这一定是缺少了相关jar包,但是咱也不知道少了啥

干脆直接点,把咱tomcat的lib全部复制丢到项目的lib目录下

JavaWeb Servlet处理form表单 缺相关包的解决办法

JavaWeb Servlet处理form表单 缺相关包的解决办法

接着找到这个

JavaWeb Servlet处理form表单 缺相关包的解决办法

右键 add as library

JavaWeb Servlet处理form表单 缺相关包的解决办法

这不就有了 javax 还有 httpservlet

JavaWeb Servlet处理form表单 缺相关包的解决办法

此时,在我们的代码里面 按 alt + enter

idea就可以自动为我们导入相关包了

JavaWeb Servlet处理form表单 缺相关包的解决办法

现在,就可以快乐书写代码了

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界面发起请求

JavaWeb Servlet处理form表单 缺相关包的解决办法

servlet成功获取到了form表单提交的数据,但是这里乱码了 JavaWeb Servlet处理form表单 缺相关包的解决办法

莫慌,修改一下代码

可能是之前我们代码写的不对,目测是这里出了问题

JavaWeb Servlet处理form表单 缺相关包的解决办法

改成这句

resp.setHeader("Content-type", "text/html;charset=UTF-8");

由于,javaweb项目,你跑起来没办法 热更新代码

因此,我们需要把项目停止下来重新跑

JavaWeb Servlet处理form表单 缺相关包的解决办法

这次就没有问题了,字符编码正确

转载自:https://juejin.cn/post/7148397068535627789
评论
请登录