什麼是javaBean
-
JavaBean就是一個普通的java類,也稱之為簡單java物件--POJO(Plain Ordinary Java Object),是Java程式設計中一種設計模式,是一種基於 Java 平臺的軟體元件思想
-
JavaBean遵循著特定的寫法,通常有以下的規則:
- 有無參的建構函式
- 成員屬性私有化
- 封裝的屬性如果需要被外所操作,必須編寫public型別的setter、getter方法
-
上面的文字看起來好像很高大上,javaBean其實非常簡單,下面的程式碼就是按照特定寫法、規則編寫的一個JavaBean物件
public class Person {
private String username ;
private int age;
public Person() {
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
複製程式碼
為什麼需要使用Javabean
- 使用javaBean的好處就是:封裝,重用,可讀!
- 下面引用知乎一段回答:
JaveBean你可以理解為一輛貨車,在你的java端和web頁面進行資料傳遞的載體,你當然可以每個變數單獨傳遞,或者使用集合傳遞,但是javabean可以使你的資料更有可讀性,方便開發時明確變數的意義,也使其他閱讀你程式碼的人能直接你的意圖
如果把bean類與資料庫聯合使用,一張表使用bean類,可以使你的程式碼更加簡潔高效,易於理解,現在大多數框架都會使用這種機制。
JSP行為--JavaBean
- JSP技術提供了三個關於JavaBean元件的動作元素,即JSP行為(標籤),它們分別為:
- jsp:useBean【在JSP頁面中查詢javaBean物件或者例項化javaBean物件】
- jsp:setProperty【設定javaBean的屬性】
- jsp:getProperty【獲取javaBean的屬性】
##jsp:useBean
##
-
<jsp:useBean>
標籤用於在指定的域範圍內查詢指定名稱的JavaBean物件:- 存在則直接返回該JavaBean物件的引用。
- 不存在則例項化一個新的JavaBean物件並將它以指定的名稱儲存到指定的域範圍中。
-
語法:
<jsp:useBean id="例項化物件的名稱" class="類的全名" scope="儲存範圍"/>
複製程式碼
- 如果JSP不支援
<jsp:useBean>
這個行為,我們要使用Person類是這樣使用的
<%--這裡需要匯入Person類--%>
<%@ page import="domain.Person" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title></title>
</head>
<body>
<%
//new出物件
Person person = new Person();
person.setName("zhongfucheng");
System.out.println(person.getName());
%>
</body>
</html>
複製程式碼
- 效果如下
- 我們使用
<jsp:useBean>
就顯得非常簡潔,不用導包,不用new出物件
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title></title>
</head>
<body>
<jsp:useBean id="person" class="domain.Person" scope="page"/>
<%
person.setName("zhongfucheng");
System.out.println(person.getName());
%>
</body>
</html>
複製程式碼
- 也可以實現同樣的效果:
- 有人可能會想,憑什麼寫一個
<jsp:useBean>
這樣的程式碼就可以建立出一個物件出來。 - 現在我把JavaBean中無參的建構函式改成有參的,我們看看會出現什麼情況,出現異常了!
public Person(int age) {
this.age = age;
}
複製程式碼
<jsp:useBean id="person" class="domain.Person" scope="page"/>
內部原理是這樣子的:
- 通過上面的程式碼我們也知道了為什麼要有一個無參的建構函式!內部在new 物件的時候是沒有傳遞引數進去的!
jsp:setProperty
- 語法:
<jsp:setProerty name="物件名稱" property="屬性名" param="引數名" value="值">
複製程式碼
-
在語法上可分為4種模式
- <jsp:setProperty name="物件名稱" property="*"/>自動匹配
- <jsp:setProperty name="物件名稱" property="屬性名稱"/>指定屬性
- <jsp:setProperty name="物件名稱" property="屬性名稱" param="引數名稱"/>指定引數【很少用】
- <jsp:setProperty name="物件名稱" property="屬性名稱" value="內容"/>指定內容【很少用】
-
當我們沒有學習到
<jsp:setProperty>
時,我們獲取表單的資訊,然後匯入到javaBean物件中是這樣的一種情況: -
這是表單的頁面程式碼:
<form action="/zhongfucheng/1.jsp" method="post">
使用者名稱:<input type="text" name="username">
年齡:<input type="text " name="age">
<input type="submit" value="提交">
</form>
複製程式碼
- 這是處理表單提交過來資料的jsp的程式碼
<jsp:useBean id="person" class="domain.Person" scope="page"/>
<%
int age = Integer.parseInt(request.getParameter("age"));
person.setAge(age);
System.out.println(person.getAge());
%>
複製程式碼
- 這是可以完成的,但是相對來說,比較麻煩!
- 我們來使用jsp:setProperty了來看看:
<jsp:useBean id="person" class="domain.Person" scope="page"/>
<%--指定屬性名稱為age--%>
<jsp:setProperty name="person" property="age"/>
<%
System.out.println(person.getAge());
%>
複製程式碼
- 也可以完成,並且程式碼更少,功能更強大!
- 程式碼更少可以直觀看出來,為什麼我說它功能更加強大呢?表單提交過來的資料都是字串,在我們沒有用jsp:setProperty前,我們儲存設定int型別或其他非字串型別的資料是需要強轉的!但是jsp:setProperty不需要我們強轉,它內部自動幫我們轉換了!
- 我們再來使用一下自動匹配來感受它的強大之處吧
<jsp:useBean id="person" class="domain.Person" scope="page"/>
<%--property的值設定為*就代表自動匹配--%>
<jsp:setProperty name="person" property="*"/>
<%
System.out.println(person.getAge());
System.out.println(person.getName());
%>
複製程式碼
- 我們再來看一下效果:
- 看到這裡,有人可能會覺得好神奇:只要設定property的值就可以將表單傳遞過來的資料封裝到JavaBean物件中了!這究竟是這樣做到的???
- 細心的朋友會發現,JavaBean的屬性名稱和表單的name屬性設定的名稱是一模一樣的!
private String username ;
private int age;
使用者名稱:<input type="text" name="username">
年齡:<input type="text " name="age">
複製程式碼
- 如果我設定不一樣還能不能用?我們試試:表單name屬性的username改成是user
使用者名稱:<input type="text" name="user">
複製程式碼
- 我們再來看看還能不能把表單的資料完整地封裝JavaBean物件中
- 我們可以發現:要想能夠把表單帶過來的資料成功封裝到JavaBean物件上,名字要一致!也就是說:JavaBean屬性名要和表單的name的名稱一致
- 至於原理,它是通過反射來做的,呼叫了內省的方法!,我們看編譯後的JSP就明白了。
jsp:getProperty
-
語法:
- <jsp:getProperty name="物件名" property="屬性名"/>
-
該jsp行為十分簡單,我們來使用一下就知道了。
<%--使用<jsp:getProperty>輸出--%>
<jsp:getProperty name="person" property="username"/>
<jsp:getProperty name="person" property="age"/>
複製程式碼
- 效果:
- 原理如下
如果文章有錯的地方歡迎指正,大家互相交流。習慣在微信看技術文章的同學,可以關注微信公眾號:Java3y