留言板要达到的目的是与用户交流互动。针对用户提出的具体问题,进行回复。其中功能主要包括几个方面:显示留言、用户留言、回复留言、对留言进行管理。
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>
这可是我辛辛苦苦做出来的,其实之中也有不少的借鉴,第一次做这种类型的项目,希望大家多多指点