当前位置:文档之家› BBS网络留言板设计与实现

BBS网络留言板设计与实现

BBS网络留言板设计与实现姓名:班级:学号:指导老师:年月一、系统分析1、开发背景当今网络的时代,人与人之间的交流从原来的面对面交流,慢慢借助于现代计算机软件技术和网络技术演变成一种远程的,存在于网络上的交流,这种远程交流其中一种方式就是通过使用BBS留言板进行,有了这样的交流,人与人之间的知识文化就可以很快地传播。

2、功能分析在留言时,用户需要输入留意的标题、留言者的姓名、Email和留言的内容。

用户可以使用留言板发表自己的观点,也可以对已有的留言进行浏览。

这就需要一个单独的页面去显示所有的留言。

二、系统开发思想本系统采用JSP+JavaBean+Servlet+JDBC的开发模式(如图1所示)进行开发,其中JSP是负责页面和表单提交,它提交给Servlet,Servlet从JSP页面取值并赋值给变量,再调用增删改的方法,而这些方法是写在JavaBean里的,JavaBean接受Servlet传过来的变量值来进行数据库的增删改查,再将结果返回到Servlet中 ,JDBC用于连接MySQL数据库并对数据库进行存储。

图1. 开发模式以MVC的概念来看,JSP是View层,用以提交用户录入数据或展示用户想要看到的数据,Servlet就是Controller层,页面展示所需要的数据由Servlet 调用JavaBean的方法获取,View层提交上来的数据也会传送给Servlet,在Servlet中对提交上来的数据进行必要的非业务逻辑的处理后,将数据以参数形式传给调用的JavaBean的方法。

JavaBean就是Module层,它封装了一些可重用的业务逻辑和数据库操作功能,被Servlet调用,实现业务功能处理或数据库操作。

三、数据库设计本系统使用的是MySQL数据库来完成设计的,所以具备一些MySQL的基础知识有助于对该数据库设计的理解,与SQL Server相比,SQL语言没什么大的区别,基本是通用的。

除了在数据库中保留留言者输入的信息外,一般来说还要保存留言的具体时间,这样就需要在数据库中创建一个表,并将其命名为message,表结构如表2所示:四、系统实现1、表示留言数据的JavaBean用JavaBean来表示留言板数据。

留言板上输入的数据在存入数据库之前,一般先奖其存入该JavaBean中;从数据库取出来的数据在被JSP使用之前,也是先将其放在JavaBean中的,这就是JavaBean的主要功能。

在编写这种JavaBean时,一般是将数据库中的字段与JavaBean的属性对应起来,一个字段对应一个属性。

每个属性都有get和set方法。

代码如下:package com.examp.ch10;//对这类JavaBean类的命名在本书中约定以BO结尾public class MessageBO implements java.io.Serializable{private String name,email,title,content;//属性一般都是私有类型的private java.sql.Date date;public void setName(String name)//name属性的set方法{=name;}public void setEmail(String email){this.email=email;}public void setTitle(String title){this.title=title;}public void setContent(String content){this.content=content;}public String getName()//name属性的get方法{return ;}public String getContent(){return this.content;}public String getTitle(){return this.title;}public String getEmail(){return this.email;}public java.sql.Date getDate(){return this.date;}public void setDate(java.sql.Date date){this.date=date;}}2、用于将表单记录存入数据库的ServletHTML文件向Servelt发出请求,Servlet接收HTTP请求,然后执行数据库操作,将表单中的数据存入数据库。

操作完成后如果有需要,把操作的结果保存到HTTP请求中,最后调用JSP页面显示。

