下面开始设计与实现每个子模块。
公共模块中一共有4个JSP文件和一个CSS文件:“common.jsp”、“check.jsp”、“header.jsp”、“footer.jsp”和“style.css”。以下开始详细说明各个文件的功能。基本界面如下:
4 . 2 . 1 “common.jsp”文件
“common.jsp”文件包含其他JSP文件中需要导入的Java类和包以及系统各页面要使用的日期。“common.jsp”文件的程序如下:
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.sql.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<%@ page import="xiaoquxinxi.*"%>
<%
java.util.Date cur_time = new java.util.Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(cur_time);
SimpleDateFormat _formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String _dateString = _formatter.format(cur_time);
%>
说明:程序除了将常用的Java包和类包含近来外,还将自定义包xiaoquxinxi包含进来,这个包有2个JavaBean程序:DBConnectionManer、DBSQLManager。程序定义了两个String类型变量:String和_dateString,前者是表示当前系统日期,后者表示当前系统日期时间。
4 . 2 . 2“ check.jsp”文件
“check.jsp”文件用来判断系统用户是否登陆,防止非法用户登陆到系统对系统进行破坏,其程序如下:
<% if((String)session.getValue("Enter")!="true")
{ String errmsg="error2";
response.sendRedirect("login.jsp?errmsg="+errmsg); }
%>
程序代码中使用了会话(session)对象。会话对象类似与普遍应用程序中的全局变量。在一个Web应用程序中,当一个用户访问该应用程序时,这个会话对象使这个用户在该Web应用的所有页面共享数据。可以使用putValue()和getValue()方法来保存和读取会话对象中的数据。上代码中通过读取会话对象中的数据Enter是否为Ture来判断系统管理员是否登陆。系统管理员在成功登陆后会将Enter数据保存为Ture。“check.jsp”文件主要用在系统后台管理页面中。
4 . 2 . 3“ header.jsp”和“ footer.jsp”文件
为了使小区物业管理系统的所有页面具有统一的风格,把页面头和尾的代码分开,分别放在单独的JSP文件中,在其他页面中使用时,利用include指令将他们包含进来即可。这样可以简化页面的重复代码,为以后的管理和维护工作提供方便。
“header.jsp”文件程序如下:
<%@ page contentType="text/html;charset=gb2312" %>
<style type="text/css">
<!--.style1 {color: #0000CC}a:link {text-decoration: none;
}a:visited {text-decoration: none;}
a:hover {text-decoration: underline;}a:active {text-decoration: none;
}.style2 {font-size: 12px}.style3 {color: #0000CC;font-size: 12px;
font-weight: bold;}--></style><div align="center">
<div align="center"> <table width="700" border="1" cellpadding="0" cellspacing="0" bordercolor="#CCCCCC"> <tr> <td width="108" height="90" align="center" bgcolor="#FFFF99"><img src="../img/logo1.jpg" width="107" height="75"><br> </td> <td width="513" align="center"><img src="../img/xiaoqu.jpg" width="512" height="87"></td> <td width="71" align="center" bgcolor="#CC9900"> <a href="admin/login.jsp"><strong>网站管理</strong></a></td </tr></table> <table width="700" border="1" cellpadding="0" cellspacing="0" bordercolor="#CCCCCC"><tr bgcolor="#FFAC03"><td width="152"><div align="center"><a href="index.jsp" class="style1"><strong>首页</strong></a></div></td><td width="178"><div align="center" class="style1 style2"><a href="xiaoqugonggao.jsp" target="_blank"><strong>小区公告</strong></a></div></td><td width="178" align="right" bgcolor="#FFAC03"><div align="center"><a href="xiaoquliuyan.jsp" target="_blank" class="style2"><strong>小区留言</strong></a></div> <div align="center"></div> <div align="center"></div></td> <td width="164" align="right"><div align="center"><span class="style3">当前日期</span>:<%=dateString%></div></td> </tr> </table></div>
“footer.jsp”文件程序如下:
<%@ page contentType="text/html;charset=gb2312" %>
<style type="text/css"><!--.style1 {font-size: 16;font-weight: bold;color: #993333;}--></style><br><table width="700" border="0" cellspacing="0" cellpadding="0"><tr><td height="79" align="center"><p align="left" class="style1 ">姓名:李凯 学号:20034707 </p><p align="left" class="style1 ">毕业设计选题(JSP+SQL SERVER2000实现的小区物业管理系统)</p> <p align="left" class="style1 ">Email:<a href="mailto:likai0221@126.com">likai0221@126.com</a></p></td></tr>
</table></div>
4 . 2 . 4“style.css”文件
在“style.css”文件中,可以定义Web应用程序用到的所有样式表,其程序如下:
A:link {FONT-SIZE: 9pt; COLOR: #000000; TEXT-DECORATION: underline
}A:hover {FONT-SIZE: 9pt; COLOR: #ff0000; TEXT-DECORATION: underline
}A:visited {FONT-SIZE: 9pt; COLOR: #0000ff; TEXT-DECORATION: underline
}.text {FONT-SIZE: 9pt; COLOR: #000000; TEXT-DECORATION: none
}.title {FONT-SIZE: 16px; COLOR: #000000; TEXT-DECORATION: none
}.body {FONT-SIZE: 12pt; COLOR: #000000; TEXT-DECORATION: none
}body {background-image: url(../images/wd.jpg);
}
其中,A(锚)元素是在样式表中用的最多的元素,它表示动态链接的4种不同的状态:link(未访问的链接)、hover(鼠标在链接上)、active(激活链接)、visited(已访问的链接)。程序中定义了链接在其中3个状态时显示的格式:未访问的链接是黑色(COLOR属性为“#000000”)、有下划线(TEXT-DECORATION属性为“underline”),鼠标指针放在链接上时,链接是红色(COLOR属性为“ff0000”),有下划线(TEXT-DECORATION属性为“underline”),已经访问的链接是蓝色(COLOR属性为“0000ff”)、有下划线(TEXT-DECORATION属性为“underline”)。
FONT-SIZE属性是用来定义字体大小。COLOR属性是设置颜色。
CSS脚本中还声明了三个类:text、title、body,及制作了三个新的样式表示符在本系统Web应用程序中使用。
4 . 2 . 5 建立与数据库相关的JavaBean文件
DBConnectionManager.java程序如下:
package xiaoquxinxi;import java.sql.*;public class DBConnectionManager {
private String driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
private String url = "jdbc:microsoft:sqlserver://localhost:1433;databaseName=xiaoquxinxi";
private String user = "sa";private String password = "123";
public void setDriverName(String newDriverName) {this.driverName = newDriverName; }
public String getDriverName() {return driverName;}
public void setUrl(String newUrl) { this.url = newUrl;}
public String getUrl() { return url; }
public void setUser(String newUser) { this.user = newUser;}
public String getUser() {return user;}
public void setPassword(String newPassword) { this.password = newPassword;}
public String getPassword() { return password; }
public Connection getConnection() {try { Class.forName(driverName); return DriverManager.getConnection(url, user, password); } catch (Exception e) { e.printStackTrace(); return null; } }}
程序定义了驱动类型名称变量driverName和连接字符串变量url,并给它们赋初值,表示当前连接SQL Server2000数据库xiaoquxinxi。getConnection()方法用于获得数据库连接实例。最后编译程序得到类文件DBConnectionManager.class
DBSQLManager.java程序如下:
package xiaoquxinxi;import java.sql.*;import xiaoquxinxi.*;public class DBSQLManager{protected Connection conn = null; //Connection对象protected Statement stmt = null; //Statement对象protected ResultSet rs = null; //记录结果集protected String sqlStr; //SQL语句public DBSQLManager() {
try{sqlStr = "";DBConnectionManager dcm = new DBConnectionManager();conn = dcm.getConnection();stmt = conn.createStatement();}catch (Exception e) {System.out.println(e); }}public Statement getStmt() {return stmt; }public Connection getConn() { return conn;}public ResultSet getRs() { return rs;}public void setSqlStr(String newSqlStr) { this.sqlStr=newSqlStr; }
public String getSqlStr() {return sqlStr;}public void executeQuery() throws Exception {rs = stmt.executeQuery(sqlStr);}public void executeUpdate() throws Exception {stmt.executeUpdate(sqlStr);}public void close() throws SQLException {
if ( stmt != null ) {stmt.close();stmt = null;} conn.close(); conn = null;}};
最后编译得到类文件DBSQLManager.class
最后将文件DBConnectionManager.class;DBSQLManager.class 拷贝到Tomcat服务器中本程序相应目录下。
4 . 4 . 1 管理员登陆口“login.jsp”页面 管理员入口代码如下: <%@ page contentType="text/html;charset=gb2312" %> <%@ include file="../incoming/common.jsp"%> <html><head><title>小区管理</title> <link href="../incoming/style.css" rel="stylesheet" type="text/css"> <script language="javascript"> function checkform() { if (form1.userid.value.length<1 || form1.userid.value.length>15){ alert("请输入正确的用户名!"); form1.userid.focus(); return false;} if (form1.password.value.length<1 || form1.password.value.length>15){ alert("请输入正确的密码!");form1.password.focus(); return false;}return true;}</script></head><body> <div align="center"><br><a class="title">管理员登录</a><br> </div><form name="form1" method="post" action="chklogin.jsp"> <table width="398" height="215" border="1" align="center" cellpadding="0" cellspacing="0"><tr> <td width="394" height="213"><table width="91%" height="80%" border="0" align="center" cellpadding="1" cellspacing="1"> <tr> <td colspan="2" align="center"><font color="#CC3333"> <% if(request.getParameter("errmsg")!=null) { String errmsg = request.getParameter("errmsg"); if(errmsg.equals("error1")) out.print("您输入的用户名或密码不正确,请重新输入!"); }%> </font></td> </tr><tr><td width="120" align="right">用户名:</td> <td width="208"> <input name="userid" type="text" id="userid" size="15" maxlength="20" > </td> </tr> <tr> <td width="120" align="right">密码:</td> <td width="208"> <input name="password" type="password" id="password" size="15" maxlength="20"></td> </tr> <tr> <td width="120" height="23" align="right"> </td><td width="208"> <div align="left"> <input type="submit" name="Submit" value="登录" onclick="javascript:return(checkform());"> <input type="reset" name="reset" value="重填"> </div></td> </tr> </table> <div align="center"></div> <div align="center"></div> <div align="center"></div> <div align="center"></div></td></tr> </table> <div align="center"></div></form> </body></html>