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

Servlet转发至JSP时参数始终传递null值的问题排查

问题分析与解决方案

嘿,我看到你的问题了,这其实是一个很容易踩的小坑!你的代码里有一个关键错误导致JSP拿不到Servlet设置的参数:你在Servlet中不必要地获取并关闭了PrintWriter,这直接导致请求转发失效。

问题根源

你写的这段代码:

try (PrintWriter out = response.getWriter()) {
    request.setAttribute("name", new String("aa"));
    this.getServletContext().getRequestDispatcher("/index.jsp").forward(request,response);
}

使用了try-with-resources语法,它会在代码块结束时自动关闭PrintWriter。而一旦关闭PrintWriter,HTTP响应的头部就会被提交给客户端,容器会认为整个响应已经完成,这时候再调用forward就不会生效了——你的JSP收到的其实是初始的请求,而不是Servlet设置完attribute后的转发请求,所以自然拿不到name的值,输出null。

而且你根本没用到这个PrintWriter来输出任何内容,完全是多余的操作。

修正后的代码

把多余的PrintWriter相关代码删掉就可以了,修改后的Servlet代码如下:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setAttribute("name", "aa"); // 这里也不用new String("aa"),直接写字符串字面量就行
    this.getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);
}

额外小优化

你的JSP代码可以稍微简化一下,用EL表达式会更简洁易读,代替脚本片段:

${name}

EL表达式会自动从request、session等作用域中查找name属性,比Java脚本片段更符合现代JSP的写法。

这样修改之后,你再发起请求,JSP就能正确输出aa了!

内容的提问来源于stack exchange,提问作者Jane-Claire

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:11:39