我对以下两行Head First servlets& JSP页面的第349:
2. 使用
声明和初始化bean属性<jsp:useBean> <jsp:useBean id="person"class="foo.Person" scope="request"/>
在第一行中,为什么他们将属性称为对象?
由于属性是绑定到范围的名称/值对,例如请求,会话。
答案 0 :(得分:1)
<jsp:useBean id="person"class="foo.Person" scope="request"/>
这将调用foo.Person的默认构造函数
id“person”允许您在jsp页面上引用Bean
<div>
<c:out value="${person.name}" />
</div>
范围是Bean foo.Person的范围
JSP syntax reference for useBean包含每个范围的定义。
所以你的JavaBean看起来像这样
package foo;
public class Person {
private String name;
public Person() {
this.name = "jack"
}
public String getName() {
return name;
}
public void setName(String n) {
this.name = n;
}
}
如果已经在引用的作用域中实例化了Person Bean,则useBean将找到并使Bean可用于JSP页面上的表达式和scriplets。
答案 1 :(得分:0)
<jsp:useBean id="person" class="foo.Person" scope="request"/>
在此行中,请求范围中的属性“person”将是“foo.Person”类型的对象实例。
Apache Tomcat 6实现将标记转换为此Java代码:
foo.Person person = null;
synchronized (request) {
person = (foo.Person) _jspx_page_context.getAttribute("person",
PageContext.REQUEST_SCOPE);
if (person == null){
person = new foo.Person();
_jspx_page_context.setAttribute("person", person,
PageContext.REQUEST_SCOPE);
}
}
_jspx_page_context 是PageContext的一个实例。