在JSP中應用JavaBean


1. 解決中文亂碼的JavaBean

在JSP頁面中,處理中文字符經常會出現字符亂碼的現象,特別是通過表單傳遞中文數據時容易產生。它的解決辦法有很多,如將request的字符集指定為中文字符集,編寫JavaBean對亂碼字符進行轉碼等。下面就通過實例編寫JavaBean對象來解決中文亂碼問題。

例1.1 本實例通過編寫對字符轉碼的JavaBean,來解決在新聞發布系統中,發布中文信息的亂碼現象,其開發步驟如下。

(1)創建名稱為News的類,將其放置於com.cn.gao包中,實現對新聞信息實體對象的封裝。關鍵代碼如下:

package com.cn.gao;

public class News {
    private String title;
    private String content;
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
}

(2)創建對字符編碼進行處理的JavaBean,它的名稱為CharactorEncoding。在該類中編寫toString()方法對字符編碼進行轉換。關鍵代碼如下:

package com.cn.gao;

import java.io.UnsupportedEncodingException;

public class CharactorEncoding {
    public CharactorEncoding(){
        
    }
    /**
     * 對字符進行轉碼處理
     * @param str 要轉碼的字符串
     * @return 編碼后的字符串
     */
    public String toString(String str){
        //轉換字符
        String text = "";
        //判斷要轉碼的字符串是否有效
        if(str!=null&&!"".equals(str)){
            try {
                //將字符串進行編碼處理
                text = new String(str.getBytes("ISO-8859-1"),"UTF-8");
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return text;
    }
}

CharactorEncoding類通過toString()方法對字符串參數進行編碼,實例中將編碼設置為UTF-8,因為在JSP頁面中的編碼也是UTF-8,這里將其進行統一。

String類的getBytes()方法的作用,是按給定的字符編碼將此字符串編碼到byte序列,並將結果存儲到新的byte數組;而String類的構造方法String(byte[] bytes,Charset charset)是通過使用指定的字符編碼解碼指定的byte數組,構造一個新的字符串,實例中應用這兩個方法,實現了構造UTF-8編碼的字符串。

(3)創建名稱為news.jsp的頁面,它是程序中的主頁面,用於放置發布新聞信息的表單。關鍵代碼如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'news.jsp' starting page</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>
  
  <body>
    <form action="release.jsp" method="post">
        <table align="center" width="450" height="260" border="1">
            <tr>
                <td align="center" colspan="2" height="40">
                    <b>新聞發布</b>
                </td>
            </tr>
            <tr>
                <td align="right">標  題:</td>
                <td>
                    <input type="text" name="title" size="30"/>
                </td>
            </tr>
            <tr>
                <td align="right">內  容:</td>
                <td>
                    <textarea name="content" rows="8" cols="40"></textarea>
                </td>
            </tr>
            <tr>
                <td align="center" colspan="2">
                    <input type="submit" value="發  布"/>
                </td>
            </tr>
        </table>
    </form>
  </body>
</html>

(4) 創建名稱為release.jsp的頁面,用於對發布新聞信息的表單請求進行處理。關鍵代碼如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'release.jsp' starting page</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>
  
  <body>
    <jsp:useBean id="news" class="com.cn.gao.News"></jsp:useBean>
    <jsp:useBean id="encoding" class="com.cn.gao.CharactorEncoding"></jsp:useBean>
    <jsp:setProperty property="*" name="news"/>
    <div align="center">
        <div id="container">
            <div id="title">
                <%=encoding.toString(news.getTitle()) %>
            </div>
            <hr/>
            <div id="content">
                <%=encoding.toString(news.getContent()) %>
            </div>
        </div>
    </div>
  </body>
</html>

 2. 在JSP頁面中用來顯示時間的JavaBean

JavaBean是用java語言所寫的可重用組件,它可以是一個實體類對象,也可以是一個業務邏輯的處理,但編寫JavaBean要遵循JavaBean規范。下面通過實例在JSP頁面中調用獲取當前時間的JavaBean。

例2.1 創建獲取當前時間的JavaBean對象,該對象既可以獲取當前的日期及時間,同時可以獲取今天是星期幾。通過在JSP頁面調用該JavaBean對象,實現在網頁中創建一個簡易的電子時鍾。

(1)創建名稱為DateBean的類,將其放置於com.cn.gao包中,主要對當前時間、星期進行封裝。關鍵代碼如下:

package com.cn.gao;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import sun.java2d.pipe.SpanShapeRenderer.Simple;

public class DateBean {
    private String dateTime;
    private String week;
    private Calendar calendar = Calendar.getInstance();
    /**
     * 獲取當前日期及時間
     * @return 日期及時間的字符串
     */
    public String getDateTime() {
        //獲取當前時間
        Date currDate = Calendar.getInstance().getTime();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日   HH點mm分ss秒");
        //格式化日期時間
        dateTime = sdf.format(currDate);
        return dateTime;    
    }
    /**
     * 獲取星期幾
     * @return 返回星期字符串
     */
    public String getWeek() {
        String[] weeks = {"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
        int index = calendar.get(Calendar.DAY_OF_WEEK);
        week = weeks[index-1];
        return week;
    }
}

(2)創建名稱為clock.jsp的頁面,它是程序中的主頁。在clock.jsp頁面中實例化DateBean對象,並獲取當前日期時間及星期實現電子時鍾效果。關鍵代碼如下:

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
    <title>電子時鍾</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  <style type="text/css">
      #clock{
          width:420px;
          height:80px;
          background:#E0E0E0;
          font-size:25px;
          font-weight:bold;
          border:solid 5px orange;
          padding:20px;
      }
      #week{
          padding-top:15px;
          color:#0080FF;
      }
  </style>
  <meta http-equiv="Refresh" content="1"/>
  </head>
  <body>
    <jsp:useBean id="date" class="com.cn.gao.DateBean" scope="application"></jsp:useBean>
    <div align="center">
        <div id="clock">
            <div id="time">
                <jsp:getProperty property="dateTime" name="date"/>
            </div>
            <div id="week">
                <jsp:getProperty property="week" name="date"/>
            </div>
        </div>
    </div>
  </body>
</html>

