
嘻道奇闻
- 文章199742
- 阅读14625734
JSP页面如何正确调用Servlet?附参数传递与错误解决方案
html运行复制账号: 密码: 登录 ```你是不是刚学JSP的时候满脑子问号?为什么我的按钮点了没反应?提交的表单数据怎么跑到Servlet里?这个404错误到底啥意思?哎...我当时卡在Servlet配置那个坎整整两天!不啰嗦了,今天把你看得懂的实操方法掰碎了说。 --- **从点击按钮到显示结果的全过程** 别被专业术语唬住!JSP调用Servlet本质上就是用户动作触发请求。举个例子:你填完注册表单点提交的那一刻,这串操作就要通过特定方式"喊话"SERVLET来处理。 这里有张对比表能救命: GET方式:参数直接露在地址栏,适合不敏感数据(比如搜索关键词) POST方式:参数藏起来送,适合密码或重要信息 不要忘记在form标签里写method="post",新手容易漏这个! --- **手把手配置你的第一个调用流程** 好几回我在课上看到有同学配置完就报404,急得抓耳挠腮的。先把基础步骤写下来方便对照: 1. 在JSP里整一个form表单,举个最常用的登录例子:
- 创建对应的Servlet类(起名LoginCheck就对了),记得加@WebServlet注解:
@WebServlet("/LoginCheck")
public class LoginCheck extends HttpServlet {
protected void doPost(...) {
//这里写处理代码
}
}
- 在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后缀)
??最令人头疼的乱码问题??
有回用户输中文全变成????,急得我原地转圈。解决方案分两步走:
- 在JSP页面顶部加:
<%@ page contentType="text/html;charset=UTF-8" %>
- 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映射。所以啊,遇到问题别急着删代码,先拿本文的排查清单对照下,能省下好多熬夜时间!