首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jsp:useBean作用域

jsp:useBean作用域
EN

Stack Overflow用户
提问于 2013-01-29 17:04:19
回答 1查看 17.3K关注 0票数 2

JSP代码是:

代码语言:javascript
复制
<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对象,而不是在Controller Servlet中的session作用域中设置了java对象,从那里我将请求转发到此Servlet。尽管标记中提到的作用域是session,但<jsp:useBean>如何获得请求属性?如果它使用pageContext.findAttribute()来获取属性,那么在那个<jsp:useBean>标记中使用scope属性有什么用呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-30 00:57:04

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

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

这就解释了为什么它查找在转发servlet中设置的请求作用域,而不是在JSP中声明的会话作用域请求。这在our EL wiki page中也有解释。

在任何情况下,如果您正在使用servlet,就不应该在应该由servlet管理的模型对象上使用<jsp:useBean><jsp:useBean>遵循不同的MVC级别,当实际使用servlet作为控制器时,这只会导致混淆和维护问题。在our Servlets wiki page的“编码风格和建议”部分也明确提到了这一点。

因此,您可以这样做,而不是所有这些<jsp:xxx>的事情:

代码语言:javascript
复制
<br>Name: ${person.name}
<br>Surname: ${person.surname}

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

代码语言:javascript
复制
<br>Name: <c:out value="${person.name}" />
<br>Surname: <c:out value="${person.surname}" />

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

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14579121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档