1.5.4 字符串处理类
字符串处理类用来解决程序中经常出现的有关字符串处理的问题,在本系统的字符串处理类中,实现了转换字符串中的HTML字符和将日期型数据转换为字符串的两种操作。下面介绍字符串处理类DoString的实现过程。
(1)创建转换字符串中HTML字符的方法HTMLChange()。代码如下:
例程21 代码位置:光盘\TM\01\src\com\yxq\tools\DoString.java
public static String HTMLChange(String source){
String changeStr="";
changeStr=source.replaceAll("&","&"); //转换字符串中的“&”符号
changeStr=changeStr.replaceAll(" "," "); //转换字符串中的空格
changeStr=changeStr.replaceAll("<","<"); //转换字符串中的“<”符号
changeStr=changeStr.replaceAll(">",">"); //转换字符串中的“>”符号
changeStr=changeStr.replaceAll("\r\n","<br>"); //转换字符串中的回车换行
return changeStr;
}
(2)创建转换日期格式为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;
}
该方法主要是调用java.text.SimpleDateFormat类来转换日期型数据为String型。使用该类进行转换,首先需创建一个SimpleDateFormat类对象,在创建的同时指定了格式化日期为String后的格式为yyyy-MM-dd HH:mm:ss,即“年-月-日 时:分:秒”,然后调用该类的format(java.util.Date date)方法将Date型转换成String型。
1.6 前台页面设计
1.6.1 前台页面概述
页面是用户与程序进行交互的接口,用户可从页面中查看程序显示给用户的信息,程序可从页面中获取用户输入的数据,所以在进行页面的设计时,不仅要从程序开发的角度分析,还要考虑到页面的美观及布局。本系统的前台页面就充分考虑到了这些内容,因此,本系统中所有的前台页面都采用一种页面框架。该页面框架采用二分栏结构,分为4个区域,即页头、侧栏、页尾和内容显示区。都市供求信息网的前台首页运行效果如图1.29所示。
1.6.2 前台页面的技术分析
实现前台页面框架的JSP文件为IndexTemp.jsp,该页面的布局如图1.30所示。
在本系统中,对前台用户所有请求的响应都通过该框架页面显示。在IndexTemp.jsp文件主要采用include动作和include指令来包含各区域所对应的JSP文件。因为页头、页尾和侧栏是不变的,所以可以在框架页面中事先指定;而对于内容显示区中的内容则应根据用户的操作来显示,所以该区域要显示的页面是动态改变的,可通过一个存储在request范围内的属性值指定。例如,对用户访问网站首页的请求,可在处理该请求的类中向request中注册一个属性,并设置其值为default.jsp,这样当响应返回到框架页面后,可在页面中获取该值,根据该值加载相应页面;若用户触发了“发布信息”请求,则设置该属性值为addInfo.jsp,此时在IndexTemp.jsp中就会显示信息发布的页面。
1.6.3 前台页面的实现过程
根据以上的页面概述及技术分析,需要分别创建实现各区域的JSP文件,如实现页头的top.jsp、实现侧栏的left.jsp、页尾文件end.jsp和首页中需要在内容显示区显示的default.jsp等JSP文件。下面主要介绍框架页面IndexTemp.jsp的实现。
以下为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 获取上下文路径,获取的值以“/”开头,然后加上应用名称。
v 生成一个路径,该路径将被用于<base>HTML标识中设置当前路径。其中getScheme()方法用来获取网络协议,getServerName()方法用来获取服务器名称,getServerPort()方法用来获取服务器端口。所以该行代码最终会生成类似“https://localhost:8080/CityInfo/”的路径。
? 获取要在内容显示区中显示的文件的路径,默认为defaulst.jsp,即与IndexTemp.jsp处于同一目录下的default.jsp文件。mainPage变量将被作为<jsp:include>动作标识的属性值。
以下为IndexTemp.jsp文件中实现页面显示的代码:
例程24 代码位置:光盘\TM\01\view\IndexTemp.jsp
<html>
<head>
<title>都市信息网</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> <!-- 包含页头文件 -->
<tr>
<td><jsp:include page="left.jsp"/></td> <!-- 包含侧栏文件 -->
? <td><jsp:include page="<%=mainPage%>"/></td>
</tr>
<tr><td colspan="2"><%@ include file="end.jsp" %></td></tr> <!-- 包含页尾文件 -->
</table>
</center>
</body>
</html>
U 代码贴士
u 通过<base>HTML标识设置当前路径,这样,在该页面中的所有的URI(包括在该页面中通过include指令与动作标识包含的其他页面中的URI)都是相对于basePath指定的路径。
v 通过<link>HTML标识包含外部CSS样式文件,其中href属性用来指定文件位置。
? 通过include动作标识包含需要在内容显示区显示的JSP文件。