我的jsp文件中有以下代码片段:
<%
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
为什么findAttribute返回null当有值在请求范围的名称参数
请求参数和属性是有区别的。别把两者搞混了。
如果你在谈论查询字符串,那么它作为请求参数而不是属性传递。
JspContext#findAttribute()的状态:
按顺序在页面、请求、会话(如果有效)和应用程序范围中搜索命名属性,并返回与
null
相关的值。
ServletRequest#getParameter()的状态:
返回请求参数的值为String,如果参数不存在则返回null。请求参数是随请求一起发送的额外信息。对于HTTP servlet,参数包含在查询字符串或提交的表单数据中。
如果需要的话,你可以这样做:
request.setAttribute("name", request.getParameter("name"));
注意:
我建议你使用JavaServer Pages标准标签库或表达式语言,而不是
Scriplet
,更容易使用和更少出错。
在第一种情况下,您正在请求范围中的特定范围中搜索。在第二种情况下,您按顺序搜索页面,请求,会话和应用程序范围。这意味着如果在get参数的情况下,如果name不在请求范围内,它将返回null在find属性中它会搜索所有范围