Spring学习之旅(九) 综合利用之前的框架完成主页
2016-12-28 16:31
495 查看
辛苦堆砌,转载请注明出处,谢谢!
今天利用之前的框架,完成剩余的主页部分,先看看实体类Message
另外,在做这一部分过程中,发现POST的message内容乱码,但是查看了各个位置,都标记了UTF-8编码,后来发现是Spring Security引起的,可以看看我的这篇文章。
现在,Spring的学习旅程基本完成了,但这不代表这就是全部,Spring的好东西实在是太多了。。。根本停不下来
今天利用之前的框架,完成剩余的主页部分,先看看实体类Message
package com.yjp.springmvc.blog.beans.model; import java.io.Serializable; import java.util.Date; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; @Entity @Table(name="messages") public class Message implements Serializable { private static final long serialVersionUID = 3939608685011245576L; @Id @GeneratedValue(generator = "uuid") @GenericGenerator(name = "uuid", strategy = "uuid") private String id; @ManyToOne(cascade={CascadeType.MERGE}) @JoinColumn(name="username", nullable=false) private User user; @Column(nullable=false) private Date date; @Column(nullable=false) private String txt; public Message() {} public Message(Date date, String txt, User user) { this.date = date; this.txt = txt; this.user = user; } public String getId() { return id; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public String getTxt() { return txt; } public void setTxt(String txt) { this.txt = txt; } }值得注意的一点是使用了@ManyToOne,完成了Message和User的外键关联,Message和User是多对一的关系,Message以User的username为外键。再来看看MessageRepository的接口
package com.yjp.springmvc.blog.beans.repository; import java.util.List; import com.yjp.springmvc.blog.beans.model.Message; public interface MessageRepository { List<Message> findMessagesByUsername(String username); void save(Message msg); void delete(String id); }实现
package com.yjp.springmvc.blog.beans.repository; import java.util.List; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.query.Query; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import com.yjp.springmvc.blog.beans.model.Message; @Repository public class MessageRepositoryImpl implements MessageRepository { private SessionFactory sessionFactory; @Autowired public MessageRepositoryImpl(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } @Override public List<Message> findMessagesByUsername(String username) { Session session = currentSession(); session.beginTransaction(); String hql = "from Message as message where message.user.username=:username"; Query<Message> query = session.createQuery(hql, Message.class); query.setParameter("username", username); List<Message> messages = query.getResultList(); session.getTransaction().commit(); return messages; } @Override public void save(Message msg) { Session session = currentSession(); session.beginTransaction(); session.save(msg); session.getTransaction().commit(); } @SuppressWarnings("rawtypes") @Override public void delete(String id) { Session session = currentSession(); session.beginTransaction(); String hql = "delete Message as message where message.id=:id"; Query query = session.createQuery(hql); query.setParameter("id", id); query.executeUpdate(); session.getTransaction().commit(); } private Session currentSession() { return sessionFactory.getCurrentSession(); } }查询和删除使用了HQL,接下来是MessageService
package com.yjp.springmvc.blog.beans.service; import java.util.List; import com.yjp.springmvc.blog.beans.model.Message; import com.yjp.springmvc.blog.beans.model.User; public interface MessageService { void addMessage(Message msg); List<Message> getUserMessages(User user); void deleteMessage(String id); }实现
package com.yjp.springmvc.blog.beans.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.yjp.springmvc.blog.beans.model.Message; import com.yjp.springmvc.blog.beans.model.User; import com.yjp.springmvc.blog.beans.repository.MessageRepository; @Service public class MessageServiceImpl implements MessageService { private MessageRepository messageRepository; @Autowired public MessageServiceImpl(MessageRepository messageRepository) { this.messageRepository = messageRepository; } @Override public void addMessage(Message msg) { messageRepository.save(msg); } @Override public List<Message> getUserMessages(User user) { return messageRepository.findMessagesByUsername(user.getUsername()); } @Override public void deleteMessage(String id) { messageRepository.delete(id); } }没有什么特殊的,我们的控制器
package com.yjp.springmvc.blog.web.controller; import java.util.Date; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import com.yjp.springmvc.blog.beans.model.Message; import com.yjp.springmvc.blog.beans.model.User; import com.yjp.springmvc.blog.beans.service.MessageService; @Controller public class HomeController { private MessageService messageService; @Autowired public HomeController(MessageService messageService) { this.messageService = messageService; } @RequestMapping(method=RequestMethod.GET, value="/") public String home(Model model) { refreshModel(model); return "home"; } @RequestMapping(method=RequestMethod.GET, value="/delete") public String delete(@RequestParam String id, Model model) { messageService.deleteMessage(id); refreshModel(model); return "home"; } @RequestMapping(method=RequestMethod.POST, value="/message") public String message(@RequestParam String message, Model model) { if (!message.isEmpty()) { Message msg = new Message(new Date(), message, getCurrentUser()); messageService.addMessage(msg); } refreshModel(model); return "home"; } private void refreshModel(Model model) { model.addAttribute("messages", messageService.getUserMessages(getCurrentUser())); model.addAttribute("username", getCurrentUser().getUsername()); } private User getCurrentUser() { //通过Spring Security获取当前的用户 User user = (User) SecurityContextHolder.getContext() .getAuthentication() .getPrincipal(); return user; } }基于之前的基础,看懂这个也没什么问题,我都不想说什么了XD,最后是JSP
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page isELIgnored="false"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <!DOCTYPE html"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>简微</title> <link rel="stylesheet" href="resources/css/home.css" type="text/css"> </head> <body> <div class="leftPanel"> <img src="resources/images/logo.png" alt="简微" /><br><br> <form method="post" action="logout" style=""> <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> <button type="submit">注销 ${username}</button> </form> </div> <form method="post" action="message"> 说说你的事...<br><br> <textarea cols="60" rows="4" name="message" placeholder="输入您的内容"></textarea><br><br> <button type="submit">送出</button> <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> </form> <table style="text-align: left; width: 510px; height: 88px; border='0'; cellpadding='2'; cellspacing='2'"> <thead> <tr> <th><hr></th> </tr> </thead> <tbody> <c:forEach var="message" items="${messages}"> <tr> <td style="vertical-align: top;"> ${message.user.username}<br> <c:out value="${message.txt}"/><br> <fmt:formatDate value="${message.date}" type="both" dateStyle="full" timeStyle="full"/> <a href="delete?id=${message.id}">删除</a> </td> </tr> </c:forEach> </tbody> </table> </body> </html>这样就全部完成了,可以运行测试一下。
另外,在做这一部分过程中,发现POST的message内容乱码,但是查看了各个位置,都标记了UTF-8编码,后来发现是Spring Security引起的,可以看看我的这篇文章。
现在,Spring的学习旅程基本完成了,但这不代表这就是全部,Spring的好东西实在是太多了。。。根本停不下来
相关文章推荐
- 终于完成了Struts+spring+hibernate框架的学习
- 00 写在Spring 框架学习之前
- 00 写在Spring 框架学习之前
- 00 写在Spring 框架学习之前
- 00 写在Spring 框架学习之前
- 00 写在Spring 框架学习之前
- 00 写在Spring 框架学习之前
- Spring学习之旅(四) 完成简单微博项目的整体框架
- 00 写在Spring 框架学习之前
- 00 写在Spring 框架学习之前
- 00 写在Spring 框架学习之前
- 00 写在Spring 框架学习之前
- 00 写在Spring 框架学习之前
- 框架学习之Spring 前言
- 框架学习之Spring 第二节 采用Spring管理Bean和依赖注入
- Spring学习框架图
- 框架学习之Spring 第四节 Spring集成JDBC组件开发
- 框架学习之Spring 第三节 采用Spring实现AOP功能
- 框架学习之Spring 第五节 SSH整合开发[Spring2.5+Hibernate3.3+Struts2]
- 框架学习之Spring 第四节 Spring集成JDBC组件开发