request.getParameter()返回null主因是表单method与Servlet处理方法不匹配或编码未设置,需检查form的method属性、重写对应doGet/doPost方法,并在doPost开头调用setCharacterEncoding("UTF-8")。

Servlet里request.getParameter()返回null怎么办
多数时候不是代码写错了,而是表单提交方式或编码没对上。JSP页面用form提交时,默认是GET,但如果你在Servlet里写了doPost()却没重写doGet(),或者HTML里漏了method="post",getParameter()就拿不到值。
常见错误现象:NullPointerException出现在取request.getParameter("content")之后;浏览器地址栏能看到参数拼在URL后面(说明实际走的是GET);中文提交变成乱码(其实是编码不一致的连带表现)。
- 检查JSP中
<form>是否明确写了method="post",别依赖默认 - Servlet里要么只实现
doPost()并确保前端匹配,要么两个方法都写,至少在doGet()里加个doPost(request, response)转发 - 如果用了UTF-8,在
doPost()开头立刻加request.setCharacterEncoding("UTF-8")——注意:这行必须在调用任何getParameter()之前 - 测试时直接用浏览器访问Servlet路径(比如
/MessageServlet),会触发doGet(),此时若没处理,就405或空值
JSP里EL表达式${messageList}不渲染内容
不是EL被禁用了,就是作用域放错地方了。Servlet往request里存的List,JSP要用${requestScope.messageList}才能拿到;如果存到了session,就得用${sessionScope.messageList},否则EL默认只查page→request→session→application,顺序找,找到就停。
使用场景:留言列表从数据库查出来,塞进request.setAttribute("messageList", list),然后JSP用<c:forEach items="${messageList}" var="msg">遍历——但前提是JSTL标签库已正确引入且web.xml没禁用EL。
立即学习“Java免费学习笔记(深入)”;
- 确认
web.xml的<web-app>根节点声明的是Servlet 3.0+(如version="3.1"),旧版本可能默认关闭EL - 检查JSP顶部是否有
<%@ page isELIgnored="false" %>,别误设成true - 用
${pageContext.request.requestURL}这种固定表达式先测EL是否生效,排除环境问题 - 别在
<script>块里直接写${xxx}——JS上下文里EL不会解析,得用<%= request.getAttribute("xxx") %>或提前注入到JS变量
JDBC查询后ResultSet.next()跳过第一行
不是驱动bug,是你调了一次next()又没读数据,接着循环就从第二行开始了。典型写法是while(rs.next()) { ... },但如果前面为了判断是否有数据多写了一次if(rs.next()),再进循环就丢首行。
性能影响:小数据看不出,但查1000条留言时少显示第一条,用户会觉得“删了一条”,其实只是逻辑跳过了。
- 统一用
while(rs.next())遍历,别拆成if+while - 需要判断空结果集,改用
rs.first(); boolean hasData = rs.getRow() != 0;,但注意first()要求ResultSet类型为TYPE_SCROLL_INSENSITIVE - 更稳妥的做法:直接
List<Message> list = new ArrayList<>(); while(rs.next()) { list.add(...); },空集合自然长度为0 - 记得
rs.close()、stmt.close()、conn.close()——哪怕用try-with-resources,也要确认JDBC驱动版本支持(比如MySQL 5.1.40+才完整支持自动关闭)
部署到Tomcat后CSS/JS加载404
路径不是相对路径的问题,是资源没放在Web应用的“公开可访问目录”下。WEB-INF及其子目录(比如WEB-INF/classes、WEB-INF/lib)里的东西,浏览器根本没法直连,所以把css/style.css放进去,<link href="css/style.css">必然404。
正确位置只有两个:WebContent/(Eclipse老项目)或src/main/webapp/(Maven标准结构)根目录下,或者其子目录如css/、js/、images/。
- 检查项目结构:CSS文件是否真在
webapp/css/下,而不是webapp/WEB-INF/css/ - HTML里引用路径别用
../css/来回跳,统一用以/开头的上下文路径,比如<link href="${pageContext.request.contextPath}/css/style.css"> - 启动Tomcat后,直接浏览器访问
http://localhost:8080/yourapp/css/style.css,看能不能下载到文件——这是最准的验证方式 - 如果用了Servlet映射路径如
<url-pattern>/msg/*</url-pattern>,静态资源请求也会被拦截,这时要么改映射为/servlet/*,要么在Servlet里加if (uri.endsWith(".css") || uri.endsWith(".js")) return;放行
最容易被忽略的是:开发时用IDE内置浏览器可能缓存了旧路径,换Chrome无痕窗口重试,比反复clean project管用得多。










