首页 > 代码库 > 练习一:1.开发前奏,使用全注解整合最新版ssh框架
练习一:1.开发前奏,使用全注解整合最新版ssh框架
一。简介:
使用ssh框架开发,版本皆为最新版,具体版本为struts-2.3.30、hibernate-release-5.2.2、spring-framework-4.3.2,需要在jdk8下面运行。如果出现major version 52之类的错误,说明你的jdk版本不合适(51对应的是java 7)。
二。导包:
1.struts2 包,导入struts2-blank里面的jar包以及struts2-spring-plugin-2.3.30包(本项目中控制器action不由spring容器管理)。
2.导入hibernate和MySQL驱动包以及c3p0。
3.导入spring包和aspectj(使用声明式事务管理需要这个,不导入这个启动时就会出错。)
4.更改JRE System Library为jdk8,使用tomcat 8运行。
三。数据库配置
使用MySQL innodb引擎,建立数据库,设置数据库的字符集utf-8。
四。开始整合测试
1.整合spring和Struts2。
①web.xml配置spring容器和Struts2核心filter。
②测试Struts2及spring(略)。
③测试Struts2和spring整合(接口代码略)
服务层代码:
1 package cn.jack.test.service.impl; 2 3 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 import org.springframework.stereotype.Service; 6 7 import cn.jack.test.service.TestService; 8 9 @Service("testService")10 public class TestServiceimpl implements TestService {11 public void say() {12 System.out.println("服务层测试成功");13 }14 15 public static void main(String[] args) {16 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");17 TestService test = (TestService) context.getBean("testService");18 test.say();19 }20 }
控制层代码:
1 package cn.jack.test.action; 2 3 import javax.annotation.Resource; 4 5 import org.springframework.stereotype.Controller; 6 7 import cn.jack.test.service.TestService; 8 9 import com.opensymphony.xwork2.ActionSupport;10 11 @Controller12 public class TestAction extends ActionSupport {13 14 private static final long serialVersionUID = 1L;15 @Resource(name = "testService")16 TestService testService;17 18 @Override19 public String execute() {20 testService.say();21 return SUCCESS;22 }23 24 }
Struts2 配置
1 <action name="test" class="cn.jack.test.action.TestAction">2 <result name="success">WEB-INF/jsp/test/testok.jsp</result>3 </action>
显示正常
2.spring整合hibernate以及ssh框架整合
①.配置dao层,配置在daoContext.xml中
使用property-placeholder属性占位符配置器这个容器后处理器配置数据库;
配置c3p0数据源dataSource 这个spring bean;
配置SessionFactory,使用org.springframework.orm.hibernate5.LocalSessionFactoryBean这个类,并依赖注入数据源(上面定义的dataSource),annotatedClasses属性列出全部持久化类,hibernateProperties属性指定数据库方言、是否自动建表、是否生成SQL语句等;
配置Hibernate的局部事务管理器,使用HibernateTransactionManager类 ,依赖注入SessionFactory ;
<tx:advice 命名空间配置事务增强处理Bean,指定事务管理器,配置详细的事务定义;
AOP配置事务切入服务层。
②实体层,编写Book这个vo,复写toString方法,使用注解,并配置到SessionFactory的annotatedClasses属性中
③复制一个basedao,以及使用泛型的hibernate实现的BaseDaoHibernate5,@Autowired自动装配sessionFactory。(这个是前期准备工作)
④DAO层,Bookdao继承BaseDaoHibernate5,泛型化类型参数,使用@Repository标记这个spring bean。
⑤服务层,编写BookService及BookServiceimpl,并用@Service标记,然后在main方法测试(由于配置事务管理在服务层,所以只能在服务层测试,而不能在DAO层测试)代码如下(暂时只列出增加和显示全部的功能):
1 package cn.jack.test.service.impl; 2 3 import java.util.List; 4 import javax.annotation.Resource; 5 import org.springframework.context.ApplicationContext; 6 import org.springframework.context.support.ClassPathXmlApplicationContext; 7 import org.springframework.stereotype.Service; 8 import cn.jack.test.dao.Bookdao; 9 import cn.jack.test.service.BookService;10 import cn.jack.test.vo.Book;11 12 @Service("bookService")13 public class BookServiceimpl implements BookService {14 15 @Resource(name = "bookDao")16 Bookdao bookdao;17 18 public void addBook(Book book) {19 bookdao.save(book);20 }21 22 @Override23 public List<Book> getAllBooks() {24 return bookdao.findAll(Book.class);25 }26 27 public static void main(String[] args) {28 ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");29 BookService sc = app.getBean("bookService", BookService.class);30 Book bk1 = new Book();31 bk1.setName("Java编程思想");32 bk1.setAuthor("BRUCE ECKEL");33 bk1.setPress("机械工业出版社");34 Book bk2 = new Book("JAVA核心技术 卷2 高级特性", "HORSTMANN", "机械工业出版社");35 Book bk3 = new Book(3, "Java深入解析 透析Java本质的36个话题", "梁勇", "电子工业出版社");36 sc.addBook(bk1);37 sc.addBook(bk2);38 sc.addBook(bk3);39 List<Book> bks = sc.getAllBooks();40 for (Book bk : bks)41 System.out.println(bk.getId() + "**" + bk.getName() + "**"+ bk.getAuthor() + "**" + bk.getPress());42 }43 44 }
经测试,通过
⑥控制层
1 package cn.jack.test.action; 2 3 import java.util.List; 4 5 import javax.annotation.Resource; 6 7 import org.springframework.stereotype.Controller; 8 9 import cn.jack.test.service.BookService;10 import cn.jack.test.vo.Book;11 12 import com.opensymphony.xwork2.ActionSupport;13 14 @Controller15 public class BookAction extends ActionSupport {16 17 private static final long serialVersionUID = 1L;18 @Resource(name = "bookService")19 private BookService bookService;20 private List<Book> books;21 private Book book;22 23 public String list() {24 books = bookService.getAllBooks();25 return "list";26 }27 28 public String addui() {29 return "addui";30 }31 32 public String add() {33 System.out.println(book);34 if (book.getAuthor().length() == 0 | book.getName().length() == 035 | book.getPress().length() == 0)36 return addui();37 System.out.println(book.getName());38 bookService.addBook(book);39 return "redirectlist";40 }41 42 public BookService getBookService() {43 return bookService;44 }45 46 public void setBookService(BookService bookService) {47 this.bookService = bookService;48 }49 50 public List<Book> getBooks() {51 return books;52 }53 54 public void setBooks(List<Book> books) {55 this.books = books;56 }57 58 public Book getBook() {59 return book;60 }61 62 public void setBook(Book book) {63 this.book = book;64 }65 66 }
以及Struts配置:
1 <action name="book_*" class="cn.jack.test.action.BookAction" method="{1}"> 2 <interceptor-ref name="defaultStack" /> 3 <interceptor-ref name="token"> 4 <!-- 哪些方法被令牌拦截器拦截,因为是使用通配符配置,此项必须配置 --> 5 <param name="includeMethods">add</param> 6 </interceptor-ref> 7 8 9 <result name="list" >/WEB-INF/jsp/test/book_list.jsp</result>10 <result name="addui">/WEB-INF/jsp/test/book_add.jsp</result>11 <result name="redirectlist" type="redirectAction">12 <param name="actionName">book_list</param>13 </result>14 <result name="invalid.token">/WEB-INF/jsp/common/invalid.jsp</result>15 </action>
⑦spring配置自动扫描的包。
⑧视图层,使用Struts2标签。
经过测试,一切显示正常。
练习一:1.开发前奏,使用全注解整合最新版ssh框架