视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
java开发的网络留言板
2025-09-25 14:15:17 责编:小OO
文档
项目概述:

使用jsp+JavaBean+servlet实现MVC架构的网络留言板,进行添加留言和查看留言,在留言时输入留言者姓名,Email,标题,内容如图:

查看留言信息:如图

具体实现:

1:项目说明:

程序流程可以由此图表示(如下):

MVC设计模式其中jsp(HTML)作为视图,servlet作为控制器,JavaBean作为模型。链接数据库时使用到了tomcat中数据库链接池的技术,原因是提高程序的效率,以防多用户同时使用造成程序的运行效率直线下降。

3环境搭建:

使用MyEclipse开发工具,使用MySQL数据库,JDBCAPI,tomcat6.x,fckediter,Dreamweaver。建立工程目录(如图):

4.编写步骤:

    1.创建将表单信息存入数据库的servlet AddMessage.Java

package com.wja.ly;

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.servlet.*;

import javax.servlet.http.*;

import javax.sql.DataSource;

//import com.mysql.jdbc.Driver;

import java.sql.*;

//import java.util.*;

import java.io.*;

public class AddMessageServlet extends HttpServlet

{

    /**

     * 

     */

    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request,

                      HttpServletResponse response)

        throws IOException, ServletException

    {

        //从请求中获取表单中填写的数据

        String name=filterHtml(request.getParameter("name"));

        String mail=filterHtml(request.getParameter("email"));

        String title=filterHtml(request.getParameter("title"));

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

        if(name==null)

        name="";

        if(title==null)

        title="";

        if(content==null)

        content="";

        if(mail==null)

        mail="";

        try

        {

 //建立数据库连接池

            Context context=new InitialContext();

            DataSource ds=(DataSource)context.lookup("java:/comp/env/jdbc/TestDB");

            Connection con=ds.getConnection();

            PreparedStatement stm=con.prepareStatement("insert into message values(?,?,?,?,?)");

            stm.setString(1,title);//设置第一个“?”为title

            stm.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("/servlet/ViewMessageServlet");

        requestDispatcher.forward(request,response);

        }

        catch(Exception e)

        {

            e.printStackTrace();        

        }

    }

    public void doPost(HttpServletRequest request,

                          HttpServletResponse response)

            throws IOException, ServletException

    {

            doGet(request,response);

    }

//过滤类 可以防止JavaScript恶意代码存入,等功能

  public String filterHtml(String value){

      value=value.replace("&", "&");

value=value.replace("<", "<");

value=value.replace(">", "$lt;");

      value=value.replace(" ", "&nbps;");

      value=value.replace("'", "'");

      value=value.replace("\\"", "&qot;");

value=value.replace("\\n", "
");

      return value;

      

  }

}

可以看出该类实现了从表单中提取数据并保存到数据库中。

    2.建立查询的

package com.wja.ly;

servlet ViewMessageServlet.Java

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.servlet.*;

import javax.servlet.http.*;

import javax.sql.DataSource;

import java.sql.*;

import java.util.*;

import java.io.*;

public class ViewMessageServlet extends HttpServlet

{

    

    private static final long serialVersionUID = 1L;

    private Connection con;

    public void doGet(HttpServletRequest request,HttpServletResponse response)

        throws IOException, ServletException

    {

Collection ret=new ArrayList();

    //Collection ret=new ArrayList();

        try

        {    

            Context context=new InitialContext();

            DataSource ds=(DataSource)context.lookup("java:/comp/env/jdbc/TestDB");

            Connection con=ds.getConnection();

            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();

        

        }

        

    }

    public void doPost(HttpServletRequest request,

                            HttpServletResponse response)

            throws IOException, ServletException

    {

       doGet(request,response);

    }

}

可以看出该类实现了接受到请求后 执行数据库查询工作,将查询后的结果保存到JavaBean中,接着调用jsp去显示

    3.JavaBean文件

package com.wja.ly;

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方法

    {

        this.name=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 this.name;

    }

    

    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;

    }

}

    4.servlet的配置,首先配置web.Xml文件

    

    xmlns="http://java.sun.com/xml/ns/javaee" 

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    

    DB Connection  

    jdbc/TestDB  

    javax.sql.DataSource  

    Container  

  

  

  

    This is the description of my J2EE component

    This is the display name of my J2EE component

    AddMessageServlet

    com.wja.ly.AddMessageServlet

  

  

    This is the description of my J2EE component

    This is the display name of my J2EE component

    ViewMessageServlet

     com.wja.ly.ViewMessageServlet

  

  

    AddMessageServlet

    /servlet/AddMessageServlet

  

  

    ViewMessageServlet

    /servlet/ViewMessageServlet

  

  

    showMessage2.html

  

其中配置了两个servlet映射与数据库连接池,未来配置数据库连接池还要在META-INT目录下加入一个context.xml文件添加代码为

  

  

  

  

           auth="Container"      

       type="javax.sql.DataSource"      

       driverClassName="com.mysql.jdbc.Driver"      

       url="jdbc:mysql://localhost/demo"      

       username="root"      

       password="root"      

       maxActive="50"      

       maxIdle="20"      

       maxWait="10000" />      

  

至此我们的模型与控制器已经设计好接下来用Dreamweaver来设计填写留言界面showMessage.html与查看留言的viewMessage.Jsp

 message board 

window.onload = function()

{

var oFCKeditor = new FCKeditor( 'content' ) ;

oFCKeditor.BasePath = "/wujunan/fckeditor/" ;

oFCKeditor.Height=400;

oFCKeditor.ReplaceTextarea() ;

}

访客留言板

姓名:

E-mail:

主题:

留言:

查看留言

/////////////////////////////////////////////////////////////////////////////////////

<%@ page contentType="text/html;charset=UTF-8"%>

<%@ page import="java.sql.*,com.wja.ly.*,java.util.*,java.sql.*"%>

 show the message in the table 

所有访客留言


<%

int message_count=0;

        //直接从request对象中去获取所有的记录

Collection messages=(Collection)request.getAttribute("messages");

Iterator it=messages.iterator();

while(it.hasNext())                                                    //遍历所有的记录

{

   MessageBO message=(MessageBO)it.next();   //用message对象存储一条记录 

%>

    cellpadding="0" bordercolordark="#000000" bordercolorlight="#CCCC99">

主题:

     

<%=message.getTitle()%>

留言人:

<%=message.getName()%>E-mail:

<% 

out.println(""+message.getEmail()+"");

%>

留言时间:

<%

out.println(""+message.getDate().toLocaleString()+"");

%>

<%

out.println("("+message_count+")"); 

%>

<%=message.getContent()%>

<%

out.println("


");

message_count++;

%>

我要留言

至此这个项目设计完毕,最后将项目发布到tomcat后打开游览器查看:

http://localhost:8080/wujunan/showMessage2.html

即可:

5:项目总结:

我制作这个网络留言板的目的是在别的web项目中可以方便的添加,实现留言的目的,没有使用更高级的MVC设计模式。其中使用到了3个技术 数据库链接池(提高了程序的效率缓解了多用户同时因为建立链接二造成的执行速度下降),fckediter(方便了编辑留言信息),编写了过滤类(防止在数据库中添加JavaScript恶意代码,还有换行等问题)下载本文

显示全文
专题