java 实现评论功能

!!!!!!!先不要用具体代码,没改好!!!!!!!!

用 Java 实现评论功能,这节是实现评论,之后会补充回复功能,下面是效果图(此处不会详解页面的设计,哈哈哈,因为页面也不是我设计的,而且这个页面还被我玩坏了)

java 实现评论功能_第1张图片

其实和我上一篇博客的知识很是相近

     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



上面就是评论功能的大概实现,还没有回复,改日定会回来加上。

 

 

你可能感兴趣的:(Java编码笔记,Web)