首先创建该Servlet,命名为AddMassageServlet.java,代码如下:package com.examp.ch10;import javax.servlet.*;import javax.servlet.http.*;import com.mysql.jdbc.Driver;import java.sql.*;import java.util.*;import java.io.*;public class AddMessageServlet extends HttpServlet{private Connection con;public void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException, ServletException{//从请求中获取表单中填写的数据String name=request.getParameter("name");String mail=request.getParameter("email");String title=request.getParameter("title");String content=request.getParameter("content");if(name==null)name="";if(title==null)title="";if(content==null)content="";if(mail==null)mail="";try{//用于向表message中插入一条记录PreparedStatement stm=con.prepareStatement("insert into message values(?,?,?,?,?)");stm.setString(1,title);//设置第一个“?”为titlestm.setString(2,name);if(mail.length()==0)stm.setString(5,null);else stm.setString(5,mail);stm.setDate(3,new java.sql.Date(new java.util.Date().getTime()));//获取系统时间stm.setString(4,content);try{stm.executeUpdate();//执行插入记录的操作}catch(Exception e){}//插入记录后,将请求转向viewMessages_servlet,用于查询数据库所有记录,然后调用JSP页面显示RequestDispatcher requestDispatcher = request.getRequestDispatcher("/viewMessages_servlet");requestDispatcher.forward(request,response);}catch(Exception e){e.printStackTrace();}}public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException, ServletException{d oGet(request,response);}//在构造函数中建立数据库连接,这样可以保证在doGet方法前连接已经建立public AddMessageServlet(){//用于连接数据库的信息String CLASSFORNAME="com.mysql.jdbc.Driver";String SERVANDDB="jdbc:mysql://127.0.0.1:3306/ch10";String USER="root";String PWD="abcd1234!";try{Class.forName(CLASSFORNAME);//建立数据库连接 concon = DriverManager.getConnection(SERVANDDB,USER,PWD);}catch(Exception e){e.printStackTrace();}}}从上面代码可看出,AddMassageServlet()在其doGet()方法中用request.getParameter(“name”)获取留言板的数据。

然后用insert语句将他们存入数据库中,最后将请求转发到“/viewMessage_servlet”查询数据库中的所有记录,然后显示。

3、用于从数据库中查询留言记录的Servlet和AddMassageServlet类似,该Servlet接收到请求后,执行数据库查询操作,将查询的结果存入到JavaBean中。

接着该JavaBean保存到客户端的请求中,最后调用JSP页面去显示。

这时JSP就可以通过JavaBean获取它想要的数据。

创建ViewMessageSer.Java,代码如下:package com.examp.ch10;import javax.servlet.*;import javax.servlet.http.*;import com.mysql.jdbc.Driver;import java.sql.*;import java.util.*;import java.io.*;public class ViewMessageServlet extends HttpServlet{private Connection con;public void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException, ServletException{Collection ret=new ArrayList();try{Statement stm=con.createStatement();//查询表message中有几条记录ResultSet result=stm.executeQuery("select count(*) from message");int message_count=0;if(result.next()){message_count=result.getInt(1);//得到message表中的记录数result.close();}if(message_count>0){//按照时间顺序查询表message中的所有记录result=stm.executeQuery("select * from message order by time desc");while(result.next())//遍历所以的记录{String title=result.getString("title");String name=result.getString("name");String mail=result.getString("mail");String content=result.getString("content");java.sql.Date date=result.getDate("time");//创建message对象,用于存储数据库中的数据MessageBO message=new MessageBO();message.setName(name);message.setTitle(title);message.setContent(content);message.setDate(date);message.setEmail(mail);ret.add(message); //将message添加到集合ret中}result.close();stm.close();}request.setAttribute("messages",ret);//将存储所以message对象的集合添加到request对象中RequestDispatcher requestDispatcher = request.getRequestDispatcher("viewMessages2.jsp");requestDispatcher.forward(request,response);//将request发送出去}catch(Exception e){e.printStackTrace();}}//在构造函数中建立数据库连接,这样可以保证在doGet方法前连接已经建立public ViewMessageServlet(){//用于连接数据库的信息String CLASSFORNAME="com.mysql.jdbc.Driver";String SERVANDDB="jdbc:mysql://127.0.0.1:3306/ch10";String USER="root";String PWD="abcd1234!";try{Class.forName(CLASSFORNAME);//建立数据库连接 concon = DriverManager.getConnection(SERVANDDB,USER,PWD);}catch(Exception e){e.printStackTrace();}}public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException, ServletException{doGet(request,response);}}可以看出,ViewMessageServlet在doGet()方法中执行 select * from message,从数据库中取出数据。

相关主题