-
JavaBeans的出现是为了减少JSP中的代码数量,增加代码的重用性。因为写在JSP中的代码不可能重用,但是JavaBeans从外观看来不过是普通的Java类,可以重用。
-
JavaBeans类需要满足2个条件
(1)有一个public的默认无参数构造函数
(2)对私有的字段提供public的getter/setter方法,且这些getter/setter方法不可重载
-
JSP中提供了专门的动作来操作JavaBeans
(1) useBean
<jsp:useBean id="book" scope="request" class="bean.util.Book"/>
其中 id属性代表接下来要使用当前对象的名字代号,scope属性代表对象的有效范围,class属性代表JavaBeans类的位置
useBean相当于将某个JavaBeans类装载进JSP页面,并且创建一个类的实例
(2) setProperty
<jsp:setProperty name="book" property="author" value="LuXun"/>
其中 name属性代表当前对象实例的名字(和useBean中的id属性相对应),property属性代表一个JavaBeans类的setXXX方法中的XXX部分,value代表要set的值
setProperty相当于对某个JavaBeans的对象实例的各种字段进行set
当使用 property=""的时候,代表自动匹配对JavaBeans的字段进行set。这种常见于一个form和一个JSP页面绑定,此时表单中的参数名和JavaBeans中的setter方法进行匹配,这种匹配通过反射机制实现,使用property=""就会进行自动装配,找不到也不会抛出异常。
(3) getProperty
<jsp:getProperty name="book" property="author">
其中 name属性代表当前对象实例的名字(和useBean中的id属性相对应),property属性代表一个JavaBeans类的getXXX方法中的XXX部分
getProperty用于获得JavaBeans对象的某个字段的值,相当于
<% out.println(book.getAuthor(); %>
-
关于useBean中的scope属性
每个JavaBeans对象有自己的对象作用范围,一共提供了四种作用范围
(1) page (默认)
作用范围为当前JSP页面,如果在当前页面中找不到当前JavaBeans的实例,则会调用默认构造函数进行实例化。
相当于
Book book = null; if ( pageContext.getAttribute("book") == null ) { book = new Book(); pageContext.setAttribute("book", book); } else { book = (Book) pageContext.getAttribute("book"); }
(2) request
代表这个对象在同一个request处理期间可以被共享使用(包括使用<jsp:forward>转发),并且保证线程安全。
相当于
Book book = null; if ( request.getAttribute("book") == null ) { book = new Book(); request.setAttribute("book", book); } else { book = (Book) request.getAttribute("book"); }
(3) session
作用范围为同一用户的不同JSP页面和Servlet
相当于
Book book = null; if ( session.getAttribute("book") == null ) { book = new Book(); session.setAttribute("book", book); } else { book = (Book) session.getAttribute("book"); }
(4) application
作用范围为不同用户在不同JSP页面和Servlet
相当于
Book book = null; if ( application.getAttribute("book") == null ) { book = new Book(); application.setAttribute("book", book); } else { book = (Book) application.getAttribute("book"); }
四种作用范围的大小排序为:
application > session > request > page, page为默认范围
网友评论