JSP第三篇【JavaBean的介紹、JSP的行爲--JavaBean】

什麼是javaBean

  • JavaBean就是一個普通的java類,也稱之爲簡單java對象–POJO(Plain Ordinary Java Object),是Java程序設計中一種設計模式,是一種基於 Java 平臺的軟件組件思想
  • JavaBean遵循着特定的寫法,一般有如下的規則:html

    • 有無參的構造函數
    • 成員屬性私有化
    • 封裝的屬性若是須要被外所操做,必須編寫public類型的setter、getter方法
  • 上面的文字看起來好像很高大上,javaBean其實很是簡單,下面的代碼就是按照特定寫法、規則編寫的一個JavaBean對象java

 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能夠使你的數據更有可讀性,方便開發時明確變量的意義,也使其餘閱讀你代碼的人能直接你的意圖web

若是把bean類與數據庫聯合使用,一張表使用bean類,能夠使你的代碼更加簡潔高效,易於理解,如今大多數框架都會使用這種機制。數據庫


JSP行爲–JavaBean

  • JSP技術提供了三個關於JavaBean組件的動做元素,即JSP行爲(標籤),它們分別爲:
    • 【在JSP頁面中查找javaBean對象或者實例化javaBean對象】
    • 【設置javaBean的屬性】
    • 【獲取javaBean的屬性】

<jsp:useBean>

  • <jsp:useBean>標籤用於在指定的域範圍內查找指定名稱的JavaBean對象設計模式

    • 存在則直接返回該JavaBean對象的引用
    • 不存在則實例化一個新的JavaBean對象並將它以指定的名稱存儲到指定的域範圍中
  • 語法:ruby

<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種模式markdown

    • 自動匹配
    • 指定屬性
    • 指定參數【不多用】
    • 指定內容【不多用】
  • 咱們沒有學習到<jsp:setProperty>,咱們獲取表單的信息,而後導入到javaBean對象中是這樣的一種狀況app

  • 這是表單的頁面代碼框架

<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:useBean id="person" class="domain.Person" scope="page"/>

    <%--指定屬性名稱爲age--%>
    <jsp:setProperty name="person" property="age"/>
    <%
        System.out.println(person.getAge());
    %>
  • 也能夠完成,而且代碼更少,功能更強大

  • 代碼更少能夠直觀看出來,爲何我說它功能更增強大呢?表單提交過來的數據都是字符串,在咱們沒有用前,咱們存儲設置int類型或其餘非字符串類型的數據是須要強轉的!可是不須要咱們強轉,它內部自動幫咱們轉換了
  • 咱們再來使用一下自動匹配來感覺它的強大之處吧
<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>

  • 語法:dom

  • 該jsp行爲十分簡單,咱們來使用一下就知道了。

<%--使用<jsp:getProperty>輸出--%>
    <jsp:getProperty name="person" property="username"/>
    <jsp:getProperty name="person" property="age"/>
  • 效果:

  • 原理以下

相關文章
相關標籤/搜索