我在学习JSP 最近遇到了两种在JSP中创建类对象的方法
方法一:
<jsp:useBean id = "obj" class = "ClassName" />
<%
obj.method();
%>
方法二:
<%
ClassName obj = new ClassName();
obj.method();
%>
- 谁能解释一下到底有什么区别?
- 哪个是好习惯?
- 在哪种情况下方法 1/方法 2 是相关的,在哪些情况下不相关
先感谢您
方法一:
这<jsp:useBean>
是用于定位或实例化 JavaBean 组件的标准操作元素。首先<jsp: useBean>
尝试定位 Bean 类的实例,如果发现它没问题,那么它将从class
属性中提到的类实例化它。默认情况下,如果scope
未指定属性,它将在页面范围内查找对象。bean 的名称与我们在id
属性中给出的相同<jsp:useBean>
。如果对象引用不存在我们指定的名称,那么它将创建一个实例并找到变量的范围,class
属性定义 bean 类,type
属性定义 Bean 类的父类或接口。
您可以使用以下方法访问 Java bean 的 bean 样式属性<jsp:useBean>
:
<jsp:useBean id = "obj" class = "ClassName" />
<jsp:getProperty name="obj" property="someProperty"/>
上面的代码查找存储为obj
in的 Java bean page
,如果找不到,则尝试使用class
属性指定的类定义创建新 bean,并将新创建的 bean 设置为page
范围。您尝试访问bean的someProperty
属性。obj
该someProperty
属性应该有一个 bean 样式的 getter。阅读Oracle 教程了解更多信息。
方法二:
service()
您正在生成的 Servlet的方法中创建本地对象。您没有将其设置为任何范围。
笔记:
Scriptlet 并<jsp:useBean>
不可取。请使用 JSTL 和 EL 表达式。
<jsp:useBean>
标记允许您定义bean 的范围,而在后者
的范围是生成方法的obj
本地jspService()
在方法 1 中:您应该将方法表示为:
<jsp:useBean id = "obj" class = "ClassName" />
${obj.method()}
那么这将是比方法 2 更好的做法。
而是在控制器(servlet 或 portlet)中创建对象,然后使用 EL 和 JSTL 来呈现视图 (JSP)。如果可能,不要使用 scriptlet (<% %>)。
我猜方法 1 是 ClassName 类的静态方法。