用jsp语言开发的留言板

留言簿设计报告

班级     09软件          

姓名      ***       

学号      22        

一部分:描述留言簿的模块划分

二部分:用流程图的形式描述留言簿的执行流程

三部分:各部分界面效果图及代码的具体实现

四部分:设计过程中的错误及纠正

五部分:设计感受

六部分:附用户使用说明(包括安装环境部署环境,及使用),和设计时的数据库

第一部分:留言簿的模块划分

1.      管理员管理模块

 身为管理员,有查看所有用户的资料信息,和所有用户的留言,并有修改和删除的权利,进入index.jsp首页后,先像其它用户一样访问主页,及留言板,若想留言或查看信息,则先登陆.点击留言请先登陆超链接,进入denglu.jsp的登陆页面.输入管理员的用户名及密码,即admin,进入success.jsp页面,在此页面里,管理员可以查看全部留言信息shuchu.jsp,并可以更改和删除.也可以查看所有用户的注册信息chakan.jsp.也可以查看个人信息gerenxinxi.jsp.在个人信息中可以修改用户名和密码即登录xiugai.jsp页面,但不可以注销用户,因为不能没有管理员.

2.      普通用户使用模块

 普通用户进入网站,也要先浏览主页,及留言板,若有意留言,则请先登录,登陆成功后进入success.jsp页面,在此页面中用户可以查看自己已经留言过的信息,即shuchu3.jsp页面,在此页面中可以对自己的留言进行更新和删除,即update.jsp页面和delete.jsp页面,若有意留言,则点击我要留言超链接,进入liuyanyemian.jsp页面,进行留言,再此页面中,可以更新自己的头像.在success.jsp中还可以查看个人信息,并对自己的用户名和密码进行修改,对自己的账号注销.即xiugai.jsp和cancel.jsp页面

3.      过客浏览模块

身份为过客,进入网站后,先浏览主页,若有意留言,则点击留言请先登录,若没有账号,则在denglu.jsp的页面中,点击注册链接,进行注册,即insertuser.jsp页面,若用户名不曾被人注册过,则转到zhucechenggong.jsp的页面.点击此页面的登陆即可重新登陆,也可以退出网站.重新登陆后,就可以想普通会员一样进行操作了.

4.      退出系统

退出,即tuichu.jsp页面.

第二部分:流程图

        

 


第三部分:各部分界面效果图及代码的具体实现

 index.jsp页面,主要用了一个qq表情,然后用marquee标签实现字体的运动,接下来是两个超级链接.

 

访问主页后,进入留言板主页,标题有主人寄语,然后调用以下方法,

       public  List  QureyAll(String sql){

       List  list=newArrayList();

       this.getConnection();

       try {

           stat=con.createStatement();

           rs=stat.executeQuery(sql);

           while(rs.next()){

              Message  message=new Message();

              message.setBorderID(rs.getInt("borderId"));

              message.setContent(rs.getString("content"));

              message.setImage(rs.getString("image"));

              message.setMsgtime(rs.getString("msgtime"));

              message.setReplyID(rs.getString("replyID"));

              message.setSubject(rs.getString("subject"));

              message.setUsername(rs.getString("username"));

               list.add(message);

           }

       } catch (SQLException e) {

           // TODO Auto-generated catch block

           System.out.println("数据库异常");

           e.printStackTrace();

       }

       CloseAll();

       return list;

    }

       输出所有人的留言,界面如下:

 

若想要留言,则进入denglu.jsp页面,即用一个form表单即可,界面如下:

 

登陆成功后,进入success.jsp,设置了几个超链接如下:

 

若点击查看自己的留言,则进入shuchu3.jsp页面,在此页面,可以更新和删除,都是现获取自己的id号,然后操作,如下:

输出方法如下:

public Message QueryByID(int id){

       Message message=new Message();

       String sql="select * from t_board where borderID="+id;

       this.getConnection();

       try {

           stat=con.createStatement();

           rs=stat.executeQuery(sql);

           if(rs.next()){

              message.setBorderID(rs.getInt("borderID"));

              message.setContent(rs.getString("content"));

              message.setImage(rs.getString("image"));

              message.setMsgtime(rs.getString("msgtime"));

              message.setReplyID(rs.getString("replyID"));

              message.setSubject(rs.getString("subject"));

              message.setUsername(rs.getString("username"));

             

           }

       } catch (SQLException e) {

           // TODO Auto-generated catch block

           System.out.println("数据库异常");

           e.printStackTrace();  

       }

       CloseAll();  

}

在jsp页面调用:

        String id=request.getParameter("id");

        int borderid=Integer.parseInt(id);

        DBConn db=new DBConn();

        Message message=db.QueryByID(borderid);

更新主要实现就是:

String id=request.getParameter("id");

       String subject=request.getParameter("subject");

       String content=request.getParameter("content");

       String updatetime=new Date().toLocaleString();

       String sql="update t_board set subject='"+subject+"',content='"

                  +content+"',msgtime='"+updatetime+"',image='"+image+"' where borderID="+id;

       DBConn db=new DBConn();

       int flag=db.executeUpdate(sql);

       if(flag>0){

          response.sendRedirect("shuchu3.jsp");

       }