 程序運行效果如下:

3. 數組轉換成字符串

在程序開發中,將數組轉換成為字符串是經常被用到的,如表單中的復選框按鈕,在提交之后就是一個數組對象,由於數組對象在業務處理中不方便,所以在實際應用中通過將其轉換成字符串后再進行處理。

例3.1 創建字符串轉換成數組的JavaBean,實現對“問卷調查”表單中復選框的數值的處理。

(1)創建名稱為Paper的類,將其放置於com.cn.gao包中,對調查問卷進行封裝。關鍵代碼如下:

package com.cn.gao;

import java.io.Serializable;

public class Paper implements Serializable {
    private static final long serialVersionUID = 1L;
    //定義保存編程語言的字符串數組
    private String[] languages;
    //定義保存掌握技術的字符串數組
    private String[] technics;
    //定義保存困難部分的字符串數組
    private String[] parts;
    public Paper(){
        
    }
    public String[] getLanguages() {
        return languages;
    }
    public void setLanguages(String[] languages) {
        this.languages = languages;
    }
    public String[] getTechnics() {
        return technics;
    }
    public void setTechnics(String[] technics) {
        this.technics = technics;
    }
    public String[] getParts() {
        return parts;
    }
    public void setParts(String[] parts) {
        this.parts = parts;
    }
    
}

(2)創建將數組轉換成字符串的JavaBean對象,它的名稱為Convert。在該類中編寫arr2Str()方法,將數組對象轉換成為指定格式的字符串。關鍵代碼如下:

package com.cn.gao;

public class Convert {
    /**
     * 將數組轉換成為字符串
     * @param arr 數組
     * @return 字符串
     */
    public String arr2Str(String[] arr){
        StringBuffer sb = new StringBuffer();
        if(arr!=null&&arr.length>0){
            for(String s:arr){
                sb.append(s);
                sb.append(",");
            }
            if(sb.length()>0){
                sb = sb.deleteCharAt(sb.length() - 1);
            }
        }
        return sb.toString();
    }
}

(3)創建程序中的首頁dcwj.jsp,在該頁面中放置調查問卷所使用的表單。關鍵代碼如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'dcwj.jsp' starting page</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>
  
  <body>
    <form action="reg.jsp" method="post">
        <div>
            <h1>調查問卷</h1>
            <hr/>
            <ul>
                <li>你經常用哪些編程語言開發程序:</li>
                <li>
                    <input type="checkbox" name="languages" value="JAVA"/>JAVA
                    <input type="checkbox" name="languages" value="PHP"/>PHP
                    <input type="checkbox" name="languages" value=".NET"/>.NET
                    <input type="checkbox" name="languages" value="VC++"/>VC++
                </li>
            </ul>
            <ul>
                <li>你目前所掌握的技術:</li>
                <li>
                    <input type="checkbox" name="technics" value="HTML"/>HTML
                    <input type="checkbox" name="technics" value="JAVA BEAN"/>JAVA BEAN
                    <input type="checkbox" name="technics" value="JSP"/>JSP
                    <input type="checkbox" name="technics" value="SERVLET"/>SERVLET
                </li>
            </ul>
            <ul>
                <li>在學習中哪一部分感覺有困難:</li>
                <li>
                    <input type="checkbox" name="parts" value="JSP"/>JSP
                    <input type="checkbox" name="parts" value="STRUTS"/>STRUTS
                </li>
            </ul>
            <input type="submit" value="提  交"/>
        </div>
    </form>
  </body>
</html>

(4)創建名稱為reg.jsp的頁面,用於對dcwj.jsp頁面表單提交請求進行處理,將用戶所提交的調查問卷結果輸出到頁面中。關鍵代碼如下:

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'reg.jsp' starting page</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>
  
  <body>
    <jsp:useBean id="paper" class="com.cn.gao.Paper"></jsp:useBean>
    <jsp:useBean id="convert" class="com.cn.gao.Convert"></jsp:useBean>
    <jsp:setProperty property="*" name="paper"/>
    <div>
           <h1>調查結果</h1>
           <hr/>
           <ul>
               <li>
                   經常用哪些編程語言:<%=convert.arr2Str(paper.getLanguages()) %>
               </li>
               <li>
                   你目前所掌握的技術:<%=convert.arr2Str(paper.getTechnics()) %>
               </li>
               <li>
                   在學習中哪一部分感覺有困難:<%=convert.arr2Str(paper.getParts()) %>
               </li>
           </ul>
   </div>
  </body>
</html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM