javaBean
JavaBean 簡介
JavaBean 是一種JAVA語言寫成的可重用元件。為寫成JavaBean,類必須是具體的和公共的,并且具有無參數的
構造器。JavaBean 通過提供符合一緻性設計模式的公共方法将内部域暴露成員屬性。在JSP的開發中可以使用javaBean減少重複代碼,使整個JSP代碼的開發更簡潔.JSP搭配JavaBean來使用,有以下優點:
1.可将HTML和java代碼分離,好維護
2.将常用的程式攜程javaBean元件,當在JSP要使用時,隻要調用就可以,避免編寫重複代碼
JavaBean開發要求
1.javaBean本身就是一個類,屬于java面向對象的程式設計
2.在JSP中如果要應用jsp提供的javabean的标簽來啊哦做簡單類的話,則此類必須滿足如下的開發要求:
01.所有的類必須放在一個包中,在web中沒有包的是不存在的
02.所有的類必須聲明為public class,這樣才能夠被外部所方位
03.類中所有的屬性都必須使用private封裝
04.封裝的屬性如果需要被外部所操作,則必須編寫對應的setter.getter方法
05.一個javabean中至少存在一個無參構造方法,此為jsp中的标簽所使用
執行個體:
package cn.bdqn.javaBean;
public class Person {
private String name;
private int age;
public void setName(String name){
this.name=name;
}
public void setAge(int age){
this.age=age;
public String getName(){
return this.name;
public int getAge(){
return this.age;
對于javabean有幾個名詞:
VO: 值對象,存放所有所有的傳遞資料的操作上;
POJO: 簡單java對象
PO: persistant object 持久對象,可以看成是與資料庫中的表相映射的java對象。使用
Hibernate來生成PO是不錯的選擇。
注意:當一個javabean修改後,一定要重新開機伺服器
當然Tomcat中提供了自動的加載機制,但是這種加載機制需要通過配置server.xml進行配置
在配置的虛拟目錄的,context節點中添加屬性reloadable=”true”
這樣配置後,Tomcat會自動進行檢測,如果javabean修改,會自動進行重新加載
由于reloadable一緻要處于監視狀态,是以伺服器真正用于項目運作的時候,此屬性一定要設定成false,否則性能會下載下傳.
每當進行完重新加載之後,之前所設定的全部的session範圍的屬性将徹底消失
JavaBean與表單
Jsp表單頁面代碼如下:
<form action="control.jsp" method="post">
<table>
<tr>
<td>姓名</td>
<td><input name="name" placeholder="請輸入姓名">
</td>
</tr>
<td>年齡</td>
<td><input type="password" name="age" placeholder="請輸入年齡">
<td colspan="2"><input type='submit' value="送出"></td>
</table>
</form>
方法一:
使用<%@ page import=”包.類名稱”%>進行引入,就可以使用new關鍵字,進行對象的建立了
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="cn.bdqn.javaBean.Person"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%request.setCharacterEncoding("UTF-8"); %>
<%
Person p=new Person();
p.setName(request.getParameter("name"));
p.setAge(Integer.parseInt(request.getParameter("age")));
%>
<%=p.getName() %>
<%=p.getAge()%>
</body>
</html>
方法二:
使用<jsp:useBean id=”執行個體化對象的名稱” scope=”儲存範圍(四大作用域)” class=”包.類名稱”/>
Id是被執行個體化的對象的名稱,這樣使用就直接拿這個對象進行使用.
<jsp:useBean id="P2" scope="page" class="cn.bdqn.javaBean.Person"/>
<%--jsp:useBean标簽中的id是被執行個體化的對象,
jsp:setProperty标簽中的name屬性的值是需要被修改屬性值的執行個體化對象名稱
property屬性是需要被修改的屬性的名稱 值為*,表示全部比對 --%>
<jsp:setProperty name="p2" property=* />
通過一個<jsp:Property>标簽就可以完成所有請求參數的自動設定,而且可以自動
将輸入的String型變為int型的資料,這個标簽的文法如下:
<jsp:setProperty>:表示操作指定javabean中的屬性,裡面定義了兩個屬性:
-name:表示使用javabean中的id的定義;
-property:表示的是設定裡面的屬性内容,如果為*則表示自動比對,與表單相比對.
如果想要讓表單的參數自動設定到javabean之中的化.就需要讓參數的名稱與屬性一緻 .但是這種說法并不明确,因為在這之中還包含了一個概念.
在編寫簡單java類的時候類的屬性使用private封裝,而且編寫了對應的setter和getter方法.
使用這種操作.實際上最終調用的是javabean中的setter方法,而setter方法又有嚴格的命名要求.是以可以簡單的了解為要想設定.則參數名稱必須與屬性一緻,否則無法完成設定.
這種操作的原理是反射機制,但是這種操作本身存在一個問題.如果要求輸入的内容是int型的,則必須輸入數字否則會報錯
Javabean的優點必須結合表單才能看出來
方法三:
使用反射機制
javaBean設定和取得屬性
1設定屬性:<jsp:setProperty>
<jsp:setProperty>标簽一共有四種使用方法:
-01 自動比對:<jsp:setProperty name=”執行個體化對象的名稱(即:useBaen标簽中的id屬性的值)” property=”*”/>
-02 指定屬性:<jsp:setProperty name=”執行個體化對象的名稱(即:useBaen标簽中的id屬性的值)” property=”屬性名稱”/>
-03 指定參數:<jsp:setProperty name=”執行個體化對象的名稱(即:useBaen标簽中的id屬性的值)” property=”屬性名稱” param=”參數名稱”/>
-04 指定内容:<jsp:setProperty name=”執行個體化對象的名稱(即:useBaen标簽中的id屬性的值)” property=”屬性名稱” value=”内容”/>
建議使用第一種
1取得屬性:<jsp:getProperty>
在javaBean的操作标簽中也提供了專門取得屬性的标簽:
<jsp:getProperty>,此标簽會自動調用JavaBean中的getter()方法,與設定屬性的标簽相比,取得屬性的标簽隻有一種文法:
<jsp:getProperty name=”執行個體化對象的名稱(useBean标簽中id屬性的屬性值)”
property=”屬性名稱”>
jsp:getProperty 标簽将擷取屬性值并列印到頁面
當以後再JSP頁面中再也看不到任何的<%%>的時候,基本上jsp的開發标準模式也就形成類
以後隻要看見jsp标簽上出現類id屬性,則不管何種情況基本上都表示一個執行個體化對象,如果标簽上看見類name屬性,肯定找的是屬性範圍中的内容,就是id屬性的屬性值,如果有類property則表示的就是一個類中的屬性
jsp:getProperty 和jsp:setProperty标簽都是利用反射機制完成的
javaBean的儲存範圍
<jsp:useBean>指令上存在一個scope屬性,表示的是一個javaBean的儲存範圍,儲存範圍一共有四種:page,request,session,application.即:jsp四大作用域
javaBean的删除
JavaBean雖然使用類<jsp:useBean>标準進行建立,但是其操作依靠的仍然是四種屬性範圍,如果一個JavaBean不再使用的話,則可以直接使用四中屬性範圍的removeAttribute()方法進行删除
-1删除page範圍的JavaBean可以使用;
pageContext.removeAttribute(JavaBean的執行個體化對象名稱);
-2删除request範圍的javaBean可以使用:
request.removeAttribute(JavaBean的執行個體化對象名稱);
-3删除session範圍的javaBean可以使用:
session.removeAttribute(JavaBean的執行個體化對象名稱);
-4删除application範圍的javaBean可以使用:
application.removeAttribute(JavaBean的執行個體化對象名稱);