留言板要達到的目的是與用戶交流互動。針對用戶提出的具體問題,進行回覆。其中功能主要包括幾個方面:顯示留言、用戶留言、回覆留言、對留言進行管理。
1顯示留言
用戶可以瀏覽全部留言,並可以根據留言內容查找留言。但普通用戶不能回覆留言。
2 用戶留言
主要實現記錄用戶留言主題、留言內容、用戶信息(包括用戶名、電話、郵箱等)、留言時間。
3回覆留言
實現管理員根據某一留言內容進行回覆,記錄回覆時間。同時使某一留言的回覆內容在顯示留言頁面顯示出來。
4 管理留言
實現對留言內容進行管理。包括對留言的刪除,查看留言者信息。
5留言板的分頁
由於留言板在使用過程中,如果留言的數量衆多,用戶在瀏覽留言時不可能一次顯示全部留言。這就要求留言板具備分頁顯示的功能,根據留言時間進行倒排序,每頁顯示一定數量的留言,用戶可以在頁面間進行導航,以瀏覽全部留言。
留言板運行環境
文件存儲數據:XML。
服務器端編程工具:JSP,JAVA。
開發平臺及插件:eclipse3.0 + lomboz_3.0.1 + jdom-1.0。
因爲代碼中有圖片的插入,所以運行起來,你會知道有很多XX,呵呵不好意思啊!~!
其中有兩個Bean如下:
AddMessage.java中是發表留言的getter和setter方法
public class AddMessage {
String manager;
String email;
String phone;
String title;
String information;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getInformation() {
return information;
}
public void setInformation(String information) {
this.information = information;
}
public String getManager() {
return manager;
}
public void setManager(String manager) {
this.manager = manager;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public static void main(String[] args) {
}
}
RevertMessage.java中是回覆留言的getter和setter方法
public class RevertMessage {
String username;
String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public static void main(String[] args) {
}
}
login.jsp
主要功能:登陸界面
<%@ page language="java" %>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title>JSP + XML 留言板</title>
</head>
<body bgcolor="#FFFFFF" background="images/bg.gif">
<script language="javascript">
ourmove();
function manage()...{
var hdc = window.open('Login_M.jsp','','width=342,height=230');
width = screen.width;
height = screen.height;
hdc.moveTo((width-342)/2,(height-230)/2);
}
</script>
<center>
<strong>JSP + XML 留言板</strong><br><br>
<table>
<tr>
<td><a onClick="manage()">管理員登陸</a> </td>
<td><a href="main.jsp?Page=1">用戶進入</a></td>
</tr>
</table>
<br>
<hr>
<img src="images/inn.gif"></img><br><br><br>
常聯繫--常寒暄--常問候
</center>
</body>
</html>
Login_M.jsp
主要功能:登陸驗證,用戶名:sun密碼:sun因爲我姓孫嘛呵呵,見笑了~!~
<%@ page language="java" contentType="text/html;charset=gb2312" import="java.sql.*"%>
<script language="javascript">
function mycheck(myform)...{
if (myform.Manager.value=="")...{
alert("請輸入管理員!");
myform.Manager.focus();
return;
}
if(myform.PWD.value=="")...{
alert("請輸入密碼!");
myform.PWD.focus();
return;
}
if(myform.Manager.value!="sun")...{
alert("用戶名錯誤!");
myform.Manager.focus();
return;
}
if(myform.PWD.value!="sun")...{
alert("密碼錯誤!");
myform.PWD.focus();
return;
}
if(myform.Manager.value=="sun" || myform.PWD.value=="sun")...{
alert("登陸成功!");
<%
session.setAttribute("admin","true");
%>
opener.location.href="main.jsp?Page=1";
self.close();
return;
}
myform.submit();
}
</script>
<html>
<head>
<title>管理員登陸</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link href="Css/style.css" rel="stylesheet">
</head>
<body>
<table width="322" height="206" border="0" cellpadding="-2" cellspacing="-2">
<tr>
<td height="153" valign="top" background="images/Login_M_Top.gif"><table width="100%" height="153" border="0" cellpadding="-2" cellspacing="-2">
<tr>
<td>
<form method="post" action="" name="myform">
<table width="100%" border="0" cellspacing="-2" cellpadding="-2">
<tr>
<td width="20" height="65"> </td>
<td width="82"> </td>
<td width="200"> </td>
<td width="20"> </td>
</tr>
<tr>
<td height="34"> </td>
<td align="center" class="word"> 管理員:</td>
<td><input name="Manager" type="text" class="txt_grey" id="Manager3"onKeyDown="if(event.keyCode==13) myform.PWD.focus();" maxlength="20"></td>
<td> </td>
</tr>
<tr>
<td height="34"> </td>
<td align="center" class="word"> 密 碼:</td>
<td><input name="PWD" type="password" class="txt_grey" id="PWD" onKeyDown="if(event.keyCode==13) mycheck(myform)" maxlength="20"></td>
<td> </td>
</tr>
</table>
</form></td>
</tr>
</table>
</td>
</tr>
<tr>
<td><img src="images/Login_M_bottom.gif" width="322" height="53" border="0" usemap="#Map"></td>
</tr>
</table>
<map name="Map">
<area shape="rect" coords="164,8,246,26" href="#" onClick="window.close();">
<area shape="rect" coords="76,8,158,26" href="#" onClick="mycheck(myform)">
</map>
</body>
</html>
main.jsp中
主要功能:實現分頁和顯示XML中數據
<%@page language="java" contentType="text/html;charset=gb2312"%>
<%@page import="java.util.*,org.jdom.*,org.jdom.input.*,org.jdom.output.*,java.io.*"%>
<%
request.setCharacterEncoding("gb2312");
String admin = (String)session.getAttribute("admin");
boolean login = false;
if(admin != null && admin.equals("true"))...{
login = true;
}
%>
<%
String file = "E:/message.xml";
StringBuffer s = new StringBuffer();//保存HTML格式
int P1=1,P2=1;
int Page;
int i=0,num=0,PageSize=3,totalPage=1;
String strPage = request.getParameter("Page");
int intPage = Integer.parseInt(strPage);
if(strPage == null || strPage.equals(""))...{
Page = 1;
}else...{
Page = intPage;
if(intPage <= 1)...{
Page = 1;
}
}
try...{
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(new FileInputStream(file));
Element root = doc.getRootElement();
List list = root.getChildren();
int totalRecords = list.size();
totalPage = totalRecords % PageSize == 0 ? totalRecords / PageSize : totalRecords / PageSize + 1;
if(intPage<=1) P1 = 1;
else P1 = Page - 1;
if(intPage>=totalPage) P2 = totalPage;
else P2 = Page + 1;
if(intPage>=totalPage)...{
Page = totalPage;
num = totalRecords - (Page-1) * PageSize;
i = (Page-1) * PageSize + num - 1;
}
else...{
i = (Page-1) * PageSize + 2;
} //xml文檔的最後一條記錄會被顯示爲留言板的第一條記錄
for(;i>=(intPage-1) * PageSize; i--)...{
Element info = (Element)list.get(i);
String strLogin = "";
if(login)...{
strLogin = "<a href='revertMessage.jsp?num=" + i + "'>回覆</a> <a align=right href='delete.jsp?num=" + i + "'>刪除</a>";
}
s.append("<table bgcolor=#F0F8E1 align='center' width='700px' height='200px' cellspacing='1' cellpadding='1'>");
s.append("<tr><td bgcolor=#CCCCCC> 發言者:" + info.getChildText("manager") + "</td><td bgcolor=#CCCCCC>Email:" + info.getChildText("email") + "</td></tr>");
s.append("<tr><td bgcolor=#CCCCCC>發表時間:" + info.getChildText("date") + "</td><td bgcolor=#CCCCCC>電話:" + info.getChildText("phone")+ "</td></tr>");
s.append("<tr><td colspan=2 bgcolor=#CCCCCC>主題:" + info.getChildText("title") + "</td></tr>");
s.append("<tr><td colspan=2>信息內容:" + info.getChildText("information") + "</td></tr>");
s.append("<tr><td colspan=2 bgcolor=#E0DFE3>回覆人:" + info.getChildText("username") + "</td></tr>");
s.append("<tr><td colspan=2>回覆內容:" + info.getChildText("message") + "</td></tr>");
s.append("<tr><td colspan=2 align=center><a href='addWindow.jsp'>留言</a> " + strLogin+ "</form></td></tr></table><br>");
}
}catch(Exception e)...{
e.printStackTrace();
}
%>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title>系統留言板</title>
</head>
<body background="images/bg.gif">
<div align="center" valign="top">
<br>
<%=s%>
</div>
<div align="center">
第<%=Page %>頁
<a href="main.jsp?Page=<%=P1%>">上一頁</a>
<a href="main.jsp?Page=<%=P2%>">下一頁</a>
共<%=totalPage%>頁
</div>
</body>
</html>
addWindow.xml中
主要功能:插入數據的界面
<%@page language="java" contentType="text/html;charset=gb2312"%>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title>發表留言</title>
</head>
<body bgcolor="#FFFFFF">
<script language="JavaScript">
function check()...{
var manager = document.form1.manager.value;
var email = document.form1.email.value;
var phone = document.form1.phone.value;
var title = document.form1.title.value;
var infomation = document.form1.information.value;
if(manager=="")...{
alert("用戶名不能爲空!");
document.form1.manager.focus();
return false;
}
if(email=="")...{
alert("Email不能爲空!");
document.form1.email.focus();
return false;
}
if(phone=="")...{
alert("電話不能爲空!");
document.form1.phone.focus();
return false;
}
if(title=="")...{
alert("標題不能爲空!");
document.form1.title.focus();
return false;
}
if(information=="")...{
alert("留言內容不能爲空!");
document.form1.information.focus();
return false;
}
return true;
alert("留言發表成功!");
}
</script>
<%
request.setCharacterEncoding("gb2312");
String manager = request.getParameter("manager");
String email = request.getParameter("eamil");
String phone = request.getParameter("phone");
String title = request.getParameter("title");
String information = request.getParameter("information");
if(manager == null)...{manager="";}
if(email == null)...{email="";}
if(phone == null)...{phone="";}
if(title == null)...{title="";}
if(information == null)...{information="";}
%>
<center>
<form action="addMessage.jsp" method="post" name="form1">
<table align='center' width='700px' height='200px' cellspacing='0' cellpadding='1'>
<tr>
<td colspan=2 align=center>發表留言</td>
</tr>
<tr>
<td colspan=2 align=right>請填寫留言信息</td>
</tr>
<tr>
<td>發言者:</td>
<td><input type="text" name="manager" size="40"></input> *</td>
</tr>
<tr>
<td>Email:</td>
<td><input type="text" name="email" size="40"></input> *</td>
</tr>
<tr>
<td>電話:</td>
<td><input type="text" name="phone" size="40"></input> *</td>
</tr>
<tr>
<td>標題:</td>
<td><input type="text" name="title" size="40"></input> *</td>
</tr>
<tr>
<td>留言內容:</td>
<td><textarea cols=60 rows=8 name="information" style="overflow:auto"></textarea></td>
</tr>
<tr>
<td colspan=2 align=center><input type="submit" value="提交" οnclick="return check()"> <input type="reset" value="重寫"></td>
</tr>
</table>
</form>
</center>
</body>
</html>
addMessage.xml中
主要功能:插入數據
<%@page language="java" contentType="text/html;charset=gb2312"%>
<%@page import="java.util.*,org.jdom.*,org.jdom.input.*,org.jdom.output.*,java.io.*"%>
<%@page import="com.sun.AddMessage"%>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title>Lomboz JSP</title>
</head>
<body bgcolor="#FFFFFF">
<%request.setCharacterEncoding("gb2312");%>
<jsp:useBean id="addMessage" scope="session" class="com.sun.AddMessage" />
<jsp:setProperty name="addMessage" property="*" />
<%
request.setCharacterEncoding("gb2312");
String file="E:/message.xml";
String manager = addMessage.getManager();
String email = addMessage.getEmail();
String phone = addMessage.getPhone();
String title = addMessage.getTitle();
String information = addMessage.getInformation();
try...{
request.setCharacterEncoding("gb2312");
//Date date = new Date();
java.text.SimpleDateFormat DATE = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = DATE.format(new Date());
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(new FileInputStream(file));
Element root = doc.getRootElement();
List list = root.getChildren();
Element newInfo = new Element("info");//新建一個二級結點
Element Manager = new Element("manager");//新建該二級結點的子結點
Element Email = new Element("email");
Element Date = new Element("date");
Element Phone = new Element("phone");
Element Title = new Element("title");
Element Infomation = new Element("information");
Element Username = new Element("username");
Element Message = new Element("message");
newInfo.addContent(Manager);//將子結點添加到二級結點下
newInfo.addContent(Email);
newInfo.addContent(Date);
newInfo.addContent(Phone);
newInfo.addContent(Title);
newInfo.addContent(Infomation);
newInfo.addContent(Username);
newInfo.addContent(Message);
Manager.setText(manager);//設置該子結點的內容
Email.setText(email);
Date.setText(date.toString());
Phone.setText(phone);
Title.setText(title);
Infomation.setText(information);
Username.setText("admin");
Message.setText("暫無回覆");
list.add(newInfo);
Format format = Format.getCompactFormat();
format.setEncoding("gb2312");
format.setIndent(" ");
boolean newLines = true;//是否爲新的一行
XMLOutputter outer = new XMLOutputter(format);
outer.output(doc,new FileOutputStream(file));
//String url = "1;url='view.jsp?Page=1'";
//response.setHeader("refresh",url);
response.sendRedirect("main.jsp?Page=3");
}catch(Exception e)...{
e.printStackTrace();
}
%>
</body>
</html>
revertMessage.xml中
主要功能:回覆功能
<%@page language="java" contentType="text/html;charset=gb2312"%>
<%@page import="java.util.*,org.jdom.*,org.jdom.input.*,org.jdom.output.*,java.io.*"%>
<script language="JavaScript">
function check()...{
var username = document.form1.username.value;
var message = document.form1.message.value;
if(username=="")...{
alert("回覆人不能爲空!");
document.form1.username.focus();
return false;
}
if(message=="")...{
alert("回覆內容不能爲空!");
document.form1.message.focus();
return false;
}
return true;
}
</script>
<%
String username = request.getParameter("username");
String message = request.getParameter("message");
if(username == null)...{username="";}
if(message == null)...{message="";}
%>
<%
request.setCharacterEncoding("gb2312");
int num = Integer.parseInt(request.getParameter("num"));
StringBuffer s = new StringBuffer();
String file = "E:/message.xml";
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(new FileInputStream(file));
Element root = doc.getRootElement();
List list = root.getChildren();
Element info = (Element)list.get(num);
String manager = String.valueOf(info.getChildText("manager"));
String title = String.valueOf(info.getChildText("title"));
String date = String.valueOf(info.getChildText("date"));
String information = String.valueOf(info.getChildText("information"));
s.append("<form action='revertMessage_do.jsp?num=" + num + "' method='post' name='form1'>");
s.append("<table align='center' width='700px' height='200px' cellspacing='0' cellpadding='1'><tr><td colspan=2 align=center>回覆信息</td></tr><tr><td>發言者:</td><td>" + manager + "</td></tr>");
s.append("<tr><td>標題:</td><td>" + title + "</td></tr>");
s.append("<tr><td>日期:</td><td>" + date + "</td></tr>");
s.append("<tr><td>信息內容:</td><td>" + information + "</td></tr>");
s.append("<tr><td colspan=2> </td></tr>");
s.append("<tr><td>回覆人:</td><td><input type='text' name='username' size=40></input> *</td></tr>");
s.append("<tr><td>回覆內容:</td><td><textarea name='message' rows='8' cols='60'></textarea></td></tr>");
s.append("<tr><td colspan='2' align=center><input type='submit' value='提交' οnclick='return check()'> <input type='reset' value='重寫'></td></tr></table></form><br>");
%>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title>回覆信息</title>
</head>
<body bgcolor="#FFFFFF">
<%=s%>
</body>
</html>
revertMessage_do.xml中
主要功能:實現回覆功能
<%@page language="java" contentType="text/html;charset=gb2312"%>
<%@page import="java.util.*,org.jdom.*,org.jdom.input.*,org.jdom.output.*,java.io.*"%>
<%@page import="com.sun.RevertMessage"%>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title>Lomboz JSP</title>
</head>
<body bgcolor="#FFFFFF">
<%request.setCharacterEncoding("gb2312");%>
<jsp:useBean id="revert" scope="session" class="com.sun.RevertMessage" />
<jsp:setProperty name="revert" property="*" />
<%
request.setCharacterEncoding("gb2312");
int num = Integer.parseInt(request.getParameter("num"));
String username = revert.getUsername();
String message = revert.getMessage();
StringBuffer s = new StringBuffer();
String file = "E:/message.xml";
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(new FileInputStream(file));
Element root = doc.getRootElement();
List list = root.getChildren();
Element info = (Element)list.get(num);//獲得欲修改的二級結點
Element Message = info.getChild("message");
Element Username = info.getChild("username");
Message.setText(message);
Username.setText(username);
XMLOutputter outter = new XMLOutputter();
outter.output(doc,new FileOutputStream(file));
response.sendRedirect("main.jsp?Page=1");
%>
</body>
</html>
delete.xml中
主要功能:實現刪除信息功能
<%@page language="java" contentType="text/html;charset=gb2312"%>
<%@page import="java.util.*,org.jdom.*,org.jdom.input.*,org.jdom.output.*,java.io.*"%>
<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title>Lomboz JSP</title>
</head>
<body bgcolor="#FFFFFF">
<%
request.setCharacterEncoding("gb2312");
int num = Integer.parseInt(request.getParameter("num"));
String file = "E:/message.xml";
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(new FileInputStream(file));
Element root = doc.getRootElement();
List list = root.getChildren();
Element info = (Element)list.get(num);
list.remove(num);
XMLOutputter outter = new XMLOutputter();
outter.output(doc,new FileOutputStream(file));
response.sendRedirect("main.jsp?Page=3");
%>
</body>
</html>
這可是我辛辛苦苦做出來的,其實之中也有不少的借鑑,第一次做這種類型的項目,希望大家多多指點