首页 > 投稿 > 正文内容

JSP页面如何正确调用Servlet?附参数传递与错误解决方案

投稿2025-05-27 18:00:47
html运行复制


你是不是刚学JSP的时候满脑子问号?为什么我的按钮点了没反应?提交的表单数据怎么跑到Servlet里?这个404错误到底啥意思?哎...我当时卡在Servlet配置那个坎整整两天!不啰嗦了,今天把你看得懂的实操方法掰碎了说。

---

**从点击按钮到显示结果的全过程**  
别被专业术语唬住!JSP调用Servlet本质上就是用户动作触发请求。举个例子:你填完注册表单点提交的那一刻,这串操作就要通过特定方式"喊话"SERVLET来处理。

这里有张对比表能救命:  
GET方式:参数直接露在地址栏,适合不敏感数据(比如搜索关键词)  
POST方式:参数藏起来送,适合密码或重要信息  
不要忘记在form标签里写method="post",新手容易漏这个!

---

**手把手配置你的第一个调用流程**  
好几回我在课上看到有同学配置完就报404,急得抓耳挠腮的。先把基础步骤写下来方便对照:

1. 在JSP里整一个form表单,举个最常用的登录例子:
账号: 密码: 登录 ```
  1. 创建对应的Servlet类(起名LoginCheck就对了),记得加@WebServlet注解:
@WebServlet("/LoginCheck")
public class LoginCheck extends HttpServlet {
   protected void doPost(...) {
      //这里写处理代码
   }
}
  1. 在doPost方法里获取参数,这里有个大学问:
String account = request.getParameter("account"); //name必须和input的name一致!
String password = request.getParameter("pwd"); 

??碰到异常的救命招??
要是遇到控制台打印null,先做这三检查:

  • 表单中的name属性有没有打错字?(我曾经把userName写成usrName坑了自己)
  • Servlet的url映射对不对?(@WebServlet里的路径必须和form的action一致)
  • 是不是点完按钮地址栏变成"localhost:8080/LoginCheck.jsp"了?(这绝对错误!正确的不带.jsp后缀)

??最令人头疼的乱码问题??
有回用户输中文全变成????,急得我原地转圈。解决方案分两步走:

  1. 在JSP页面顶部加:
<%@ page contentType="text/html;charset=UTF-8" %>
  1. Servlet里在获取参数之前加:
request.setCharacterEncoding("UTF-8");

现在你再去测试下,保证中文不会再出乱码了。要是还不行...可能你的服务器没设置呢,Tomcat的server.xml里也得配置URIEncoding属性!


??新手必踩的三个大坑??
? 问题:点击提交按钮没反应
可能原因:按钮没放在form标签里,或者type写成了button(应该用submit)

? 问题:报500内部服务器错误
解决办法:看控制台日志!八成是Servlet类没继承HttpServlet,或者doPost方法名拼写错误(注意P大写)

? 问题:怎么把数据返回给JSP显示?
需要掌握两个核心方法:
① ??转发??:最适合登录成功跳转到个人主页
request.getRequestDispatcher("home.jsp").forward(request,response);
② ??重定向??:支付完成后需要清空表单用这个
response.sendRedirect("success.jsp");


??关于参数传递的私藏心得??
有个学员问过我:能传对象给Servlet吗?当然可以!把多个参数包装成JSON字符串,Servlet里用request.getReader()获取,再拿fastjson这些工具解析就行。不过对小白来说,先用简单参数练手更稳妥。

调试时有个绝招:在Servlet里先用System.out.println输出参数值,确认服务器真有收到数据。这个笨方法我用了好几年,比啥调试工具都直观!

// 调试范例
System.out.println("收到的用户名:"+account);
System.out.println("密码长度检测:"+password.length());

??刚发现的奇怪现象??
有朋友反映:用Chrome浏览器测试正常,换成IE就出乱码?这时候一定要在Servlet设置响应编码:

response.setContentType("text/html;charset=UTF-8");

不同浏览器对编码的默认处理确实不一样,老人机浏览器更是个魔鬼!

??*最后分享个亲身教训??*
我当年自学的时候,为了找Servlet接收不到参数的原因把代码重写了8遍,最后发现是手滑在web.xml里写了两个Servlet映射。所以啊,遇到问题别急着删代码,先拿本文的排查清单对照下,能省下好多熬夜时间!

搜索