useBean标签

时间:2009-06-30 06:56:58

标签: java jsp servlets

我对以下两行Head First servlets& JSP页面的第349:

  1. 这是一种声明和初始化您正在使用的实际bean对象的方法。
  2. 2. 使用

    声明和初始化bean属性
    <jsp:useBean> <jsp:useBean id="person"class="foo.Person" scope="request"/>
    

    在第一行中,为什么他们将属性称为对象?

    由于属性是绑定到范围的名称/值对,例如请求,会话。

2 个答案:

答案 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的一个实例。