!!!!!!!先不要用具体代码,没改好!!!!!!!!
用 Java 实现评论功能,这节是实现评论,之后会补充回复功能,下面是效果图(此处不会详解页面的设计,哈哈哈,因为页面也不是我设计的,而且这个页面还被我玩坏了)
其实和我上一篇博客的知识很是相近
1. 创建数据库 (使用 MySQL 数据库)
2. 创建 Comment 类(评论)、Reply 类(回复)
3. 连接数据库
4. 将相应的添加评论进数据库
5. 添加回复进数据库
6. 从数据库中取出元素并创建 Comment 或 Reply 类,并将其放进 commentList 或 replyList 中
7. 在 jsp 页面中循环数组,将需要的数据进行展示即可
下面分开来看代码:
1. 创建数据库 (使用 MySQL 数据库)
Comment 数据库下的两个表
1. Comment 表
create table Comment(
comment_id serial NOT NULL, //评论id号
user_id varchar(11), //用户id号
content varchar(50), //评论内容
createtime varchar(25) //创建评论的时间
);
2. Reply 表
create table Reply(
comment_id serial NOT NULL, //评论id号
user_id varchar(11), //用户id号
replyuser_id varchar(11), //被回复用户的id号
content varchar(50), //评论内容
createtime varchar(25) //创建评论的时间
);
2. 创建 Comment 类(评论)、Reply 类(回复)
记得将这两个类创建成 javaBeans 的形式,即每一个变量都是 private ,而且都有相应的 get 和 set 的方法。
Comment 类有以下变量
private int comment_id; //评论id号 int
private String user_id; //用户id varchar(11)
private String username; //用户名 varchar(10)
private String content; //评论内容 varcar(50)
private String createtime; //评论时间 varchar(25)
Reply 类有以下变量
private int comment_id; //评论id int
private String user_id; //用户id varchar(11)
private String username; //用户名 varchar(10)
private String replyuser_id; // 被回复人id varchar(11)
private String content; //回复内容 varchar(50)
private String createtime; //回复时间 varchar(25)
3. 连接数据库
public class BaseDao {
public Connection getConnection() {
// 相关参数的设置
String username = "root";// 数据库用户名
String password = "**********";// 数据库密码
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/comment";
// 数据库的连接
try {
Class.forName(driver);
return DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}
4. 将相应的添加评论进数据库 ( 4,5,6 点都在 CommentServlet 的方法中实现)
先在 init() 方法中连接数据库
Connection dbconn = null;
public void init() throws ServletException {
dbconn = new BaseDao().getConnection();
}
public void addComment(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
try {
HttpSession session = request.getSession();
String user_id = (String) session.getAttribute("user_id");// 得到该登录用户的id号
String content = new String(request.getParameter("content").getBytes("iso-8859-1"), "utf-8");
String createtime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
String sql = "insert into Comment(user_id,content,createtime) value(?,?,?)";
try {// 将评论添加进数据库
PreparedStatement pstmt = dbconn.prepareStatement(sql);
pstmt.setString(1, user_id);
pstmt.setString(2, content);
pstmt.setString(3, createtime);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
ListComment display = new ListComment(dbconn);//将数据库中的评论及回复信息加载出来并进行显示
display.listComment(request, response);
}
一般带有评论功能的网站都是需要登录的,所以先把该用户的 user_id 放在 session 中,然后再取出即可。下面同样
5. 添加回复进数据库
public void addReply(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
try {
String replyuser_id = request.getParameter("replyuser_id");// 得到被评论用户的id号
HttpSession session = request.getSession();// 得到该登录用户的id号
String user_id = (String) session.getAttribute("user_id");
String content = new String(request.getParameter("content").getBytes("iso-8859-1"), "utf-8");// 评论
String createtime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());// 时间
String sql = "insert into reply(replyuser_id,user_id,content,createtime) value(?,?,?,?)";
// 将回复添加进comment数据库 中的 reply表
try {
PreparedStatement pstmt = dbconn.prepareStatement(sql);
pstmt.setString(1, replyuser_id);
pstmt.setString(2, user_id);
pstmt.setString(3, content);
pstmt.setString(4, createtime);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
ListComment display = new ListComment(dbconn);//将数据库中的评论及回复信息加载出来并进行显示
display.listComment(request, response);
}
6. 从数据库中取出元素并创建 Comment 或 Reply 类,并将其放进 commentList 或 replyList 中
public void listComment(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
List commentList = new ArrayList();// 评论数组
List replyList = new ArrayList();// 回复数组
String commentSql = "select * from Comment";
String replySql = "select * from Reply";
PreparedStatement pstmt;
try { // 添加评论
pstmt = dbconn.prepareStatement(commentSql);
ResultSet rst = pstmt.executeQuery();
while (rst.next()) {
int comment_id = rst.getInt("comment_id"); //得到数据库中的数据
String user_id = rst.getString("user_id");
//得到用户名,需要在 Comment 数据库中有一个User 表,该表中至少 含有 user_id 和 username 两个属性(下同)
String username = getUserName(user_id);
String content = rst.getString("content");
String createtime = rst.getString("createtime");
Comment comment = new Comment();//创建 Comment 类
comment.setComment_id(comment_id);
comment.setUser_id(user_id);
comment.setUsername(username);
comment.setContent(content);
comment.setCreatetime(createtime);
commentList.add(comment);// 将此评论添加到数组中
}
} catch (SQLException e) {
e.printStackTrace();
}
try { // 添加回复
pstmt = dbconn.prepareStatement(replySql);
ResultSet rst = pstmt.executeQuery();
while (rst.next()) {
int comment_id = rst.getInt("comment_id"); //得到数据库中相应数据
String user_id = rst.getString("user_id");
String replyuser_id = rst.getString("replyuser_id");
String username = getUserName(user_id);
String content = rst.getString("content");
String createtime = rst.getString("createtime");
Reply reply = new Reply(); //创建 reply 类
reply.setComment_id(comment_id);
reply.setUser_id(user_id);
reply.setUsername(username);
reply.setReplyuser_id(replyuser_id);
reply.setContent(content);
reply.setCreatetime(createtime);
replyList.add(reply);// 将此评论添加到数组中
}
} catch (SQLException e) {
e.printStackTrace();
}
HttpSession session = request.getSession(); //得到 session
session.setAttribute("commentList", commentList); //将 评论数组 和 回复数据 均放入 session 中
session.setAttribute("replyList", replyList);
RequestDispatcher rd = request.getRequestDispatcher("HavaAComment.jsp");//跳转至评论显示页面
rd.forward(request, response);
}
得到 username 的方法,得到用户名,需要在 Comment 数据库中有一个User 表,该表中至少 含有 user_id 和 username 两个属性
public String getUserName(String user_id) {
String sql = "select username from user where user_id=?";
String username = null;
try {
PreparedStatement pstmt = dbconn.prepareStatement(sql);
pstmt.setString(1, user_id);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
username = rs.getString("username");
}
} catch (SQLException e) {
e.printStackTrace();
}
return username;
}
7. 在 jsp 页面中循环数组,将需要的数据进行展示即可(就是因为这里还没有完成,所以导致回复功能还没有完成)
下面的 HaveAComment.jsp 可能有些细节问题,因为这是我从中截取出来的,但是核心内容已经写在了下面。
Leave a comment
上面就是评论功能的大概实现,还没有回复,改日定会回来加上。