<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] # 什么是 JavaBean JavaBean 是一個遵循特定寫法的 Java 類,它通常具有如下特點: * 這個 Java 類必須具有一個無參的構造函數。 * 屬性必須私有化。 * 私有化的屬性必須通過 public 類型的方法暴露給其它程序,并且方法的命名也必須遵守一定的命名規范。 ~~~ public class Person { //------------------Person類封裝的私有屬性--------------------------------------- private String name = "aaa"; // getClass() private int age; private Date birthday; //--------------------------------------------------------- //------------------Person類的無參數構造方法--------------------------------------- public Person() { super(); // TODO Auto-generated constructor stub } //--------------------------------------------------------- //------------------Person類對外提供的用于訪問私有屬性的public方法--------------------------------------- public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } //--------------------------------------------------------- } ~~~ JavaBean 在 J2EE 開發中,通常用于封裝數據,對于遵循以上寫法的 JavaBean 組件,其它程序可以通過反射技術實例化 JavaBean 對象,并且通過反射那些遵守命名規范的方法,從而獲知 JavaBean 的屬性,進而調用其屬性保存數據。 ## JavaBean 的屬性 JavaBean 的屬性可以是任意類型,并且一個 JavaBean 可以有多個屬性。每個屬性通常都需要具有相應的 setter、 getter 方法,setter 方法稱為屬性修改器,getter 方法稱為屬性訪問器。 屬性修改器必須以小寫的 set 前綴開始,后跟屬性名,且屬性名的第一個字母要改為大寫,例如,name 屬性的修改器名稱為 setName,password 屬性的修改器名稱為 setPassword。 屬性訪問器通常以小寫的 get 前綴開始,后跟屬性名,且屬性名的第一個字母也要改為大寫,例如,name 屬性的訪問器名稱為 getName,password 屬性的訪問器名稱為 getPassword。 一個 JavaBean 的某個屬性也可以只有 set 方法或 get 方法,這樣的屬性通常也稱之為只寫、只讀屬性。 # JSP 中使用 JavaBean JSP 技術提供了三個關于 JavaBean 組件的動作元素,即 JSP 標簽,它們分別為: * `<jsp:useBean>`標簽:用于在 JSP 頁面中查找或實例化一個 JavaBean 組件。 * `<jsp:setProperty>`標簽:用于在 JSP 頁面中設置一個 JavaBean 組件的屬性。 * `<jsp:getProperty>`標簽:用于在 JSP 頁面中獲取一個 JavaBean 組件的屬性。 ## `<jsp:useBean>`標簽 `<jsp:useBean>`標簽用于在指定的域范圍內查找指定名稱的 JavaBean 對象: * 如果存在則直接返回該 JavaBean 對象的引用。 * 如果不存在則實例化一個新的 JavaBean 對象并將它以指定的名稱存儲到指定的域范圍中 ~~~ <jsp:useBean id="beanName" class="package.class" scope="page|request|session|application"/> ~~~ * id 屬性用于指定 JavaBean 實例對象的引用名稱和其存儲在域范圍中的名稱。 * class 屬性用于指定 JavaBean 的完整類名(即必須帶有包名)。 * scope 屬性用于指定 JavaBean 實例對象所存儲的域范圍,其取值只能是 page、request、session 和 application 等四個值中的一個,其默認值是 page `<jsp:useBean>`標簽使用范例: ~~~ <%@ 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:userbean標簽的使用</title> </head> <body> <jsp:useBean id="person" class="cn.domain.Person" scope="page" /> <%=person.getName() %> </body> </html> ~~~ 運行結果如下: ![](https://box.kancloud.cn/2572ce631ea8fbda8768d7e3d30ebe6b_460x150.png) `<jsp:useBean>`執行原理 上面我們在 1.jsp 中使用 ~~~ <jsp:useBean id="person" class="cn.domain.Person" scope="page" /> ~~~ 實例化了一個 cn.domain.Person 類的對象,那么這個 person 對象是怎么實例化出來的呢?1.jsp 在執行的過程中首先會翻譯成一個 servlet,因此我們可以通過查看 1.jsp 頁面生成的 servlet 的 java 代碼來查看 person 對象的實例化過程。 找到 tomcat 服務器下的 “work\Catalina\localhost\項目名稱 \org\apache\jsp” 這個目錄,就可以看到將 1.jsp 頁面翻譯成 servlet 的 java 源碼了,如下所示: 使用 Sublime Text 打開_1_jsp.java 文件,在_jspService 方法中可以看到 person 對象的創建過程,如下所示: ~~~ cn.domain.Person person = null; person = (cn.itcast.domain.Person) _jspx_page_context.getAttribute("person", javax.servlet.jsp.PageContext.PAGE_SCOPE); if (person == null){ person = new cn.itcast.domain.Person(); _jspx_page_context.setAttribute("person", person, javax.servlet.jsp.PageContext.PAGE_SCOPE); } ~~~ 下面我們來分析一下上述生成的代碼: 首先是定義一個 person 對象,值是 null。 ~~~ cn.domain.Person person = null; // 定義一個空的person對象 ~~~ 然后是使用 pageContext 對象的 getAttribute 方法獲取存儲在 `PageContext.PAGE_SCOPE` 域中的 Person 對象。 ~~~ person = (cn.domain.Person) _jspx_page_context.getAttribute("person", javax.servlet.jsp.PageContext.PAGE_SCOPE); ~~~ 如果在 PageContext.PAGE_SCOPE 域中的 Person 對象沒有找到,那么就創建一個新的 person 對象,然后使用 pageContext 對象的 setAttribute 方法將新創建的 person 存儲在 PageContext.PAGE_SCOPE 域中。 ~~~ if (person == null){ person = new cn.itcast.domain.Person(); _jspx_page_context.setAttribute("person", person, javax.servlet.jsp.PageContext.PAGE_SCOPE); } ~~~ 也就是說,在 1.jsp 中使用 ~~~ <jsp:useBean id="person" class="cn.domain.Person" scope="page" /> ~~~ 來實例化 person 對象的過程實際上是執行了上述的 java 代碼來實例化 Person 對象。這就是`<jsp:useBean>`標簽的執行原理:” 首先在指定的域范圍內查找指定名稱的 JavaBean 對象,如果存在則直接返回該 JavaBean 對象的引用,如果不存在則實例化一個新的 JavaBean 對象并將它以指定的名稱存儲到指定的域范圍中。 注意:`<jsp:useBean>`標簽的標簽體只在`<jsp:useBean>`標簽實例化 bean 時才執行。 如以下 1.jsp 代碼: ~~~ <%@ 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:userbean標簽的使用</title> </head> <body> <!-- userbean標簽的標簽體只在userbean標簽實例化bean時才執行 --> <jsp:useBean id="person" class="cn.domain.Person" scope="page"> bbbbbb </jsp:useBean> <br/> <%=person.getName() %> </body> </html> ~~~ 運行結果如下: ![](https://box.kancloud.cn/9a4a6d8072d5f5272c53e732761197c5_351x145.png) 若將以上 1.jsp 代碼修改為: ~~~ <%@ 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:userbean標簽的使用</title> </head> <body> <!-- userbean標簽的標簽體只在userbean標簽實例化bean時才執行 --> <jsp:useBean id="person" class="cn.domain.Person" scope="session"> bbbbbb </jsp:useBean> <br/> <%=person.getName() %> </body> </html> ~~~ 第一次運行結果仍不變,但第二次運行時結果如下圖 ![](https://box.kancloud.cn/690ba333c5d6dd1917d3bfe98ea971a0_211x140.png) 原因是:第一次運行時,JavaBean 對象不存在則實例化一個新的 JavaBean 對象并將它以指定的名稱存儲到指定的域范圍 session 中;第二次運行時,在指定的域范圍 session 內就已經查找到指定名稱的 JavaBean 對象,所以不會再創建一個新的 JavaBean 對象,即`<jsp:useBean>`標簽的標簽體只在`<jsp:useBean>`標簽實例化 bean 時才執行。 帶標簽體的`<jsp:useBean>`標簽 語法: ~~~ <jsp:useBean ...> Body </jsp:useBean> ~~~ 功能:Body 部分的內容只在`<jsp:useBean>`標簽創建 JavaBean 的實例對象時才執行。以上例子已證明過 ## `<jsp:setProperty>`標簽 `<jsp:setProperty>`標簽用于設置和訪問 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 實例對象的屬性名。 * value 屬性用于指定 JavaBean 對象的某個屬性的值,value 的值可以是字符串,也可以是表達式。為字符串時,該值會自動轉化為 JavaBean 屬性相應的類型,如果 value 的值是一個表達式,那么該表達式的計算結果必須與所要設置的 JavaBean 屬性的類型一致。 * param 屬性用于將 JavaBean 實例對象的某個屬性值設置為一個請求參數值,該屬性值同樣會自動轉換成要設置的 JavaBean 屬性的類型。 `<jsp:setProperty>`標簽使用范例 1:使用 jsp:setProperty 標簽設置 person 對象的屬性值——手工為 bean 屬性賦值 。 ~~~ <%@ page language="java" import="java.util.*" 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標簽使用范例</title> </head> <body> <jsp:useBean id="person" class="cn.domain.Person" /> <%-- 使用jsp:setProperty標簽設置person對象的屬性值 jsp:setProperty在設置對象的屬性值時會自動把字符串轉換成8種基本數據類型 但是jsp:setProperty對于復合數據類型無法自動轉換 --%> <jsp:setProperty property="name" name="person" value="x"/> <jsp:setProperty property="age" name="person" value="23"/> <%-- birthday屬性是一個Date類型,這個屬于復合數據類型,因此無法將字符串自動轉換成Date ,用下面這種寫法是會報錯的 <jsp:setProperty property="birthday" name="person" value="1980-09-12"/> --%> <jsp:setProperty property="birthday" name="person" value="<%=new Date() %>"/> <%--使用getXxx()方法獲取對象的屬性值 --%> <h2>姓名:<%=person.getName() %></h2> <h2>年齡:<%=person.getAge() %></h2> <h2>生日:<%=person.getBirthday() %></h2> </body> </html> ~~~ `<jsp:setProperty`>標簽使用范例 2:使用請求參數為 bean 的屬性賦值。 ~~~ <%@ page language="java" import="java.util.*" 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標簽使用范例</title> </head> <body> <jsp:useBean id="person" class="cn.domain.Person" /> <%-- jsp:setProperty標簽可以使用請求參數為bean的屬性賦值 param="name"用于接收參數名為name的參數值,然后將接收到的值賦給name屬性 --%> <jsp:setProperty property="name" name="person" param="name"/> <%--使用getXxx()方法獲取對象的屬性值 --%> <h2>姓名:<%=person.getName() %></h2> </body> </html> ~~~ 又如: ~~~ <%@ page language="java" import="java.util.*" 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標簽使用范例</title> </head> <body> <jsp:useBean id="person" class="cn.domain.Person" /> <%-- jsp:setProperty標簽可以使用請求參數為bean的屬性賦值 --%> <jsp:setProperty property="name" name="person" param="name"/> <jsp:setProperty property="age" name="person" param="age"/> <%-- 支持8種基本數據類型的轉換(把客戶機提交的字符串,轉成相應的8種基本數據類型,賦到bean的屬性上) --%> <%--使用getXxx()方法獲取對象的屬性值 --%> <h2>姓名:<%=person.getName() %></h2> <h2>年齡:<%=person.getAge() %></h2> </body> </html> ~~~ `<jsp:setProperty>`標簽使用范例 3:用所有的請求參數為 bean 的屬性賦值。 ~~~ <%@ page language="java" import="java.util.*" 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標簽使用范例</title> </head> <body> <jsp:useBean id="person" class="cn.domain.Person" /> <%-- jsp:setProperty標簽用所有的請求參數為bean的屬性賦值 property="*"代表bean的所有屬性 --%> <jsp:setProperty property="*" name="person"/> <%--使用getXxx()方法獲取對象的屬性值 --%> <h2>姓名:<%=person.getName() %></h2> <h2>年齡:<%=person.getAge() %></h2> </body> </html> ~~~ 注意:請求參數的名稱和 bean 的屬性名稱一定要一致,內部用的是反射技術。 ## `<jsp:getProperty>`標簽 `<jsp:getProperty>`標簽用于讀取 JavaBean 對象的屬性,也就是調用 JavaBean 對象的 getter 方法,然后將讀取的屬性值轉換成字符串后插入進輸出的響應正文中。 語法: ~~~ <jsp:getProperty name="beanInstanceName" property="PropertyName" /> ~~~ * name 屬性用于指定 JavaBean 實例對象的名稱,其值應與<jsp:useBean>標簽的 id 屬性值相同。 * property 屬性用于指定 JavaBean 實例對象的屬性名。 如果一個 JavaBean 實例對象的某個屬性的值為 null,那么,使用`<jsp:getProperty>`標簽輸出該屬性的結果將是一個內容為 “null” 的字符串。 ~~~ <%@ page language="java" import="java.util.*" 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標簽使用范例</title> </head> <body> <jsp:useBean id="person" class="cn.domain.Person" /> <%-- 使用jsp:setProperty標簽設置person對象的屬性值 jsp:setProperty在設置對象的屬性值時會自動把字符串轉換成8種基本數據類型 但是jsp:setProperty對于復合數據類型無法自動轉換 --%> <jsp:setProperty property="name" name="person" value="李阿昀"/> <jsp:setProperty property="age" name="person" value="23"/> <%-- birthday屬性是一個Date類型,這個屬于復合數據類型,因此無法將字符串自動轉換成Date ,用下面這種寫法是會報錯的 <jsp:setProperty property="birthday" name="person" value="1980-09-12"/> --%> <jsp:setProperty property="birthday" name="person" value="<%=new Date() %>"/> <%--使用jsp:getProperty標簽獲取對象的屬性值 --%> <h2>姓名:<jsp:getProperty property="name" name="person"/></h2> <h2>年齡:<jsp:getProperty property="age" name="person"/></h2> <h2>生日:<jsp:getProperty property="birthday" name="person"/></h2> </body> </html> ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看