You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSP页面无法获取Servlet中setAttribute设置的属性(含Session问题)

排查JSP无法获取Servlet设置的request属性的常见原因

以下是针对你遇到的问题的具体排查方向:

  • 跳转方式错误导致request属性丢失
    这是最常见的问题:如果Servlet中使用response.sendRedirect("weather.jsp")重定向到JSP,request作用域的属性会完全丢失——因为重定向是发起了一个全新的HTTP请求,和原Servlet的请求无关。必须使用请求转发才能传递request属性:

    // 正确的转发写法
    request.getRequestDispatcher("/WEB-INF/weather.jsp").forward(request, response);
    
  • 属性设置时机或名称不匹配
    确保request.setAttribute()是在转发之前执行的,且属性名称和JSP中使用的完全一致(Java大小写敏感):

    // Servlet中设置属性
    String city = "北京"; // 假设从API获取到的城市名
    request.setAttribute("city", city); // 属性名是"city"
    // 随后执行转发
    

    JSP中必须对应使用${city}或者request.getAttribute("city"),不能写错成${City}或者${cityName}。

  • EL表达式被禁用
    若你的项目使用老旧的JSP或web.xml版本,EL表达式可能默认禁用:

    • 在JSP页面顶部添加指令开启EL:
      <%@ page isELIgnored="false" %>
      
    • 检查web.xml的版本,确保是2.4及以上(比如2.5、3.0),旧版本(2.3及以下)会默认禁用EL:
      <web-app xmlns="http://java.sun.com/xml/ns/javaee"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
               version="2.5">
      
  • Servlet逻辑异常导致属性未被设置
    检查OpenWeatherMap API调用是否成功,是否有异常抛出导致request.setAttribute()代码未执行。可以在Servlet中添加日志或打印语句验证:

    try {
        // 调用API获取天气数据
        String city = weatherApi.getCityName();
        System.out.println("获取到的城市名:" + city); // 控制台查看是否有值
        request.setAttribute("city", city);
    } catch (Exception e) {
        e.printStackTrace(); // 检查是否有异常中断了流程
    }
    
  • 直接访问JSP而非通过Servlet触发请求
    如果直接在浏览器输入JSP的URL(比如http://localhost:8080/weather.jsp),Servlet不会被执行,自然没有设置任何request属性。必须访问Servlet的映射路径(比如http://localhost:8080/getWeather),由Servlet处理后转发到JSP。

内容的提问来源于stack exchange,提问作者Ghost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 14:59:51