NIN*_*OOP 2 java jsp session-variables request 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"/>
Run Code Online (Sandbox Code Playgroud)
虽然我在request
范围内设置了java对象,而不是在session
Controller Servlet 中的范围内,我将请求转发给此Servlet.<jsp:useBean>
虽然标记中提到的范围是会话,但如何获取请求属性?如果它用于pageContext.findAttribute()
获取属性,那么在该<jsp:useBean>
标记中使用scope属性有什么用?
的PageContext#findAttribute()
分别在页,请求,会话和应用范围,直到第一非扫描null
属性值被发现,对于给定的属性键.另见javadoc:
按顺序搜索页面,请求,会话(如果有效)和应用程序范围中的命名属性,并返回关联的值或null.
这就解释了为什么它发现请求作用于转发servlet中的一个集合而不是JSP中声明的会话范围.我们的EL维基页面也对此进行了解释.
在任何情况下,如果您使用的是servlet,则不应该使用<jsp:useBean>
应该由servlet管理的模型对象.将<jsp:useBean>
分别遵循不同的MVC水平实际使用servlet作为控制器时,这只会导致混乱和维护的麻烦.我们的Servlets维基页面的 "编码样式和建议"部分也明确提到了这一点.
所以,<jsp:xxx>
你可以这样做,而不是所有这些事情:
<br>Name: ${person.name}
<br>Surname: ${person.surname}
Run Code Online (Sandbox Code Playgroud)
您只需要添加JSTL <c:out>
以防止在重新显示用户控制的数据时潜在的XSS攻击漏洞(请注意,<jsp:getProperty>
这样做不会!)
<br>Name: <c:out value="${person.name}" />
<br>Surname: <c:out value="${person.surname}" />
Run Code Online (Sandbox Code Playgroud)
要了解有关JSTL的更多信息,请查看我们的JSTL wiki页面.
归档时间: |
|
查看次数: |
15707 次 |
最近记录: |