首页 > 代码库 > 练习一: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 }
View Code

控制层代码:

技术分享
 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 }
View Code

Struts2 配置

技术分享
1 <action name="test" class="cn.jack.test.action.TestAction">2         <result name="success">WEB-INF/jsp/test/testok.jsp</result>3         </action>
View Code

显示正常

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 }
View Code

经测试,通过

⑥控制层

技术分享
 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 }
View Code

以及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>
View Code

 

⑦spring配置自动扫描的包。

⑧视图层,使用Struts2标签。

 经过测试,一切显示正常。

练习一:1.开发前奏,使用全注解整合最新版ssh框架