沒有javaBean的jsp就等於沒有學過jsp。 其實從javaBean開始就已經進入了MVC模式的學習了。那麼什麼是javaBean。
大家還記得在jsp+jdbc連接數據庫的時候吧。只要是需要連接數據庫的頁面都會寫那些關於數據庫連接的代碼,那麼多頁面都在寫重複的代碼。那麼有沒有一種方法把每個頁面重複的代碼提取出來放到一個公共頁面中,然後每個頁面去訪問這個頁面。這樣就避免了在每個頁面中寫重複代碼的操作了。
答案肯定是有的,那個公共的頁面就是javaBean。
javaBean簡介
javaBean是使用java語言開發的一個可重用的組件,在jsp的開發中可以使用javaBean減少重複代碼,使整個jsp代碼的開發更簡潔。比如:
1. 可以將HTML和java代碼分離,這樣就能實現項目的團隊合作性。使代碼清晰可辨
2.避免重複代碼的書寫,將常用的程序寫成javaBean組件。
javaBean是什麼?
上面已將說過了,把每個頁面重複的代碼提取出來放到一個公有的頁面中,而這個頁面就是我們說的javaBean。那麼這個頁面是什麼呢?就是.java文件。就是在學習java的時候大家建的那個.class。如下圖:在開發工具中的黃色區域 SimpleBean.java其實就是一個javaBean,而我們的項目是javaBean_01.jsp,javaBean_01.jsp會調用SimpBean裏面的內容。
對於javaBean有幾個名詞希望大家知道:
VO:值對象,存放所有的數據的。
POJO:簡單java對象
TO:傳輸對象,一個類必須實現Serializable接口才能稱爲傳輸對象。
操作javaBean
對javaBean代碼的要求是一個重點。javaBean本身就是一個類,屬於java的面向對象編程,屬於javaSE的範疇。在jsp中如果要應用jsp提供的javaBean的標籤來操作簡單類的話,則此javaBean必須滿足以下要求:(重點記住)
1.
所有的類必須放在一個包中,在WEB中沒有包是不存在的。比如:SimpleBean.java放在了javaBean01的包中。
2.所有的類必須聲明爲public class,這樣才能夠被外部調用。public class SimpleBean(){}
3.類中所有的屬性都必須封裝,也就是使用private。 private String name;
4. 封裝的屬性如果需要背外部所操作,則必須編寫對應的setter、getter方法;
5. 一個javaBean中至少存在一個無參構造方法,此爲jsp中的標籤所使用。
明白了上述要求後,我們就來寫一個javaBean看看要求如何。
- SimpleBean.java
- package javaBean01; //必須放在包中
- public class SimpleBean {
- private String name; //必須封裝
- private int age;
- public SimpleBean(){ //無參構造方法
-
- }
- 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 了,那我們的javaBean_01.jsp怎麼寫,怎麼調用裏面的name和age呢?我們再來做一個javaBean_01.jsp。再做這個頁面之前我們先來學習一個指令:<jsp:useBean>
使用<jsp:useBean>指令
這個指令是jsp提供的,關於這個指令的語法如下:
<jsp:useBean id="實例化對象名稱" scope="保存範圍" class="包.類名稱"/>
主要屬性
id: 表示實例化對象的名稱;
scope:表示此對象保存的範圍,一共有四種:page、request、session和application
class:對象所對應的包.類名稱;
知道了指令的使用了,我們的這個javaBean_01.jsp就可以利用這個指令來做了。
- javaBean_01.jsp
- <%@ page language="java" contentType="text/html" pageEncoding="gbk" %>
- //使用指令
- <jsp:useBean id="simple" scope="page" class="javaBean01.SimpleBean"/>
- <html>
- <head>
- <title>web開發</title>
- </head>
- <body>
- <%
- simple.setName("趙玉強");
- simple.setAge(22);
- %>
- <h3>姓名:<%=simple.getName() %></h3>
- <h3>年齡:<%=simple.getAge() %></h3>
- </body>
- </html>
運行一下就得到如下結果:
<jsp:useBean id="simple" scope="page" class="javaBean01.SimpleBean"/>
在使用這個標籤的時候,id的值相當於實例化了一個對象。class正是我們的包.類名稱,實際上在使用以上標籤的時候,都會自動調用javaBean中的無參構造方法,所以之前纔會有一個無參構造方法。
關於id實例化對象,爲什麼通過這樣一個id就能對象實例化呢?大家應該想到了,它存在了包.類名稱,還要求有無參構造方法。沒錯,這是java中的反射機制。對於反射機制就不多說了。
注意:
當javaBean也就是SimpleBean.java這個頁面修改後,一定要重啓服務器,否則不會顯示修改內容。
關於路徑問題
操作的路徑是一個很重要的問題,雖然大部分的人士喜歡用開發工具來開發程序,但是這個保存的路徑依然是非常重要的,可以說如果你連程序在tomcat裏面哪運行都不知道的話,你真是....無敵了
先來了解一下tomcat
打開tomcat文件夾,打開webappls,打開自己的項目;
在項目底下有如上圖所示的結構,jsp是jsp頁面,js是javascript小腳本,css是樣式,images是圖片存放區,index.jsp一般作爲主頁面顯示。WEB-INF裏面的lib是存放jar包的,classes是存放.java文件的。
大家在學習java的時候應該都知道,.java文件必須編譯成*.class文件才能使用。javaBean本身世一個*.java文件,那麼它被編譯成*.class文件後放在哪兒呢? 就放在上圖中的classes中,打開這個文件夾,可以看到一個javaBean01的文件夾,這個文件夾實際上是SimpleBean.java的包。這個文件裏面纔是*.class文件,也就是我們的SimpleBean.java。
實際上在WEB-INF中的lib和classes文件夾相當於一個默認的classpath,classpath是類執行時所需要的一個重要的環境變量屬性,當Tomcat啓動後,WEB-INF的lib和classes都會自動配置到classpath中。
注意:
1. 一定要理解好javaBean的本質屬性,其實它就是我們學java時的.java文件
2. 一定要掌握javaBean的要求。
3. 一定要牢記<jsp:useBean>指令的用法。
4.<jsp:useBean>指令是最常用的一種方法而不是唯一的方法
本文出自 “趙玉強的博客” 博客,請務必保留此出處http://zhaoyuqiang.blog.51cto.com/6328846/1134056