Servlet向JSP传递变量失败:${uname}始终为空
JSP中${uname}始终为空的原因排查
以下是针对你当前方案失效的核心排查点:
Servlet未正确匹配到目标Cookie
- Cookie名称严格区分大小写,确认前端设置的Cookie名是
uname而非Uname或其他变体; - 在Servlet中打印所有请求携带的Cookie,确认
unameCookie确实存在:Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie c : cookies) { System.out.println("Cookie: " + c.getName() + "=" + c.getValue()); } } - 检查Cookie的
path属性,确保其覆盖Servlet的访问路径,否则请求不会携带该Cookie。
- Cookie名称严格区分大小写,确认前端设置的Cookie名是
request属性设置或转发逻辑错误
- 确认Servlet中设置属性的代码正确:
request.setAttribute("uname", cookie.getValue());,属性名uname不能写错; - 转发路径必须正确:若member.jsp在Web根目录,转发代码应为
request.getRequestDispatcher("/member.jsp").forward(request, response);,路径开头的斜杠不能省略,否则会按Servlet相对路径查找页面,导致跳转到错误页面无法获取属性。
- 确认Servlet中设置属性的代码正确:
JSP的EL表达式支持问题
- 若使用Tomcat 5.x及更早版本,需在JSP开头添加
<%@ page isELIgnored="false" %>,否则EL表达式会被忽略,${uname}无法解析; - 注意:JSP中的${uname}是从request属性取值,而非直接读取Cookie——如果Servlet未找到Cookie,就不会设置该属性,此时${uname}自然为空,和JSP里
<c:choose>判断Cookie是否存在的逻辑是两回事。
- 若使用Tomcat 5.x及更早版本,需在JSP开头添加
Servlet映射或部署问题
- 确认Member Servlet的映射路径正确,比如你访问的URL是否匹配Servlet的web.xml配置或
@WebServlet注解的路径; - 检查WEB-INF/classes下是否存在编译后的Member.class文件,若编译失败,Servlet无法执行,属性也就不会被设置。
- 确认Member Servlet的映射路径正确,比如你访问的URL是否匹配Servlet的web.xml配置或
内容的提问来源于stack exchange,提问作者TaihouKai
相关产品推荐
相关产品推荐