else{

          out.print("出现异常,重新留言!");

       }

删除主要实现就是将sql语句进行修改一下:

String sql="delete from t_board where borderID="+borderid;

当然参数也没必要获得那么多.

更新和删除的主要方法为:

publicint executeUpdate(String sql){

int flag=0;

       try {

           this.getConnection();

           stat=con.createStatement();

           flag=stat.executeUpdate(sql);

       }

catch (SQLException e) {

           e.printStackTrace();

}

       CloseAll();

       return flag; 

}

界面如下:

 

若点击查看自己的个人信息,则进入gerenxinxi.jsp页面,sql语句用username追踪,

调用如下的方法:

public  Genggai  QureyAll2(String sql){

       Genggai xinxi=new Genggai();

       this.getConnection();

       try {

           stat=con.createStatement();

           rs=stat.executeQuery(sql);

           if(rs.next()){

              xinxi.setId(rs.getInt("id"));

              xinxi.setUsername(rs.getString("username"));

              xinxi.setPwd(rs.getString("pwd"));

              xinxi.setSex(rs.getString("sex"));

              xinxi.setBirthday(rs.getString("birthday"));

              xinxi.setEmail(rs.getString("email"));

              xinxi.setAddress(rs.getString("address"));

              xinxi.setTelephone(rs.getString("telephone"));}

       } catch (SQLException e) {

           System.out.println("数据库异常");

           e.printStackTrace();}

       CloseAll();

       return xinxi;}

在jsp页面这样输出:

out.print("<tr>");

out.print("<td width='40%' align='center'>");

out.print("<font size='5' color='orange' face='隶书'>");

out.print("您的id号是:");

out.print("</font>");

 out.print("</td>");

 out.print("<td align='center'>");

 out.print(xinxi.getId());

  out.print("</td>");

 out.print("</tr>");

其他列名输出跟上面的id一样,界面如下:

若点击如上的”修改用户名或密码”进入如下页面,即xiugaiyemian.jsp,也是定义一

个form表单

 

若修改成功,则进入xiugaichenggong.jsp页面,界面如下:

 

若点击success.jsp页面的”注销用户”,则进入如下页面,同样也是定义form表单,成功后进入cancelsuccess.jsp页面,两个界面如下:

 

