一呵曹、什么是JavaBean
JavaBean是一個遵循特定寫法的Java類座云,它通常具有如下特點(diǎn):
- 這個Java類必須具有一個無參的構(gòu)造函數(shù)
- 屬性必須私有化氧苍。
- 私有化的屬性必須通過public類型的方法暴露給其它程序崇猫,并且方法的命名也必須遵守一定的命名規(guī)范诅福。
Javabean范例:
package rain.javabean.study;
/**
* 一個簡單的Javabean
* @author rain
*
*/
public class Student {
private String name;
private float score;
private String sex;
public Student() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getScore() {
return score;
}
public void setScore(float score) {
this.score = score;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
二、在JSP中使用JavaBean
JSP技術(shù)提供了三個關(guān)于JavaBean組件的動作元素睹酌,即JSP標(biāo)簽权谁,它們分別為:
- <jsp:useBean>標(biāo)簽:用于在JSP頁面中查找或?qū)嵗粋€JavaBean組件剩檀。
- <jsp:setProperty>標(biāo)簽:用于在JSP頁面中設(shè)置一個JavaBean組件的屬性憋沿。
- <jsp:getProperty>標(biāo)簽:用于在JSP頁面中獲取一個JavaBean組件的屬性。
2.1沪猴、<jsp:useBean>標(biāo)簽
<jsp:useBean>標(biāo)簽用于在指定的域范圍內(nèi)查找指定名稱的JavaBean對象辐啄,如果存在則直接返回該JavaBean對象的引用,如果不存在則實(shí)例化一個新的JavaBean對象并將它以指定的名稱存儲到指定的域范圍中运嗜。
常用語法:
<jsp:useBean id="beanName" class="package.class" scope="page|request|session|application"/>
- "id"屬性用于指定JavaBean實(shí)例對象的引用名稱和其存儲在域范圍中的名稱壶辜。
- "class"屬性用于指定JavaBean的完整類名(即必須帶有包名)。
- "scope"屬性用于指定JavaBean實(shí)例對象所存儲的域范圍担租,其取值只能是page砸民、request、session和application等四個值中的一個奋救,其默認(rèn)值是page岭参。
<jsp:useBean>標(biāo)簽使用范例
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>jsp:useBean標(biāo)簽的使用范例</title>
</head>
<body>
<%--
在jsp中使用jsp:useBean標(biāo)簽來實(shí)例化一個Java類的對象
<jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/>
<jsp:useBean>:表示在JSP中要使用JavaBean。
id:表示生成的實(shí)例化對象尝艘,凡是在標(biāo)簽中看見了id演侯,則肯定表示一個實(shí)例對象。
class:此對象對應(yīng)的包.類名稱
scope:此javaBean的保存范圍背亥,四種范圍:page秒际、request、session狡汉、application
--%>
<jsp:useBean id="student" class="rain.javabean.study.Student" scope="page" />
<%
//為該對象的屬性賦值
student.setName("張三");
student.setScore((float)99.5);
student.setSex("男");
%>
<h3>姓名:<%=student.getName() %></h3>
<h3>分?jǐn)?shù):<%=student.getScore() %></h3>
<h3>性別:<%=student.getSex() %></h3>
</body>
</html>
運(yùn)行結(jié)果如下:
2.2娄徊、<jsp:useBean>執(zhí)行原理
從前面可以知道,在使用這個標(biāo)簽<jsp:useBean id="student" class="rain.javabean.study.Student" scope="page" />
時盾戴,會實(shí)例化一個student
對象嵌莉,那么這個對象時怎么來的呢,下面從源碼來看一看捻脖。
找到tomcat服務(wù)器下的"work\Catalina\localhost\項(xiàng)目名稱\org\apache\jsp"這個目錄锐峭,就可以看到將 javabeanDemo1.jsp
頁面翻譯成servlet的java源碼了,打開這個文件可婶,可以看到具體創(chuàng)建過程了:
rain.javabean.study.Student student = null;
student = (rain.javabean.study.Student) _jspx_page_context.getAttribute("student", javax.servlet.jsp.PageContext.PAGE_SCOPE);
if (student == null){
student = new rain.javabean.study.Student();
_jspx_page_context.setAttribute("student", student, javax.servlet.jsp.PageContext.PAGE_SCOPE);
}
下面來說一說是怎么形成的
首先定義student對象 值為null沿癞。
rain.javabean.study.Student student = null;
然后是使用pageContext對象的getAttribute方法獲取存儲在PageContext.PAGE_SCOPE域中的Person對象
student = (rain.javabean.study.Student) _jspx_page_context.getAttribute("student", javax.servlet.jsp.PageContext.PAGE_SCOPE);
如果在PageContext.PAGE_SCOPE域中的Person對象沒有找到person對象,那么就創(chuàng)建一個新的person對象矛渴,然后使用pageContext對象的setAttribute方法將新創(chuàng)建的person存儲在PageContext.PAGE_SCOPE域中
if (student == null){
student = new rain.javabean.study.Student();
_jspx_page_context.setAttribute("student", student, javax.servlet.jsp.PageContext.PAGE_SCOPE);
}
2.3椎扬、<jsp:setProperty>標(biāo)簽
<jsp:setProperty>標(biāo)簽用于設(shè)置和訪問JavaBean對象的屬性惫搏。
語法格式一:
<jsp:setProperty name="beanName" property="propertyName" value="string字符串"/>
語法格式二:
<jsp:setProperty name="beanName" property="propertyName" value="<%= expression %>" />
語法格式三:
<jsp:setProperty name="beanName" property="propertyName" param="parameterName"/>
語法格式四:
<jsp:setProperty name="beanName" property= "*" />
name屬性用于指定JavaBean對象的名稱。
property屬性用于指定JavaBean實(shí)例對象的屬性名蚕涤。
value屬性用于指定JavaBean對象的某個屬性的值筐赔,value的值可以是字符串,也可以是表達(dá)式揖铜。為字符串時茴丰,該值會自動轉(zhuǎn)化為JavaBean屬性相應(yīng)的類型,如果value的值是一個表達(dá)式天吓,那么該表達(dá)式的計(jì)算結(jié)果必須與所要設(shè)置的JavaBean屬性的類型一致贿肩。
param屬性用于將JavaBean實(shí)例對象的某個屬性值設(shè)置為一個請求參數(shù)值,該屬性值同樣會自動轉(zhuǎn)換成要設(shè)置的JavaBean屬性的類型龄寞。
使用<jsp:setProperty>設(shè)置屬性的值,<jsp:getProperty>獲取屬性的值
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>使用jsp:setProperty設(shè)置屬性的值汰规,getProperty獲取屬性的值</title>
</head>
<body>
<jsp:useBean id="student" class="rain.javabean.study.Student" scope="page" />
<%--
使用jsp:setProperty標(biāo)簽設(shè)置person對象的屬性值
jsp:setProperty在設(shè)置對象的屬性值時會自動把字符串轉(zhuǎn)換成8種基本數(shù)據(jù)類型
但是jsp:setProperty對于復(fù)合數(shù)據(jù)類型無法自動轉(zhuǎn)換
--%>
<jsp:setProperty property="name" name="student" value="張三"/>
<jsp:setProperty property="score" name="student" value="90.55"/>
<jsp:setProperty property="sex" name="student" value="男"/>
<!-- 使用getProperty獲取屬性的值 -->
<h2>姓名:<jsp:getProperty property="name" name="student"/></h2>
<h2>姓名:<jsp:getProperty property="score" name="student"/></h2>
<h2>姓名:<jsp:getProperty property="sex" name="student"/></h2>
</body>
</html>
運(yùn)行結(jié)果如下:
關(guān)于JavaBean方面的內(nèi)容基本上就這么多了,只需要掌握J(rèn)avaBean的寫法物邑,以及掌握<jsp:useBean>標(biāo)簽溜哮,<jsp:setProperty>標(biāo)簽,<jsp:getProperty>標(biāo)簽的使用色解!