一、开发环境
开发软件:Eclipse IDE
开发语言:JSP
数据库:MySQL(用了C3P0连接池连接数据库)
二、思路介绍
开发思路参考上一个版本(博客链接)。
三、数据库结构
同上一个版本。
四、JAVA核心代码展示
核心代码解决的问题还是留言和留言回复字符串的拆分问题。这次主要用到的是String类的split(String regex)方法,不清楚的同学可参考JAVA文档
1.查询留言的代码如下:
/**
* 查询该用户所有留言记录,并按时间排序
*
* @param gid
* @return
*/
public ArrayList<Message> SelectUserMessage(int gid) {
ArrayList<Message> message = new ArrayList<>();
Connection conn = null;
PreparedStatement ps = null;
ResultSet res = null;
String sql = "SELECT * FROM usermessage WHERE guid = ? ORDER BY writetime DESC";
try {
conn = C3P0Util.getConnection();
ps = conn.prepareStatement(sql);
ps.setInt(1, gid);
res = ps.executeQuery();
// 数据处理
while (res.next()) {
message.add(getMessage(res));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (res != null)
res.close();
if (ps != null)
ps.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return message;
}
2.核心代码1中调用的getMessage()方法,代码如下:
/**
* 将查询结果转换为message对象
*
* @param res
* @return
*/
private Message getMessage(ResultSet res) {
Message message = new Message();
User user = null;
try {
message.setId(res.getInt("MessageId"));
message.setWuid(res.getInt("wuid"));
user = UserService.selectoneuser(message.getWuid());
message.setWname(user.getName());
message.setWimg(user.getUserimg());
message.setGuid(res.getInt("guid"));
message.setMsgtext(res.getString("MessageText"));
if(res.getString("ReplyMessage")!=null&&res.getString("ReplyMessage").length()>0)
message.setReptext(selectUserReplyMessage(res.getString("ReplyMessage")));
message.setWritetime(res.getString("writetime"));
} catch (SQLException e) {
e.printStackTrace();
}
return message;
}
3、在核心步骤2中调用的selectUserReplyMessage()方法,即拆分回复字符串的代码
/**
* 查询留言回复信息
*
* @param content
* @return Reply回复集合
*/
public ArrayList<Reply> selectUserReplyMessage(String content) {
content = content.trim();
String[] one_msg = content.split(">");
String[] one_msg_info = null;
ArrayList<Reply> replys = new ArrayList<>();
User user = new User();
UserDao dao = new UserDao();
for (String value : one_msg) {
one_msg_info = value.split("<");
Reply re = new Reply();
for (int i = 0; i < one_msg_info.length; i++) {
if (i == 0) {
re.setId(Integer.parseInt(one_msg_info[0]));
user = dao.selectoneuser(re.getId());// 查询用户name和头像路径
re.setImg(user.getUserimg());
re.setName(user.getName());
}
if (i == 1)
re.setContent(one_msg_info[1]);
if (i == 2)
re.setTime(one_msg_info[2]);
}
replys.add(re);
}
return replys;
}
五、Servlet和HTMl代码说明
Servlet:这个没啥说的,就(接收数据>检查数据>封装数据>调用DAO层方法>返回数据)
HTML:这次优化了很多的HTML代码,用EL表达式和JSTl真的很方便,不需要再在html页面写很多的逻辑。
六、运行效果截图
1.用户登录(默认账户:账号:minghue,密码:123)
2.首页
3.留言模板n运行效果
七、项目源码及结语
这个项目还有些功能没有完善,比如还想做管理员身份登录,审核和删除留言,用户自己删除自己的留言等等,有兴趣的朋友可以研究研究。项目源码在优快云下载和QQ群里。(群号在上个版本博客的末尾,群里禁止一切广告,广告一次送永久套餐)