jsp:useBean范围

JSP代码是:

  
Name :
Surname :

虽然我在request范围中设置了java对象,而不是在Controller Servlet中的session范围中,我将请求转发给此Servlet。 虽然标记中提到的作用域是会话,但如何获取请求属性? 如果它使用pageContext.findAttribute()来获取属性,那么在标记中使用scope属性有什么用?

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

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

这就解释了为什么它发现请求作用于转发servlet中的一个集合而不是JSP中声明的会话范围。 我们的EL维基页面也对此进行了解释。

在任何情况下,如果您正在使用servlet,则不应该在应该由servlet管理的模型对象上使用遵循不同的MVC级别,当实际使用servlet作为控制器时,这只会导致混淆和维护问题。 我们的Servlets维基页面的 “编码样式和建议”部分也明确提到了这一点。

所以,不是所有那些东西,你可以这样做:

 
Name: ${person.name}
Surname: ${person.surname}

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

 
Name:
Surname:

要了解有关JSTL的更多信息,请查看我们的JSTL wiki页面 。