Java useBean标签

Java useBean标签,java,jsp,servlets,Java,Jsp,Servlets,我对第349页的Head First servlets&JSP手册中的以下两行内容感到困惑: 是一种声明和初始化实际使用的bean对象的方法。 2.使用 <jsp:useBean> <jsp:useBean id="person"class="foo.Person" scope="request"/> 在第一行中,他们为什么将属性称为对象 因为属性是绑定到范围的名称/值对,比如请求、会话 <jsp:useBean id="person" class="foo.

我对第349页的Head First servlets&JSP手册中的以下两行内容感到困惑:

  • 是一种声明和初始化实际使用的bean对象的方法。
  • 2.使用

    <jsp:useBean> <jsp:useBean id="person"class="foo.Person" scope="request"/>
    
    
    
    在第一行中,他们为什么将属性称为对象

    因为属性是绑定到范围的名称/值对,比如请求、会话

    <jsp:useBean id="person" class="foo.Person" scope="request"/>
    
    _jspx_页面_上下文是的一个实例


    如果Person Bean已经在您引用的范围内实例化,那么useBean将定位该Bean并使其可用于JSP页面上的表达式和scriplets中。

    我认为您错了,因为对象是一个实例,但您将实例视为引用而不是对象。如果我错了,请纠正我。
      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);
        }
      }
    
    <jsp:useBean id="person"class="foo.Person" scope="request"/>
    
    <div>   
        <c:out value="${person.name}" />
    </div>
    
    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;
        }
    
    }