Java jsp:useBean范围

Java jsp:useBean范围,java,jsp,request,session-variables,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" na

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"/>


姓名:
姓:
尽管我在控制器Servlet中的
请求
范围内设置了java对象,而不是在将请求转发到此Servlet的
会话
范围内设置了java对象。尽管标记中提到的作用域是session,但是
如何获得request属性?如果它使用
pageContext.findAttribute()
来获取属性,那么在
标记中具有scope属性有什么用?

分别扫描页面、请求、会话和应用程序作用域,直到为给定的属性键找到第一个非
null
属性值。另见:

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

这解释了为什么它会在转发servlet中找到请求范围的集合,而不是JSP中声明的会话范围的集合。这一点在中也有解释

在任何情况下,如果您使用的是servlet,那么就不应该在应该由servlet管理的模型对象上使用
遵循不同的MVC级别,这在实际使用servlet作为控制器时只会导致混乱和维护问题。在本手册的“编码风格和建议”一节中也明确提到了这一点

因此,与所有这些
事情不同,您只需执行以下操作:


名称:${person.Name}
姓氏:${人.姓}
您只需要添加JSTL
,以防止在重新显示用户控制的数据时出现潜在的XSS攻击漏洞(请注意,
不会这样做!)


名称:
姓:

要了解更多关于JSTL的信息,请检查。

默认情况下,useBean有页面范围那么在useBean标记中指定“范围”有什么用呢?但我有一个疑问,当我设置属性it request object并尝试在scope=“session”或scope=“request”中检索它时,它可以工作,但是如果我使用scope=“page”或scope=“application”,为什么它不能工作,如果对象在请求范围内,并且findAttribute()搜索每个范围,那么它无论如何都应该获得属性?它在指定的order page请求会话应用程序中搜索范围,直到找到第一个非空值。因此,如果您使用
,那么
${person}
将从页面范围返回一个,而不是从servlet设置的请求范围返回一个。请注意,您实际上得到了两个完全独立的
Person
对象实例(一个由servlet创建,另一个由
jsp:useBean
创建),而不仅仅是一个。您需要servlet设置的一个,这样就完全不需要
jsp:useBean
mess了我建议大家按照我精心编写的wiki页面链接进行操作。他们应该对新手有所启发。