java - jsp:useBean 范围

标签 java jsp request session-variables usebean

JSP 代码是:

<jsp:useBean id="person" class="org.example.model.PersonModel" scope="session">
</jsp:useBean>
<br> Name : <jsp:getProperty property="name" name="person"/>
<br> Surname : <jsp:getProperty property="surname" name="person"/>

虽然我在request中设置了java对象范围而不是 session Controller Servlet 中的范围,我从这里将请求转发到此 Servlet 。 <jsp:useBean>如何尽管标签中提到的范围是 session ,但仍能获取请求属性吗?如果它使用pageContext.findAttribute()要获取该属性,那么 <jsp:useBean> 中包含范围属性有什么用?标签?

最佳答案

PageContext#findAttribute() 分别扫描页面、请求、 session 和应用程序范围,直到第一个非 null找到给定属性键的属性值。另请参阅javadoc :

Searches for the named attribute in page, request, session (if valid), and application scope(s) in order and returns the value associated or null.

这解释了为什么它会找到转发 servlet 中设置的请求范围,而不是 JSP 中声明的 session 范围。 our EL wiki page 中也对此进行了解释.

无论如何,如果您使用 servlet,则不应使用 <jsp:useBean>在应该由 servlet 管理的模型对象上。 <jsp:useBean>即遵循不同的 MVC 级别,这只会在实际使用 servlet 作为 Controller 时导致困惑和维护麻烦。 our Servlets wiki page 的“编码风格和建议”部分也明确提到了这一点。 。

所以,而不是所有这些 <jsp:xxx>事情,你可以这样做:

<br>Name: ${person.name}
<br>Surname: ${person.surname}

您只需添加JSTL <c:out>在重新显示用户控制的数据时防止潜在的 XSS 攻击漏洞(请注意 <jsp:getProperty> 不会这样做!)

<br>Name: <c:out value="${person.name}" />
<br>Surname: <c:out value="${person.surname}" />

要了解有关 JSTL 的更多信息,请查看 our JSTL wiki page .

关于java - jsp:useBean 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14579121/

相关文章:

java - prb 和我的 json 响应

java - <set> 中的属性无效 : "null" in new ArrayList at JSP

python - 有没有办法在不下载 Python 中的 url 内容的情况下获取响应 header ?

java - 如何在 JSP 上转义撇号或引号(由 JavaScript 使用)

java - 违反 RFC 2109 : host > minus domain may not contain any dots

javascript - chai 测试中未按请求调用回调

java - 使用 import net.jini.export.Exporter 时出现 "AWT-EventQueue-0"java.lang.ExceptionInInitializerError;

java - Android 中的服务类

java - 我正在尝试将 mongodb 与 spring boot 连接。我很困惑何时使用以下 : 中的哪个 Maven 依赖项

javascript - 通过 <a href> 发送复选框数据