Javaweb实现简易的留言板项目

首语

  • 欢迎大家来我的个人网站逛逛。有什么建议可以留言!

网站地址:http://www.yanghujun.com

此项目使用Eclipse+mysql 5.0+Tomcat v7.0开发,实现的主要功能有增加留言,查询留言。附加用户的登录和注册。修改、删除和回复留言还未设计,望大家补充。
此留言板为Javaweb基础练习项目,供Javaweb入门者参考学习,共同进步。

GitHub下载地址:MessageBoard

一、JavaBean层的设计

数据表参数的获取。

主要是生成数据表字段的get,set方法,对数据进行设置和获取。

数据库连接和操作

/**数据库连接*/
public class DBConn {

 public static Connection conn;
  // Connection对象(链接)
  // 连接数据库
  public static Connection getConn() {
     try {
       // 加载注册SQLSever的JDBC驱动
       Class.forName("com.mysql.jdbc.Driver");
       // 编写链接字符串,创建并且获取链接
       conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/MessageBoard","root","root");
     } catch (Exception e) {
       e.printStackTrace();
     }
     return conn;
  }

  public static void CloseConn() {
     try {
       conn.close();
     } catch (Exception e) {
       e.printStackTrace();
     }
  }

  public static void main(String[] args) {
     Connection conn=DBConn.getConn();
     if(conn!=null) {
       System.out.println("数据库连接正常");
     }else {
       System.out.println("数据库连接失败");
     }
  }
}



/**数据库操作*/
public class LoginDao {

  Connection conn = DBConn.getConn();
  // 数据库连接对象
  PreparedStatement pstmt;
  
  public Login checkLogin(String name, String password) {
     // 验证用户名密码
     try {
       pstmt = conn.prepareStatement("select*from logins where name=?and password=?");
       pstmt.setString(1, name);
       // 设置SQL语句参数
       pstmt.setString(2, password);
       // 设置SQL语句参数
       ResultSet rs = pstmt.executeQuery();
       // 执行查询,返回结果集
       if (rs.next()) {
         // 通过JavaBean保存值
         Login login = new Login();
         login.setId(rs.getInt(1));
         login.setName(rs.getString(2));
         login.setPassword(rs.getString(3));
         login.setRole(rs.getInt(4));
         return login;
         // 返回JavaBean对象
       }
       return null;
       // 验证失败返回null
     } catch (Exception e) {
       e.printStackTrace();
       return null;
     }
  }

  //留言查询
  public ArrayList findMbInfo() {
     try {
       ArrayList al = new ArrayList();
       pstmt = conn.prepareStatement("select *from messages");
       ResultSet rs = pstmt.executeQuery();
       while (rs.next()) {
         MessBor mb = new MessBor();
         mb.setId(rs.getInt(1));
         mb.setName(rs.getString(2));
         mb.setTime(rs.getDate(3));
         mb.setTitle(rs.getString(4));
         mb.setMessage(rs.getString(5));
         al.add(mb);
       }
       return al;
     } catch (Exception e) {
       e.printStackTrace();
       return null;
     }
  }
  
  public String getName(int id) {
     String name = null;
     try {
       pstmt = conn.prepareStatement("select namefrom logins where id=?");
       pstmt.setInt(1, id);
       ResultSet rs = pstmt.executeQuery();
       while (rs.next()) {
         name = rs.getString(1);
       }
       return name;
     } catch (Exception e) {
       e.printStackTrace();
       return null;
     }
  }
 
 //添加留言
  public boolean addInfo(MessBor mb) {
     try {
       pstmt = conn.prepareStatement("insert intomessages values(?,?,?,?,?)");
       pstmt.setInt(1, mb.getId());
       pstmt.setString(2, mb.getName());
       pstmt.setDate(3, mb.getTime());
       pstmt.setString(4, mb.getTitle());
       pstmt.setString(5, mb.getMessage());
       pstmt.executeUpdate();
       return true;
     } catch (Exception e) {
       e.printStackTrace();
       return false;
     }
  }
  
  //用户注册
  public boolean insertUser(int id, String name, String password) {
     try {
       pstmt = conn.prepareStatement("insert into
logins(id,name,password,role) values(?,?,?,?)");
       pstmt.setInt(1, id);
       pstmt.setString(2, name);
       pstmt.setString(3, password);
       pstmt.setInt(4, 0);
       pstmt.executeUpdate();
       return true;
     } catch (Exception e) {
       e.printStackTrace();
       return false;
     }
  }
}


二、jsp页面设计

jsp页面主要包括登陆和注册页面,留言主页面,留言界面。



  

登录界面

账号:
密码:
  注册




  

注册界面

ID:
登录名:
密码:

登录




  

这里是留言板主界面

<% ArrayList al = new ArrayList(); al = (ArrayList) session.getAttribute("al"); if (al != null) { Iterator iter = al.iterator(); while (iter.hasNext()) { MessBor mb = (MessBor) iter.next(); %> <% } } %>
所有留言信息
留言人姓名 留言时间 留言标题 留言内容
<%=new LoginDao().getName(mb.getId())%> <%=mb.getTime().toString()%> <%=mb.getTitle()%> <%=mb.getMessage()%>
留言




  

请留言

填写留言信息
留言标题
留言内容
返回留言板界面

三、servlet设计

servlet主要实现登录,注册,留言等功能。


/**登录操作*/
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
  private static final long serialVersionUID = 1L;

