Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JSP中创建类对象的两种方法之间的差异_Java_Jsp - Fatal编程技术网

Java 在JSP中创建类对象的两种方法之间的差异

Java 在JSP中创建类对象的两种方法之间的差异,java,jsp,Java,Jsp,我在学习JSP 最近我遇到了两种在JSP中创建类对象的方法 方法1: <jsp:useBean id = "obj" class = "ClassName" /> <% obj.method(); %> 方法2: <% ClassName obj = new ClassName(); obj.method(); %> 有人能解释一下到底有什么区别吗 哪一个是好的做法 方法1/方法2在哪些上下文中相关,在哪些上下文中不相关 提前感谢标记允许

我在学习JSP 最近我遇到了两种在JSP中创建类对象的方法

方法1:

<jsp:useBean id = "obj" class = "ClassName" />
<%
 obj.method();
%>

方法2:

<%
 ClassName obj = new ClassName();
 obj.method();
%>

  • 有人能解释一下到底有什么区别吗
  • 哪一个是好的做法
  • 方法1/方法2在哪些上下文中相关,在哪些上下文中不相关
提前感谢

标记允许您定义,而在后者中


obj
的范围是
jspService()
生成方法的本地范围

方法1:

是用于定位或实例化JavaBean组件的标准动作元素。首先,
尝试定位Bean类的一个实例,如果发现它很好,那么它将从
属性中提到的一个类实例化它。默认情况下,如果未指定
scope
属性,它将在页面范围中查找对象。bean的名称与我们在
id
属性中给出的名称相同。如果对象引用与我们指定的名称不存在,那么它将创建一个实例并查找变量的范围,
class
属性定义bean类,
type
属性定义bean类的父类或接口

您可以使用
访问Java bean的bean样式属性:


上面的代码在
page
中查找存储为
obj
的Java bean,如果没有找到,则尝试使用
class
属性指定的类定义创建新bean,并将新创建的bean设置为
page
范围。您尝试访问
obj
bean的
someProperty
属性。
someProperty
属性应该有一个bean风格的getter。再看一遍

方法2:

您正在生成的Servlet的
service()
方法中创建一个本地对象。您没有将其设置为任何范围

注意:


不建议使用scriptlet和
。请使用JSTL和EL表达式。

在方法1中:应将方法表示为:

<jsp:useBean id = "obj" class = "ClassName" />
${obj.method()}

${obj.method()}

然后,这将是比方法2更好的实践。

而是在控制器(servlet或portlet)中创建对象,然后使用EL和JSTL呈现视图(JSP)。如果可能,不要使用scriptlets()


我猜方法1是类ClassName的静态方法

第一种方法根本不创建新对象,除非已经有一个名为
obj
的变量,否则无法工作。这两种情况是不可比较的。在方法1中:obj的参考是什么?
<jsp:useBean id = "obj" class = "ClassName" />
${obj.method()}