注销用户方法是:

    publicint TestCancel(String username,String pwd){

       int flag=0;

        DBConn db=new DBConn();

        con=db.getConnection();

        String sql="delete from t_user where username=? and pwd=?";

        try {

            prests= con.prepareStatement(sql);

            prests.setString(1,username);

            prests.setString(2,pwd);

            flag=prests.executeUpdate();

       } catch (SQLException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

       return flag;

    }

若在登陆页面,点击”注册”,进入regist.jsp页面如下,也是一个复杂的form表单,添加了背景和qq表情:

 

注册插入到数据库的方法主要有两个,一个用来判断用户名是否已经存在,一个用来插入:如下

判断:

publicint Testpanduan(String username){

        int s=0;

        DBConn db=new DBConn();

        con=db.getConnection();

        String sql="select * from t_user where username=?";

       try {

            prests=con.prepareStatement(sql);

            prests.setString(1,username);

            rs=prests.executeQuery();

           if(rs.next()) {

              s=1;

             rs.close();

             prests.close();

             }

       } catch (SQLException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

       return s;

    }

插入:

    publicint Testinsert(String username,String pwd,String repwd,String sex,String birthday,String email,String address,String telephone){

        DBConn db=new DBConn();

        con=db.getConnection();

        int flag=0;

        String sql="insert into t_user values(?,?,?,?,?,?,?)";

        try{

        if(pwd.equals(repwd))

        {

            prests=con.prepareStatement(sql);

            prests.setString(1,username);

            prests.setString(2,pwd);

            prests.setString(3,sex);

            prests.setString(4,birthday);

            prests.setString(5,email);

            prests.setString(6,address);

            prests.setString(7,telephone);

          flag=prests.executeUpdate();

        }

        }catch (SQLException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

       return flag;

    }

注册成功后,进入zhucechenggong.jsp页面,也添加了背景图片和qq表情,使之美观,界面如下:

 

若访问的是管理员,则进入如下界面,他可以查看所有用户的所有留言和所有信息:

 

若查看所有用户的全部资料,则进入chakan.jsp页面,在此页面可以管理员进行删除,输出方法是:

public  ResultSet  QureyAll3(String sql){

       Genggai xinxi=new Genggai();

       this.getConnection();

       try {

           stat=con.createStatement();

           rs=stat.executeQuery(sql);

           if(rs.next()){

              xinxi.setId(rs.getInt("id"));

              xinxi.setUsername(rs.getString("username"));

              xinxi.setPwd(rs.getString("pwd"));

              xinxi.setSex(rs.getString("sex"));

              xinxi.setBirthday(rs.getString("birthday"));

              xinxi.setEmail(rs.getString("email"));

              xinxi.setAddress(rs.getString("address"));

              xinxi.setTelephone(rs.getString("telephone"));

             

           }

       } catch (SQLException e) {

           // TODO Auto-generated catch block

           System.out.println("数据库异常");

           e.printStackTrace();

       }

       return rs;

    }

在jsp页面调用方法后用<%out.print(rs.getString("email")); %>

删除链接是:<a href="deletemsg2.jsp?id=<%=rs.getInt("id")%>">删除</a>

界面如下:

管理员还可以有权利对所有用户的留言进行删除:主要方法同上面提到的.

界面如下:

 

点击我要留言链接后,进入我要留言页面:添加笑脸和更新头像的方法如下:

<%int count=0;

      for(int i=0;i<40;i++){ %>

        <input type="radio" name="image" value="<%=i+1 %>" onclick="addimg(this)">

<img src="images2/<%=i+1 %>.png">

      <% count++;

      if(count%8==0)

      out.print("<br>"); }%>    

      更新头像:

        <select name="image" onchange="change();">

                <%for(int i=1;i<=30;i++){%>

<option value="<%=i%>"><%=i %></option> 

                    <% } %> 

        </select>

<img src="photo/1.jpg" width="100" height="100" name="head"/>

但要用到JavaScript语言:

选择头像: function addimg(obj){

     var s=obj.value;

    var con=document.form1.content.value;

    con=con+"<img src=images2/"+s+".png>";

document.form1.content.value=con; }

更换头像: function change(){

     var image=document.form1.image1.value;

 document.head.src="photo/"+image+".jpg";}

留言界面如下:

 

最后是退出页面,主要是图片和qq表情的设置.使页面更生动,界面如下:

 

第四部分:设计过程中的错误及纠正

在做动态网页的时候,遇到的小错误有很多,每次都是经过反复的调试得出的,有时候写错某个方法中的某个字母,就会调试很长时间,当然同时也加深了印象.例如在用JavaScript语句中,不能弹出alert对话框,仔细分析代码,发现表单form名字写成了from.主要的错误有以下几个方面:

1.      在编写查看所有人的信息

遇到传递参数时的空指针,而且在方法体中用了db.CloseAll();方法,出现连接对象已经关闭的错误.

应该用out.print(rs.getString(username));而不是用out.print(xinxi.getUsername());

2.      在删除留言时,超链接中的id一直传递不过去使得int borderid=Integer.parseInt(id);一直出现错误,出现空指针.,仔细检查发现是超链接中的id=<%=message.getBorderID()%>写错

3.      在插入新留言的时候,一直出现中文乱码, 插入如下两条语句,即可解决

byte aa[]=subject.getBytes("ISO-8859-1"); subject=new String(aa);

   byte bb[]=content.getBytes("ISO-8859-1");content=new String(bb);

   更新头像的时候,头像不能同时显示出来

4.      在注册新用户时,由于既要用sql语句判断用户名是否已经存在,又用到要在不存在的时候插入的sql语句,导致逻辑混乱,仔细推敲后,才运行得到.

5.      因为要在多个页面用到传递的username等等,所以一定要用session获取参数

6.      在更新留言时, 要用到<input type="hidden" name="id" value="<%=id %>">传递隐藏的参数,由于刚开始不明白,出现了很多逻辑上的错误.

第五部分: 设计感受

1.      这次的留言板设计感受很多,有时某一个很小的错误,比如丢一个括号,写错一个字母,就会浪费很长的时间.所以做完就用了很长的时间.当然对程序里的某些方法的应用,也不是太清楚,如过滤信息的设置等.我觉得还是孜孜不倦的从一点点的做起,比如每个网页的背景图片,就设计了不少时间,因为我觉得一个网站的美观效果也是很重要的.每当睡觉的时候,只要一想起,啊,我的留言板还没有做完,就会带着思考入梦了.

老实说,这个留言板不是很难,可能是刚接触数据库与jsp的链接吧,当时出了很多例如数据库异常的错误,到后期的时候就好多了…在对用户信息或用户的留言进行更新,删除,插入,查找等等时,这些方法都从jsp的页面,提到java类里面,方法都是大同小异,无非是数据库的链接,执行sql语句的对象的创建和应用,以及接受结果的存放等等.主要是预处理对象和执行对像的flag=stat.executeUpdate(sql);rs=stat.executeQuery(sql);这两个方法的调用.

2. 在这期间离不开同学与同学,舍友与舍友之间互相学习和交流,所以收益也很大,也感受到了集体的力量.经过这次的留言板制作,收获很多.不仅对连接数据库方面的知识懂了很多,对sql语句的书写记忆深刻,而且还回忆了以前的很多函数的调用,方法的编写等等.相信在以后的学习中会更进一步,掌握更多的知识和应用.

第六部分:附用户使用说明(包括安装环境部署环境,及使用),和设计时的数据库

在MyEclipse7.0的环境下实现,将Tomcat6.0服务器,JDK7下载以及部署进去

设计时的数据库使用Microsoft  SQL  server 2000

相关推荐