一拆檬、JavaBean簡(jiǎn)介
JavaBean是使用Java語(yǔ)言開(kāi)發(fā)的一個(gè)可重用的組件竟贯,在JSP的開(kāi)發(fā)中可以使用JavaBean減少重復(fù)代碼屑那,使整個(gè)JSP代碼的開(kāi)發(fā)更簡(jiǎn)潔艘款。JSP搭配JavaBean來(lái)使用,有以下的優(yōu)點(diǎn):
1.可將HTML和Java代碼分離蜘欲,這主要是為了日后維護(hù)的方便姥份。如果把所有的程序代碼(HTML和Java)寫(xiě)到JSP頁(yè)面中年碘,會(huì)使整個(gè)程序代碼又多又復(fù)雜屿衅,造成日后維護(hù)上的困難。
2.可利用JavaBean的優(yōu)點(diǎn)涡尘。將日常用到的程序?qū)懗蒍avaBean組件悟衩,當(dāng)在JSP要使用時(shí)栓拜,只要調(diào)用JavaBean組件來(lái)執(zhí)行用戶所要的功能惠昔,不用再重復(fù)寫(xiě)相同的程序镇防,這樣以來(lái)也可以節(jié)省開(kāi)發(fā)所需的時(shí)間潮饱。
二香拉、JavaBean開(kāi)發(fā)要求
1.JavaBean本身就是一個(gè)類(lèi),屬于Java的面向?qū)ο缶幊獭?/p>
2.在JSP中如果要應(yīng)用JSP提供的Javabean的標(biāo)簽來(lái)操作簡(jiǎn)單類(lèi)的話扑毡,則此類(lèi)必須滿足如下的開(kāi)發(fā)要求:
(1)所有的類(lèi)必須放在一個(gè)包中盛险,在WEB中沒(méi)有包的是不存在的;
(2)所有的類(lèi)必須聲明為public class换帜,這樣才能夠被外部所訪問(wèn)鹤啡;
(3)類(lèi)中所有的屬性都必須封裝,即:使用private聲明祟牲;
(4)封裝的屬性如果需要被外部所操作疲眷,則必須編寫(xiě)對(duì)應(yīng)的setter您朽、getter方法换淆;
(5)一個(gè)JavaBean中至少存在一個(gè)無(wú)參構(gòu)造方法,此為JSP中的標(biāo)簽所使用讯屈。
第一個(gè)簡(jiǎn)單JavaBean
package blog.csdn.joywy;
public class SimpleBean{
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;
}
}
如果在一個(gè)類(lèi)中只包含屬性涮母、setter、getter方法叛本,那么這種類(lèi)就成為簡(jiǎn)單JavaBean来候。
對(duì)于簡(jiǎn)單的JavaBean也有幾個(gè)名詞:
(1)VO:與簡(jiǎn)單Java對(duì)象對(duì)應(yīng),專門(mén)用于傳遞值的操作上
(2)POJO:簡(jiǎn)單Java對(duì)象
(3)TO:傳輸對(duì)象云挟,進(jìn)行遠(yuǎn)程傳輸時(shí)园欣,對(duì)象所在的類(lèi)必須實(shí)現(xiàn)java.io.Serializable接口峭拘。
三辉饱、WEB開(kāi)發(fā)的標(biāo)準(zhǔn)目錄結(jié)構(gòu)
Web項(xiàng)目中各個(gè)目錄的作用:
注:
1.打包編譯:編譯時(shí)直接使用javac -d . SimpleBean.java命令根據(jù)package的定義打包編譯彭沼。
2.Tomcat中classpath的配置:
所有的class要進(jìn)行訪問(wèn)時(shí)都必須在classpath中進(jìn)行配置姓惑,在Tomcat中依然可以使用按脚,在Web開(kāi)發(fā)中辅搬,Tomcat安裝目錄的lib文件夾、WEB-INF\classes和WEB-INF\lib文件夾實(shí)際上都表示了classpath介蛉,所以直接將類(lèi)或jar包復(fù)制到這些文件夾中就可以直接使用了溶褪。
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="blog.csdn.joywy.*"%> <!-- 導(dǎo)入blog.csdn.joywy包 -->
<html>
<head><title>歡迎來(lái)到望星空</title></head>
<body>
<%
SimpleBean simple = new SimpleBean(); //聲明并實(shí)例化SimpleBean對(duì)象
simple.setName("Joywy"); //設(shè)置name屬性
simple.setAge(23); //設(shè)置age屬性
%>
<h3>姓名:<%=simple.getName()%></h3> <!-- 輸出name屬性的內(nèi)容 -->
<h3>年齡:<%=simple.getAge()%></h3> <!-- 輸出age屬性的內(nèi)容 -->
</body>
</html>
四猿妈、使用<jsp:useBean>指令
除了使用import的語(yǔ)句之外巍虫,也可以使用JSP中提供的:<jsp:useBean>指令完成操作垫言,指令的操作語(yǔ)法如下所示:
1.<jsp:useBean id="實(shí)例化對(duì)象名稱" scope=“保存范圍” class=“包.類(lèi)名稱“/>
2.主要屬性:
(1)id:表示實(shí)例化對(duì)象的名稱
(2)scope:表示此對(duì)象保存的范圍倾剿,一共有四種屬性范圍:page、request凛捏、session芹缔、application
(3)class:對(duì)象所對(duì)應(yīng)的包.類(lèi)名稱
樣例:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<jsp:useBean id="simple" scope="page" class="blog.csdn.joywy.SimpleBean"/>
<html>
<head><title>歡迎來(lái)到望星空</title></head>
<body>
<%
simple.setName("Joywy");
simple.setAge(23);
%>
<h3>姓名:<%=simple.getName()%></h3>
<h3>年齡:<%=simple.getAge()%></h3>
</body>
</html>
在使用<jsp:useBean/>指令時(shí)最欠,實(shí)際上會(huì)默認(rèn)調(diào)用SimpleBean類(lèi)中的無(wú)參構(gòu)造方法進(jìn)行對(duì)象實(shí)例化芝硬,當(dāng)修改SimpleBean.java文件后,如果要想讓其起作用绍绘,則需要重新啟動(dòng)服務(wù)器迟赃,我們可以通過(guò)在Tomcat中直接配置自動(dòng)加載的操作纤壁,這樣即使不重新啟動(dòng)服務(wù)器,JavaBean修改后也可以被立即加載進(jìn)來(lái)酌媒。重新加載的配置如下:在Tomcat安裝目錄下conf/server.xml文件中進(jìn)行配置
<Context path="/joywy" docBase="D:\myweb" reloadable="true"/>
以后Tomcat會(huì)自動(dòng)進(jìn)行檢測(cè),如果發(fā)現(xiàn)JavaBean修改之后會(huì)自動(dòng)進(jìn)行重新加載馍佑。
注意:
1.直接在配置虛擬目錄的位置上增加一個(gè)reloadable屬性即可拭荤,但是這種情況只適合于開(kāi)發(fā)舅世,因?yàn)槭褂胷eloadable自動(dòng)加載后,服務(wù)器將始終處于監(jiān)視狀態(tài)雏亚,一旦發(fā)現(xiàn)類(lèi)修改后就要立刻重新加載罢低,運(yùn)行性能是比較低的,所以宜岛,當(dāng)項(xiàng)目真正發(fā)布運(yùn)行時(shí)一定要將reloadable的內(nèi)容設(shè)置成false萍倡,以提升入屋企運(yùn)行性能辟汰。
2.還要記住帖汞,當(dāng)Tomcat重新加載了新的內(nèi)容后,所有的操作都將初始化填硕,所有設(shè)置過(guò)的session屬性都將消失扁眯。
四翅帜、<jsp:useBean>指令內(nèi)部實(shí)現(xiàn)原理
依靠的是反射機(jī)制完成的,在使用<jsp:useBean>指令時(shí)需要定義對(duì)象所在的“包.類(lèi)“名稱绣版,而且又要求類(lèi)中存在無(wú)參構(gòu)造方法杂抽,這就是反射操作的前提條件缩麸,所以<jsp:useBean>的語(yǔ)法實(shí)際上屬于反射機(jī)制的操作實(shí)現(xiàn)杭朱。