1.5.4 字符串處理類
字符串處理類用來(lái)解決程序中經(jīng)常出現(xiàn)的有關(guān)字符串處理的問(wèn)題,在本系統(tǒng)的字符串處理類中,實(shí)現(xiàn)了轉(zhuǎn)換字符串中的HTML字符和將日期型數(shù)據(jù)轉(zhuǎn)換為字符串的兩種操作。下面介紹字符串處理類DoString的實(shí)現(xiàn)過(guò)程。
(1)創(chuàng)建轉(zhuǎn)換字符串中HTML字符的方法HTMLChange()。代碼如下:
例程21 代碼位置:光盤\TM\01\src\com\yxq\tools\DoString.java
public static String HTMLChange(String source){
String changeStr="";
changeStr=source.replaceAll("&","&"); //轉(zhuǎn)換字符串中的“&”符號(hào)
changeStr=changeStr.replaceAll(" "," "); //轉(zhuǎn)換字符串中的空格
changeStr=changeStr.replaceAll("<","<"); //轉(zhuǎn)換字符串中的“<”符號(hào)
changeStr=changeStr.replaceAll(">",">"); //轉(zhuǎn)換字符串中的“>”符號(hào)
changeStr=changeStr.replaceAll("\r\n","<br>"); //轉(zhuǎn)換字符串中的回車換行
return changeStr;
}
(2)創(chuàng)建轉(zhuǎn)換日期格式為String型的方法dateTimeChange()。代碼如下:
例程22 代碼位置:光盤\TM\01\src\com\yxq\tools\DoString.java
public static String dateTimeChange(Date source){
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String changeTime=format.format(source);
return changeTime;
}
該方法主要是調(diào)用java.text.SimpleDateFormat類來(lái)轉(zhuǎn)換日期型數(shù)據(jù)為String型。使用該類進(jìn)行轉(zhuǎn)換,首先需創(chuàng)建一個(gè)SimpleDateFormat類對(duì)象,在創(chuàng)建的同時(shí)指定了格式化日期為String后的格式為yyyy-MM-dd HH:mm:ss,即“年-月-日 時(shí):分:秒”,然后調(diào)用該類的format(java.util.Date date)方法將Date型轉(zhuǎn)換成String型。
1.6 前臺(tái)頁(yè)面設(shè)計(jì)
1.6.1 前臺(tái)頁(yè)面概述
頁(yè)面是用戶與程序進(jìn)行交互的接口,用戶可從頁(yè)面中查看程序顯示給用戶的信息,程序可從頁(yè)面中獲取用戶輸入的數(shù)據(jù),所以在進(jìn)行頁(yè)面的設(shè)計(jì)時(shí),不僅要從程序開(kāi)發(fā)的角度分析,還要考慮到頁(yè)面的美觀及布局。本系統(tǒng)的前臺(tái)頁(yè)面就充分考慮到了這些內(nèi)容,因此,本系統(tǒng)中所有的前臺(tái)頁(yè)面都采用一種頁(yè)面框架。該頁(yè)面框架采用二分欄結(jié)構(gòu),分為4個(gè)區(qū)域,即頁(yè)頭、側(cè)欄、頁(yè)尾和內(nèi)容顯示區(qū)。都市供求信息網(wǎng)的前臺(tái)首頁(yè)運(yùn)行效果如圖1.29所示。
1.6.2 前臺(tái)頁(yè)面的技術(shù)分析
實(shí)現(xiàn)前臺(tái)頁(yè)面框架的JSP文件為IndexTemp.jsp,該頁(yè)面的布局如圖1.30所示。
在本系統(tǒng)中,對(duì)前臺(tái)用戶所有請(qǐng)求的響應(yīng)都通過(guò)該框架頁(yè)面顯示。在IndexTemp.jsp文件主要采用include動(dòng)作和include指令來(lái)包含各區(qū)域所對(duì)應(yīng)的JSP文件。因?yàn)轫?yè)頭、頁(yè)尾和側(cè)欄是不變的,所以可以在框架頁(yè)面中事先指定;而對(duì)于內(nèi)容顯示區(qū)中的內(nèi)容則應(yīng)根據(jù)用戶的操作來(lái)顯示,所以該區(qū)域要顯示的頁(yè)面是動(dòng)態(tài)改變的,可通過(guò)一個(gè)存儲(chǔ)在request范圍內(nèi)的屬性值指定。例如,對(duì)用戶訪問(wèn)網(wǎng)站首頁(yè)的請(qǐng)求,可在處理該請(qǐng)求的類中向request中注冊(cè)一個(gè)屬性,并設(shè)置其值為default.jsp,這樣當(dāng)響應(yīng)返回到框架頁(yè)面后,可在頁(yè)面中獲取該值,根據(jù)該值加載相應(yīng)頁(yè)面;若用戶觸發(fā)了“發(fā)布信息”請(qǐng)求,則設(shè)置該屬性值為addInfo.jsp,此時(shí)在IndexTemp.jsp中就會(huì)顯示信息發(fā)布的頁(yè)面。
1.6.3 前臺(tái)頁(yè)面的實(shí)現(xiàn)過(guò)程
根據(jù)以上的頁(yè)面概述及技術(shù)分析,需要分別創(chuàng)建實(shí)現(xiàn)各區(qū)域的JSP文件,如實(shí)現(xiàn)頁(yè)頭的top.jsp、實(shí)現(xiàn)側(cè)欄的left.jsp、頁(yè)尾文件end.jsp和首頁(yè)中需要在內(nèi)容顯示區(qū)顯示的default.jsp等JSP文件。下面主要介紹框架頁(yè)面IndexTemp.jsp的實(shí)現(xiàn)。
以下為IndexTemp.jsp文件中的Scriptlet腳本程序:
例程23 代碼位置:光盤\TM\01\view\IndexTemp.jsp
<%@ taglib uri="/struts-tags" prefix="s2"%>
<%
? String path = request.getContextPath();
? String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
? String mainPage=(String)request.getAttribute("mainPage");
if(mainPage==null||mainPage.equals(""))
mainPage="default.jsp";
%>
U 代碼貼士
u 獲取上下文路徑,獲取的值以“/”開(kāi)頭,然后加上應(yīng)用名稱。
v 生成一個(gè)路徑,該路徑將被用于<base>HTML標(biāo)識(shí)中設(shè)置當(dāng)前路徑。其中g(shù)etScheme()方法用來(lái)獲取網(wǎng)絡(luò)協(xié)議,getServerName()方法用來(lái)獲取服務(wù)器名稱,getServerPort()方法用來(lái)獲取服務(wù)器端口。所以該行代碼最終會(huì)生成類似“https://localhost:8080/CityInfo/”的路徑。
? 獲取要在內(nèi)容顯示區(qū)中顯示的文件的路徑,默認(rèn)為defaulst.jsp,即與IndexTemp.jsp處于同一目錄下的default.jsp文件。mainPage變量將被作為<jsp:include>動(dòng)作標(biāo)識(shí)的屬性值。
以下為IndexTemp.jsp文件中實(shí)現(xiàn)頁(yè)面顯示的代碼:
例程24 代碼位置:光盤\TM\01\view\IndexTemp.jsp
<html>
<head>
<title>都市信息網(wǎng)</title>
? <base href="<%=basePath%>">
? <link type="text/css" rel="stylesheet" href="css/style.css">
</head>
<body background="images/back.gif">
<center>
<table>
<tr><td colspan="2"><jsp:include page="top.jsp"/></td></tr> <!-- 包含頁(yè)頭文件 -->
<tr>
<td><jsp:include page="left.jsp"/></td> <!-- 包含側(cè)欄文件 -->
? <td><jsp:include page="<%=mainPage%>"/></td>
</tr>
<tr><td colspan="2"><%@ include file="end.jsp" %></td></tr> <!-- 包含頁(yè)尾文件 -->
</table>
</center>
</body>
</html>
U 代碼貼士
u 通過(guò)<base>HTML標(biāo)識(shí)設(shè)置當(dāng)前路徑,這樣,在該頁(yè)面中的所有的URI(包括在該頁(yè)面中通過(guò)include指令與動(dòng)作標(biāo)識(shí)包含的其他頁(yè)面中的URI)都是相對(duì)于basePath指定的路徑。
v 通過(guò)<link>HTML標(biāo)識(shí)包含外部CSS樣式文件,其中href屬性用來(lái)指定文件位置。
? 通過(guò)include動(dòng)作標(biāo)識(shí)包含需要在內(nèi)容顯示區(qū)顯示的JSP文件。