新手如何快速掌握 Servlet 表单数据交互?是不是总遇到这种情况:写了个漂亮的表单页面,点提交后数据没反应;好不容易数据传到 Servlet,中文却变成乱码;想把处理结果显示在页面上,却不知道怎么传回去?别着急,今天兔子哥就带大家做个超实用的实战案例,从表单创建到 Servlet 处理,再到结果展示,一步步教你搞定 JSP 和 Servlet 的表单数据交互,哪怕你是刚学 JSP 的新手,跟着练也能轻松上手,一起往下看吧!
其实啊,表单数据交互是动态网页的核心功能,像登录、注册、信息提交这些功能,都离不开它。JSP 负责显示表单让用户输入,Servlet 负责接收和处理数据,两者配合才能完成交互。但新手刚开始整合时,总在路径、数据传递、乱码这几个地方栽跟头,今天咱们就通过一个 “用户信息提交” 案例,把这些问题一次性解决。
一、案例准备:先搞懂表单交互的基本流程
在动手前,得先明白表单数据是怎么从 JSP 跑到 Servlet 的。简单说就三步:
- 用户在 JSP 表单里输入信息(比如姓名、年龄、爱好);
- 点提交按钮,表单把数据通过 HTTP 协议发给 Servlet;
- Servlet 接收数据,处理后(比如存起来、验证格式),再把结果返回给 JSP 显示。
就像寄快递:JSP 是填单的地方,表单是快递单,Servlet 是快递站,数据就是你要寄的东西,整个流程得环环相扣才行。有个刚学 JSP 的网友说:“我之前以为表单提交就是点个按钮,没想到背后还有这么多步骤,搞懂流程后才知道错在哪。”
二、实战案例:做个用户信息提交表单,一步步操作
咱们做个 “个人信息提交” 案例,用户输入姓名、年龄、爱好,提交后 Servlet 处理并显示结果,步骤超详细,跟着做就行。
1. 第一步:创建表单页面(info.jsp)
先写个表单页面,让用户能输入信息。新建 info.jsp,代码这样写:
jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>个人信息提交 请填写个人信息
这里要注意:
action属性填的是 Servlet 的名字(后面会配置),name属性是数据的 “钥匙”,Servlet 得靠它取数据,千万别写错。2. 第二步:写 Servlet 处理数据(InfoServlet.java)
表单数据得靠 Servlet 处理,新建 InfoServlet 类,继承 HttpServlet,代码如下:
java
import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;// 配置Servlet路径,和表单action对应@WebServlet("/InfoServlet")public class InfoServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 解决中文乱码,这步千万别忘!request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");// 接收表单数据String username = request.getParameter("username"); // 取姓名String ageStr = request.getParameter("age"); // 取年龄(字符串类型)String[] hobbies = request.getParameterValues("hobby"); // 取爱好(多选框用getParameterValues)// 简单处理:把年龄转成整数,没填就设为0int age = 0;if (ageStr != null && !ageStr.isEmpty()) {age = Integer.parseInt(ageStr);}// 把处理后的数据存到request里,传给结果页request.setAttribute("username", username);request.setAttribute("age", age);request.setAttribute("hobbies", hobbies);// 转发到结果页显示request.getRequestDispatcher("result.jsp").forward(request, response);}}这段代码的关键是用
request.getParameter取数据,多选框用getParameterValues,处理后存到request里,再转发到结果页。3. 第三步:创建结果展示页(result.jsp)
最后做个结果页,显示处理后的数据:
jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>提交结果 个人信息提交成功!
姓名:${username}
<%-- 用EL表达式取数据 --%>年龄:${age}
爱好:<%String[] hobbies = (String[]) request.getAttribute("hobbies");if (hobbies != null) {for (String hobby : hobbies) {out.print(hobby + " ");}}%>
返回重新填写这里用了 EL 表达式
${变量名}取数据,爱好是数组,用 Java 代码循环显示更方便。4. 运行测试:看看效果
把项目部署到 Tomcat,启动服务器,浏览器输
http://localhost:8080/项目名/info.jsp,填完信息点提交,就能看到结果页显示你输入的内容啦!三、表单提交方式对比表:get 和 post 该怎么选?
| 提交方式 | 特点 | 优点 | 缺点 | 适合场景 |
|---|---|---|---|---|
| get | 数据在 URL 里显示 | 简单,能缓存 | 数据长度有限,不安全 | 搜索、查询等简单操作 |
| post | 数据在请求体里 | 安全,能传大量数据 | 不能缓存 | 登录、注册、信息提交 |
新手做表单交互,建议优先用 post 方式,尤其是涉及用户输入的敏感信息,安全又能避免中文乱码问题。
四、常见问题自问自答:这些坑千万别踩
问:表单提交后报 404,找不到 Servlet 怎么办?
答:这是路径没配对!检查表单
action的值和 Servlet 的@WebServlet路径是否完全一致,比如表单写action="InfoServlet",Servlet 就得是@WebServlet("/InfoServlet"),大小写、斜杠都不能错。之前有个新手把 “InfoServlet” 写成 “infoServlet”,一直 404,改完大小写就好了。问:Servlet 里取到的中文是乱码,怎么解决?
答:在 Servlet 的 doPost 方法开头加
request.setCharacterEncoding("UTF-8"),同时在结果页加response.setContentType("text/html;charset=UTF-8"),确保前后端编码都是 UTF-8。如果还乱码,检查 JSP 页面头部是否有<%@ page contentType="text/html;charset=UTF-8" %>。问:多选框的爱好在 Servlet 里取到 null,怎么回事?
答:多选框的
name属性要一致,比如都叫 “hobby”,Servlet 里要用request.getParameterValues("hobby")取,不能用getParameter(这个只能取单个值)。如果用户没选任何爱好,hobbies会是 null,所以处理时要判断是否为 null,避免空指针错误。五、实用技巧:让表单交互更顺畅
1. 给表单加验证,避免空提交
在 info.jsp 里加简单的 JS 验证,用户没填姓名就提示:
jsp
这样能减少无效提交,减轻 Servlet 的压力。
2. 用 EL 表达式简化结果页代码
结果页里取数据,用 EL 表达式
${变量名}比用 Java 代码更简单,比如${username}比<%= request.getAttribute("username") %>清爽多了,新手建议多练 EL 表达式。兔子哥的小建议
表单数据交互是 JSP+Servlet 开发的核心,练熟这个案例,登录、注册这些功能都能触类旁通。重点要记住数据传递的流程:表单输入→Servlet 接收→处理→结果展示,每个环节都要检查是否有问题。
遇到报错别慌,先看控制台的错误信息,比如 “NullPointerException” 可能是没取到数据,“404” 是路径问题,“乱码” 是编码没设对。多动手改改代码,比如故意写错路径看报错,改对后印象更深刻。
其实表单交互没那么难,就像打电话:JSP 拨号(提交表单),Servlet 接电话(接收数据),然后聊天(处理和返回结果),流程通了,功能自然就成了。希望这个实战案例能帮你搞定表单交互,往后开发动态网页更顺手!
标签: InfoServlet.java 环环相扣
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~