閱讀目錄
JavaBean組件本質上是一個Java類,只是這個類的編碼要遵循一些約定。用戶可以使用JavaBean將功能、處理、值、數據庫訪問和其他任何可以用java代碼創造的對象進行打包,並且其他的開發者可以通過內部的JSP頁面、Servlet、其他JavaBean、applet程序或者應用來使用這些對象。用戶可以認為JavaBean提供了一種隨時隨地的復制和粘貼的功能,而不用關心任何改變。本文將對JavaBean涉及的知識點和基本用法進行簡單的總結。
JavaBean 是一種JAVA語言寫成的可重用組件,本質上是一個類,具有以下特性:
一個JavaBean主要由三個部分組成:
下面代碼為一個典型的JavaBean:
package com.test; public class Person { private String name="aaa"; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
JavaBean可以看成是一個黑盒子,即只需要知道其功能而不必管其內部結構的軟件設備。黑盒子只介紹和定義其外部特征和與其他部分的接口,如按鈕、窗口、顏色、形狀、句柄等。通過將系統看成使用黑盒子關聯起來的通訊網絡,我們可以忽略黑盒子內部的系統細節,從而有效地控制系統的整體性能。
在JSP中可以像使用普通類一樣訪問JavaBean,在腳本元素中實例化類的對象,調用對象的方法,並提供了三個動作元素來訪問JavaBean。
<jsp:useBean>:用於實例化JavaBean或者定位一個已經存在的JavaBean,並把實例的引用賦值給一個變量。
<%@ page language="java" pageEncoding="UTF-8"%> <html> <head> <title>在此處插入標題</title> </head> <body> <jsp:useBean id="person" class="com.test.Person" scope="page"/> <%=person.getName() %> </body> </html>
<jsp:setProperty>:和<jsp:userBean>一起使用用來設置JavaBean的屬性。
<%@ page language="java" pageEncoding="UTF-8"%> <html> <head> <title>在此處插入標題</title> </head> <body> <!-- userbean標簽的標簽提只在userbean標簽實例化bean時使用--> <jsp:useBean id="person" class="com.test.Person" scope="page"/> <jsp:setProperty property="name" name="person" value="xujian"/> <%=person.getName() %> </body> </html>
還可以通過param指定請求對象中參數的名字:
<jsp:setProperty property="name" name="person" param="name"/>
在浏覽器中輸入http://localhost:8080/day_0623/1.jsp?name=songji,頁面會顯示屬性name的值:songji。
<jsp:getProperty>:用來訪問一個Bean的屬性,並把屬性的值轉化成一個String,然後發送到輸出流中
<%@ page language="java" pageEncoding="UTF-8"%> <html> <head> <title>在此處插入標題</title> </head> <body> <!-- userbean標簽的標簽提只在userbean標簽實例化bean時使用--> <jsp:useBean id="person" class="com.test.Person" scope="page"/> <jsp:setProperty property="name" name="person" value="wangjian"/> <jsp:getProperty property="name" name="person"/> </body> </html>
查看jsp轉化的Servlet文件(文件目錄:\workSpace\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\work\Catalina\localhost\day_0623\org\apache\jsp)
com.test.Person person = null; synchronized (_jspx_page_context) { person = (com.test.Person) _jspx_page_context.getAttribute("person", PageContext.PAGE_SCOPE); if (person == null){ person = new com.test.Person(); _jspx_page_context.setAttribute("person", person, PageContext.PAGE_SCOPE); } } out.write("\r\n"); out.write("\t\t\r\n"); out.write("\t\t"); org.apache.jasper.runtime.JspRuntimeLibrary.introspecthelper(_jspx_page_context.findAttribute("person"), "name", "wangjian", null, null, false); out.write("\r\n"); out.write("\t\t\r\n"); out.write("\t\t"); out.write(org.apache.jasper.runtime.JspRuntimeLibrary.toString((((com.test.Person)_jspx_page_context.findAttribute("person")).getName()))); out.write("\r\n"); out.write("\t</body>\r\n");
可以看到,<jsp:getProperty property="name" name="person"/>這是轉換成上述代碼紅字體部分,調用了Person類的getName方法,如果該屬性沒有定義該方法則會報錯。