此项目使用Eclipse+mysql 5.0+Tomcat v7.0开发,实现的主要功能有增加留言,查询留言。附加用户的登录和注册。修改、删除和回复留言还未设计,望大家补充。
此留言板为Javaweb基础练习项目,供Javaweb入门者参考学习,共同进步。
GitHub下载地址:MessageBoard
主要是生成数据表字段的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页面主要包括登陆和注册页面,留言主页面,留言界面。
登录界面
这里是留言板主界面
留言
请留言
返回留言板界面
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,供大家下载使用。