  public LoginServlet() {
     super();
  }

  public void doGet(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
     // 设置请求编码
     request.setCharacterEncoding("utf-8");
     // 设置响应编码
     response.setContentType("utf-8");
     LoginDao loginDao = new LoginDao();
     HttpSession session = request.getSession();
     // 先获得user对象,如果是第一次访问该Servlet,用户对象肯定为空,
     //但如果是第二次甚至是第三次,就不应该再判断该用户的信息
     Login l = (Login) session.getAttribute("login");
     if (l == null)
       l = loginDao.checkLogin(request.getParameter("name"), request.getParameter("password"));
     if (l != null) {
       // 如果登陆成功
       session.setAttribute("login", l);
       // 将获取的对象保存在session中
       ArrayList al = loginDao.findMbInfo();
       // 获取留言板的内容,返回一个数组
       session.setAttribute("al", al);
       // 把数组保存起来
       response.sendRedirect("main.jsp");
       // 验证成功跳转到 main.jsp
     } else {
       // 验证失败跳转到 error.jsp
       response.sendRedirect("error.jsp");
     }
     if(session!=null) {
       response.sendRedirect("login.jsp");
     }
  }

  public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
     doGet(request, response);
  }
}
 


/**注册操作*/
@WebServlet("/RegisterServlet")
public class RegisterServlet extends HttpServlet {
  private static final long serialVersionUID = 1L;

  public RegisterServlet() {
     super();
      }

  public void doGet(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
       //设置请求编码
     request.setCharacterEncoding("utf-8");
     //获取字段
     int id = Integer.valueOf(request.getParameter("id"));
     String name = request.getParameter("name");
     String password = request.getParameter("password");
     if (new LoginDao().insertUser(id, name, password)) {
       //注册成功,跳转到登录界面
       response.sendRedirect("login.jsp");
     }
  }

  public void doPost(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
     doGet(request, response);
  }
}



/**留言操作*/
@WebServlet("/LeaveMessage")
public class LeaveMessage extends HttpServlet {
  private static final long serialVersionUID = 1L;
  public LeaveMessage() {
     super();
  }

  protected void doGet(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
     // 设置请求编码        
     request.setCharacterEncoding("utf-8");         
     // 设置响应编码        
     response.setContentType("utf-8");         
     // 获取title内容         
     String title=request.getParameter("title");        
     // 获取message内容         
     String message=request.getParameter("message");         
     // 从session中取出当前用户对象         
     Login leaveMessageBoard=(Login) request.getSession().getAttribute("login");        
     // 建立留言表对应JavaBean对象,把数据封装进去        
     MessBor mb=new MessBor();        
     mb.setId(leaveMessageBoard.getId());        
     // 参数为获取的当前时间         
     mb.setName(leaveMessageBoard.getName());         
     mb.setTime(new Date(System.currentTimeMillis()));          
     mb.setTitle(title);         
     mb.setMessage(message);       
     // 调DB类中的方法判断是否插入成功         
     if(new LoginDao().addInfo(mb)){           
       response.sendRedirect("success.jsp") ;         
       }
  }

  protected void doPost(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
     doGet(request, response);
  }
}



四、数据库设计

/*注册表和留言表*/

CREATE TABLE `logins` (
  `id` int(11) NOT NULL,
  `name` varchar(20) NOT NULL,
  `password` varchar(20) NOT NULL,
  `role` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-------------------------------------------------------------------
CREATE TABLE `messages` (
  `id` int(11) NOT NULL,
  `name` varchar(20) NOT NULL,
  `time` varchar(20) NOT NULL,
  `title` varchar(20) NOT NULL,
  `message` varchar(60) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

小结:

本项目采用MVC设计模式(所谓MVC:模型(model)-视图(view)-控制器(controller),它是用一种业务逻辑、数据与界面显示分离的方法来组织代码,将众多的业务逻辑聚集到一个部件里面,在需要改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,达到减少编码的时间。是一种软件设计典范。),主要学习数据库与jsp和servlet的综合使用,也是本项目的难点。本项目已上传到GitHub,供大家下载使用。

你可能感兴趣的:(Java学习)