1. 程式人生 > >Spring3.3——Spring註解配置、Spring+Struts2整合、s2sh整合

Spring3.3——Spring註解配置、Spring+Struts2整合、s2sh整合

1、零配置

步驟:

(1)在配置檔案啟用“零配置”。

        使用<context:component-scan .../>元素


(2)為Spring Bean添加註解。

           @Component:標註一個普通的Spring Bean類。如果不指定id,預設就該類的類名首字母小寫作為id。
             <bean id="" class=""/>(使用註解就不需要指定class了)
           @Controller:標註一個控制器元件類。
           @Service:標註一個業務邏輯元件類。
           @Repository:標註一個DAO元件類。
           —— 在Java EE應用中,使用這3個註解可能獲得一些額外的好處。
           @Scope – 指定Bean的作用域。
                相當於scope屬性。
           @Resource -配置依賴注入( Spring借用了Java EE的Annotation)。
                相當於ref屬性,且該註解直接支援field注入。
           @PostConstruct和@PreDestroy(修飾方法,Spring借用了Java EE的Annotation)。
             @PostConstruct - 相當於init-method屬性。
             @PreDestroy    - 相當於destroy-method屬性。
           @DependsOn:強制初始化其他Bean
              相當於depends-on屬性
           @Lazy:指定延遲初始化。
               相當於lazy-init屬性
           @Autowired與@Qualifier:自動裝配。@Autowired預設是byType的自動裝配。
           @Qualifier可指定byName的自動裝配。

               相當於autowire屬性

2、Spring+Struts2整合

(1)拷JAR包。(Spring20個包+struts2+commons-logging)


(2)配置Struts 2核心控制器+配置檔案。


(3)配置Web應用在啟動時自動建立Spring容器。

預設載入WEB-INF/applicationContext.xml作為配置檔案

Spring允許通過contextConfigLocation的引數來指定配置檔名


(4)為第三步的Spring提供配置檔案。


(5)新增Struts 2-Spring整合的外掛包struts2-spring-plugin

       ------------------以上為安裝步驟,只要做一次---------------------

       開發過程:
       (1)Action不再主動獲取Service元件;
       (2)Action為Service提供的setter方法務必與Service的配置id要對應。(byName)

eg:

目錄結構:


①在appCtx.xml中配置:

<bean id="bookService" class="service.impl.BookServiceImpl"/>

②Action類——BookAction.java

public class BookAction extends ActionSupport{
	private static final long serialVersionUID = 1L;
	private Book book ;
	private IBookService bookService;
	
	public void setBookService(IBookService bookService) {
		this.bookService = bookService;
	}
	public Book getBook() {
		return book;
	}
	public void setBook(Book book) {
		this.book = book;
	}
	public String add(){
		bookService.add(book);
		return SUCCESS;
	}
}
②Book.java
public class Book {

	Integer id;
	String name;
	String author;
     //setter、getter...
}
③BookServiceImpl.java
public class BookServiceImpl implements IBookService{

	@Override
	public Integer add(Book book) {
		System.out.println("模擬新增圖書: "+book.getName());
		return 1;
	}
}
④struts.xml
<struts>
	<!-- 配置Struts2的的字尾 -->
	<constant name="struts.action.extension" value="action,,"></constant>
	<!-- struts2的開發模式開啟 -->
	<constant name="struts.devMode" value="true" />

	<package name="bookPkg" namespace="/" extends="struts-default">
		<action name="addBook" class="action.BookAction" method="add">
		<result name="error">/WEB-INF/view/error.jsp</result>
			<result>/WEB-INF/view/list.jsp</result>
		</action>
		<!-- 通用 -->
		<action name="*">
			<result>/WEB-INF/view/{1}.jsp</result>
		</action>	
	</package>
</struts>
⑤bookForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>新增圖書</title>
<body>
<div class="container">
<form method="POST" action="addBook">
  <div class="form-group">
    <label for="bookName">圖書名</label>
    <input type="text" class="form-control" id="bookName" placeholder="輸入圖書名"
    name="book.name">
  </div>
  <div class="form-group">
    <label for="bookPrice">圖書價格</label>
    <input type="text" class="form-control" id="bookPrice" placeholder="輸入圖書價格"
    name="book.price">
  </div>
  <div class="form-group">
    <label for="bookAuthor">圖書作者</label>
    <input type="text" class="form-control" id="bookAuthor" placeholder="輸入圖書作者"
    name="book.author">
  </div>  
  <button type="submit" class="btn btn-default">提交</button>
</form>
</div>
</body>
</html>
⑥測試



3、Struts2+Spring+Hibernate整合

步驟:
(1)配置DataSource和SessionFactory
(2)為第一步提供hibernate.cfg.xml配置檔案

eg:

目錄結構



在daoCtx.xml中配置SessionFactory,將dataSource注入sessionFactory


在類路徑下提供hibernate.cfg.xml配置檔案


配置dao實現類,將sessionFactory注入dao中,這樣才能在dao類呼叫sessionFactory


②在appCtx.xml中配置service實現類,將dao注入service中


在appCtx.xml中配置事務


④BookAction.java

public class BookAction extends ActionSupport{

	private static final long serialVersionUID = 1L;

	private Book book ;
	private IBookService bookService;
	private Integer id;
	private List<Book> books;
	
	public String add(){
		Integer id = bookService.add(book);
		
		if (id > 0)
			return SUCCESS;
		else
			return ERROR;
	}
	public String delete(){
		bookService.delete(id);
		return SUCCESS;
	}
	public String list(){
		setBooks(bookService.getAllBooks());
		return SUCCESS;
	}
	public List<Book> getBooks() {
		return books;
	}
	public void setBooks(List<Book> books) {
		this.books = books;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public Book getBook() {
		return book;
	}
	public void setBook(Book book) {
		this.book = book;
	}
	public void setBookService(IBookService bookService) {
		this.bookService = bookService;
	}
}
⑤struts.xml
<package name="bookPkg" namespace="/" extends="struts-default">
		<action name="addBook" class="action.BookAction" method="add">
			<result name="error">/WEB-INF/view/error.jsp</result>
			<result>/WEB-INF/view/list.jsp</result>
		</action>
		
		<action name="addBookView">
			<result>/WEB-INF/view/bookForm.jsp</result>
		</action>
		
		<action name="deleteBook" class="action.BookAction" method="delete">
			<result type="chain">listBooks</result>
		</action>
		<action name="listBooks" class="action.BookAction" method="list">
			<result>/WEB-INF/view/list.jsp</result>
		</action>
		<!-- 通用 -->
		<action name="*">
			<result>/WEB-INF/view/{1}.jsp</result>
		</action>	
	</package>

⑥測試



在執行中使用jstl發現錯誤:


原因:沒有匯入jstl包及standard包