posts - 37, comments - 8, trackbacks - 0, articles - 0

          jsp程序設(shè)計(jì):JavaBean

          Posted on 2008-08-17 10:41 夢與橋 閱讀(664) 評論(0)  編輯  收藏 所屬分類: jsp程序設(shè)計(jì)

          一、JavaBean簡介:JavaBean是一個(gè)可重復(fù)使用的軟件部分,應(yīng)用JavaBean的主要目的是代碼重用,便于維護(hù)和管理。它實(shí)質(zhì)上是一個(gè)類,具有如下特性:
                  1、JavaBean是公共和具體的類。
                  2、構(gòu)造函數(shù)沒有輸入?yún)?shù)。
                  3、屬性必須聲明為private,方法必須聲明為public。
                  4、用一組set方法設(shè)置內(nèi)部屬性。
                  5、用一組get方法獲取內(nèi)部屬性。
                  6、JavaBean是一個(gè)沒有主方法的類,一般的Java類默認(rèn)繼承自O(shè)bject類,而Bean不需要這種繼承。
          二、編寫JavaBean:同編寫Java類很相似,然后編譯成為一個(gè)class文件,此文件將被JSP程序進(jìn)行調(diào)用。
              例子程序:

          package mybean;
          public class TestBean
          {
              
          private String  string1 = null;
              
          private String  string2 = null;
              
          public TestBean()
              
          {
              }

              
          public void setString1(String value)
              
          {
                  string1 
          = value;
              }

              
          public void setString2(String value)
              
          {
                  string2 
          = value;
              }

              
          public String getString1Value()
              
          {
                  
          return string1;
              }

              
          public String getString2Value()
              
          {
                  
          return string2;
              }

          }

          三、JSP中使用JavaBean:JavaBean和JSP技術(shù)的結(jié)合不僅可以實(shí)現(xiàn)表現(xiàn)層和商業(yè)邏輯層的分離,而且可以提高JSP程序的運(yùn)行效率和代碼重用程序,還可以實(shí)現(xiàn)并行開發(fā),是JSP編程中常用的技術(shù)。在JSP中提供了<jsp:useBean>、<jsp:setProperty>和<jsp:getProperty>動(dòng)作元素實(shí)現(xiàn)對JavaBean的操作。
              1、<jsp:useBean>可以定義一個(gè)具有一定生存范圍以及一個(gè)唯一id的JavaBean的實(shí)例,JSP頁面通過指定的id來識別JavaBean,也可以通過id.method語句來調(diào)用JavaBean中的方法。在執(zhí)行過程中,<jsp:usebean>首先嘗試尋找已經(jīng)存在的具有相同id和scope值的JavaBean實(shí)例,如果沒有就會(huì)自動(dòng)創(chuàng)建一個(gè)新的實(shí)例。其語法如下:

          <jsp:userBean id="beanName"  scope="page|request|session|appplication" class="packageName.className"/>

                注:屬性scope之四種范圍: 頁面、 請求、 對話、 應(yīng)用。
                對話范圍:
                對話范圍的JavaBean 主要應(yīng)用與跨多個(gè)頁面和時(shí)間段: 例如填充用戶信息。 添加信息并且接受回饋,保存用戶最近執(zhí)行頁面的軌跡。對話范圍JavaBean保留一些和用戶對話 ID 相關(guān)的信息。這些信息來自臨時(shí)的對話cookie,并在當(dāng)用戶關(guān)閉瀏覽器時(shí),這個(gè)cookie將從客戶端和服務(wù)器刪除。
                頁面/請求范圍:
                頁面和請求范圍的JavaBean有時(shí)類似表單 的bean , 這是因?yàn)?他們大都用與處理表單。表單需要很長的時(shí)間來處理用戶的輸入,通常情況下用于頁面接受HTTP/POST或者GET請求。另外頁面和請求范圍的bean可以用于減少大型站點(diǎn)服務(wù)器上的負(fù)載,如果使用對話bean,耽擱的處理就可能會(huì)消耗掉很多資源。
                應(yīng)用:
                應(yīng)用范圍通常應(yīng)用于服務(wù)器的部件,例如 JDBC 連接池、應(yīng)用監(jiān)視、用戶計(jì)數(shù)和其他參與用戶行為的類。
                在Bean中限制HTML的產(chǎn)生:
                理論上,JavaBean 將不會(huì)產(chǎn)生任何HTML,因?yàn)檫@是jsp層負(fù)責(zé)的工作;然而,為了動(dòng)態(tài)消息提供一些預(yù)先準(zhǔn)備的格式是非常有用的。產(chǎn)生的HTML將被標(biāo)注的 JavaBean方法返回。
                這里有一些非常重要的事情:
                (1.)不要試圖在JavaBean返回的HTML中放置任何字體尺寸。
                并不是所有的瀏覽器都相同。很多瀏覽器無法處理完整的字體尺寸。 
                (2).不要試圖在JavaBean返回的HTML中放置任何腳本或者DHTML。
                向頁面直接輸出腳本或者DHTML相當(dāng)于自我毀滅,因?yàn)槟承g覽器版本在處理不正確的腳本時(shí)會(huì)崩潰(非常少但是有)。如果用戶的JavaBean在運(yùn)行時(shí)是動(dòng)態(tài)的推出復(fù)雜的HTML語言,用戶將陷入調(diào)試的噩夢。另外,復(fù)雜的HTML將限制JavaBean的壽命和靈活性。
                (3).不要提供任何的選擇。
                如果用戶使用不同的系統(tǒng)瀏覽頁面,可以提供一種可以替換的方法。
               2、<jsp:setProperty>:可以設(shè)置Bean的屬性值,基本語法格式如下:

          <jsp:setProperty 
          name="beanInstanceName" 

          property
          = "*" |
          property
          ="propertyName" [ param="parameterName" ] |
          property
          ="propertyName" value="{string / <%= expression %>}" 

          /> 
             3、<jsp:getProperty>:可以得到Bean的屬性值,基本語法格式如下:
          <jsp:getProperty name="beanInstanceName" property="propertyName" /> 
          注意:§在Tomcat服務(wù)器中使用JavaBean,必須將Bean文件存放在一個(gè)包中,否則JSP無法訪問,所以第一條語句有類似package myBean的形式。
                      §在Tomcat服務(wù)器中使用JavaBean,必須將編譯好的Bean存放在應(yīng)用程序文件夾下的classes文件夾中。
                      §如果javaBean進(jìn)行了修改,必須重新啟動(dòng)Tomcat服務(wù)器,JavaBean才能被正確地調(diào)用。
          四、JavaBean與HTML表單的交互:jsplogin.htm提供用戶錄界面;jsploginBean.jsp通調(diào)用LoginBean中的check方法實(shí)現(xiàn)登錄驗(yàn)證;LoginBean.java為登錄Bean。
          jsphogin.html code:
          <html>
          <head>
          <title>用戶登錄</title>
          </head>
          <body>
          <form name="form1" onsubmit="return check()"  method="post" action="jsploginBean.jsp">
            
          <table width="80%"  border="0" align="center" bgcolor="#0099FF">
              
          <tr>
                
          <th colspan="2" scope="col">&nbsp;用戶登錄</th>
              
          </tr>
              
          <tr bgcolor="#FFFFFF">
                
          <th scope="row">用戶名:</th>
                
          <td><input name="name" type="text" id="name"></td>
              
          </tr>
              
          <tr bgcolor="#FFFFFF">
                
          <th scope="row">密碼:</th>
                
          <td><input name="pass" type="password" id="pass"></td>
              
          </tr>
              
          <tr bgcolor="#FFFFFF">
                
          <th scope="row">&nbsp;</th>
                
          <td><input type="submit" name="Submit" value="提交">
                
          <input type="reset" name="Reset" value="重置"></td>
              
          </tr>
            
          </table>
          </form>
          </body>
          </html>
          <script type="text/javascript">
          function check()
          {
            
          if (form1.name.value=="")
            
          {
              alert(
          "請輸入用戶名!!!");
              form.name.focus();
              
          return false;
            }

            
          if (form1.pass.value=="")
            
          {
              alert(
          "請輸入密碼!!!");
              form.pass.focus();
              
          return false;
            }

          }

          </SCRIPT>

          jsploginBean.jsp code
          <%@ page contentType="text/html; charset=GB2312"%>
          <jsp:useBean id="login" scope="page" class="mybean.LoginBean" />
          <jsp:setProperty name="login" property="*" />
          <%
          int iResult = login.check();
          if(iResult==1){ 
          %>
          <h2>歡迎<%=login.getName()%>進(jìn)入Easy_Buy電子商城</h2>
          <%
          }
          if(iResult==0){
          %>
          <h2>登錄失敗!點(diǎn)擊<href="javascript:history.back(-1);">這里</a>重新登錄!</h2> 
          <%
          }
          %>
          //LoginBean.java code
              package mybean;
          public class LoginBean
          {
              
          private String name=null;
              
          private String pass=null;
              
          public LoginBean()
              
          {
              }

              
          public void setName(String value)
              
          {
                  name
          =value;
              }

              
          public void setPass(String value)
              
          {
                  pass
          =value;
              }

              
          public String getName()
              
          {
                  
          return name;
              }

              
          public String getPass()
              
          {
                  
          return pass;
              }

              
          public int check()
              
          {
                  
          try
                  
          {
                      Class.forName(
          "sun.jdbc.odbc.JdbcOdbcDriver");
                      String strConn
          ="jdbc:odbc:shopData";
                      String strUser
          ="sa";
                      String strPassword
          ="";
                      conn
          =DriverManager.getConnection(strConn,strUser,strPassword);
                      Statement stat
          =conn.createStatement();
                      String strSql
          ="SELECT COUNT(*) FROM admin WHERE a_name='"+name+"' and a_pass='"+pass+"'";
                      ResultSet result
          =stat.executeQuery(strSql);
                      result.next();
                      
          if(result.getInt(1)==1)
                      
          {
                          
          return 1;
                      }

                      
          else
                      
          {
                          
          return 0;
                      }

                  }

                  
          catch(ClassNotFoundException e)
                  
          {
                      out.println(e.getMessage());
                  }

                  
          catch(SQLException e)
                  
          {
                      out.println(e.getMessage());
                  }

                  
          finally
                  
          {
                      
          try
                      
          {
                          
          if (conn!=null)
                              conn.close();
                      }

                      
          catch(Exception e){}
                  }
                  
              }

          }
          JSP頁面中調(diào)用JavaBean的一般操作方法:
                  (1)編寫實(shí)現(xiàn)特定功能的JavaBean
                  (2)應(yīng)用<jsp:useBean>在JSP頁面中聲明并初始化JavaBean
                  (3)調(diào)用JavaBean提供的public方法或者直接使用<jsp:getProperty>來得到JavaBean中屬性的值
                  (4)調(diào)用JavaBean中的特定方法完成指定的功能    
          附:
              set path=%path%; d:/wzz/bin   設(shè)置path變量,只對當(dāng)前窗口有效
              jar cf class.jar *.class 將當(dāng)前目錄下的所有.class文件打包成jar文件
              jar cf class.jar wzz/w/z/*.class 將wzz/w/z/目錄下的所有.class文件打包成jar文件
              把類文件拷到Tomcat安裝目錄的"common/classes"目錄中,則對WEB站點(diǎn)中的所有WEB應(yīng)用都有效(需要重啟Tomcat);如果把jar包拷到web應(yīng)用的"WEB-INF/classes"目錄中,則此web應(yīng)用有效。
              把jar包拷到Tomcat安裝目錄的"common/lib"目錄中,則對WEB站點(diǎn)中的所有WEB應(yīng)用都有效(需要重啟Tomcat);如果把jar包拷到web應(yīng)用的"WEB-INF/lib"目錄中,則此web應(yīng)用有效。
          主站蜘蛛池模板: 罗平县| 定兴县| 龙江县| 福海县| 剑河县| 买车| 万安县| 司法| 准格尔旗| 尼玛县| 青河县| 涞源县| 泾源县| 哈巴河县| 新疆| 界首市| 潢川县| 南漳县| 蕲春县| 永泰县| 汪清县| 若羌县| 夹江县| 吴江市| 乌鲁木齐市| 兴山县| 本溪| 渝中区| 如皋市| 金川县| 梨树县| 三台县| 大同县| 湄潭县| 宜川县| 松原市| 浙江省| 七台河市| 成武县| 丹棱县| 余庆县|