jdom+JSP+XML 留言板

 

留言板要达到的目的是与用户交流互动。针对用户提出的具体问题,进行回复。其中功能主要包括几个方面:显示留言、用户留言、回复留言、对留言进行管理。

 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>&nbsp;&nbsp;&nbsp;&nbsp;</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">&nbsp;</td>
              <td width="82">&nbsp;</td>
              <td width="200">&nbsp;</td>
              <td width="20">&nbsp;</td>
            </tr>
            <tr>
              <td height="34">&nbsp;</td>
              <td align="center" class="word">&nbsp;&nbsp;管理员:</td>
              <td><input name="Manager" type="text" class="txt_grey" id="Manager3"onKeyDown="if(event.keyCode==13) myform.PWD.focus();" maxlength="20"></td>
              <td>&nbsp;</td>
            </tr>
            <tr>
              <td height="34">&nbsp;</td>
              <td align="center" class="word">&nbsp;&nbsp;密&nbsp;&nbsp;码:</td>
              <td><input name="PWD" type="password" class="txt_grey" id="PWD" onKeyDown="if(event.keyCode==13) mycheck(myform)" maxlength="20"></td>
              <td>&nbsp;</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>&nbsp;&nbsp;<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>&nbsp;&nbsp;" + 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 %>页
    &nbsp;<a href="main.jsp?Page=<%=P1%>">上一页</a>
    &nbsp;<a href="main.jsp?Page=<%=P2%>">下一页</a>
    &nbsp;共<%=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>&nbsp;*</td>
            </tr>
            <tr>
                <td>Email:</td>
                <td><input type="text" name="email" size="40"></input>&nbsp;*</td>
            </tr>
            <tr>
                <td>电话:</td>
                <td><input type="text" name="phone" size="40"></input>&nbsp;*</td>
            </tr>
            <tr>
                <td>标题:</td>
                <td><input type="text" name="title" size="40"></input>&nbsp;*</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()">&nbsp;&nbsp;<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>&nbsp;</td></tr>");
    s.append("<tr><td>回复人:</td><td><input type='text' name='username' size=40></input>&nbsp;*</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()'>&nbsp;&nbsp;<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>


这可是我辛辛苦苦做出来的,其实之中也有不少的借鉴,第一次做这种类型的项目,希望大家多多指点

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值