【问题标题】:does pageContext.findAttribute() function finds request scope also?pageContext.findAttribute() 函数是否也找到请求范围?
【发布时间】:2026-01-09 11:55:01
【问题描述】:

我的 jsp 文件中有以下 sn-p:

<%
String name = request.getParameter("name");     
out.println(pageContext.findAttribute("name"));

%>

<br><br>

Name in request scope: <%=name %><br>

我得到的传递参数 name = Swatanya 的输出如下:

null 

Name in request scope: swatanya

为什么请求范围的name参数有值时findAttribute返回null?

【问题讨论】:

    标签: jsp pagecontext


    【解决方案1】:

    请求参数和属性是有区别的。不要混淆两者。

    如果您在谈论查询字符串,那么它作为请求参数而不是属性传递。


    JspContext#findAttribute() 声明的内容:

    在页面、请求、会话(如果有效)和应用程序范围中按顺序搜索命名属性,并返回关联的值或null

    ServletRequest#getParameter() 声明的内容:

    请求参数的值作为字符串返回,如果参数不存在,则返回null。 请求参数是随请求发送的额外信息。对于 HTTP servlet,参数包含在 查询字符串 或发布的表单数据中。


    如果需要,你可以这样尝试:

    request.setAttribute("name", request.getParameter("name"));
    

    注意:

    我建议您使用JavaServer Pages Standard Tag LibraryExpression Language 而不是Scriplet,这样更易​​于使用且不易出错

    【讨论】:

    • 感谢您的解释:)
    【解决方案2】:

    在第一种情况下,您在请求范围内的特定范围内进行搜索。 在第二种情况下,您在页面、请求、会话和应用程序范围中按顺序搜索。这意味着如果在获取参数的情况下,如果请求范围中不存在名称,它将返回 null 并在 find 属性中搜索所有范围

    【讨论】:

    • 不幸的是,您的回答没有解决这个问题。有问题的场景pageContext.findAttribute("name") 正在返回null。而request.getParameter("name") 正在返回swatanya