2011年7月5日 星期二

Framework 樣板之Spring3.1 MVC Annotation + Hibernate3.6 JPA(三)



版本:Spring3.1 + Hibernate3.6

包含:Displaytag、Tiles 、 OpenSessionInView 及 連接DB

資料庫:MS SQL2005

Schema:在/BlankSpring3/WebContent/dev/sql.txt,為了方便說明,僅用兩張Table。

下載: 原始碼 ,可直接從Eclipse import。


Spring3 MVC + Hibernate3 JPA架構說明:
src下的folder

bean:提供給controller使用的javabean。

controller:提供不同RequestMapping的實作方式,及回傳至頁面方式作參考。

persistence:Hibernate dao,此資料夾階由Myeclipse自動產生。

service:主要的商業邏輯寫在這,依照功能切分不同服務。ex:MemberService包含會員的新增、刪除和修改等。


WEB-INF下的folder

config:必要設定檔。ex: applicationContext.xml,Hibernate基本設定檔。

DataSourceService.xml,DB登入帳密,如果不想用c3p0的connection pool,直接更換此檔即可。

mvc-config.xml,Spring3 基本設定。

tiles-front.xml,tiles2設定。

jsp:主要有三部分,一.layout為tiles的框架;二.front為所有jsp頁面;三. common共用頁面。

細部說明:
Spring3 MVC 主要的優點就是,用annotation取代控制流程及注入的xml,幾乎可以說是0配置。
service:將service implement class加上@Service,以及要注入的dao,加上@Autowired即可。可以不用再寫DAOService.xml。

controller:將每個controller加上@Controller、@RequestMapping,以及要注入的service,加上@Autowired即可。可以不用再寫BaseService.xml、struts-config.xml。

處理client side request 方式
1. 說明:request method必須是get(若要用post就改成RequestMethod.POST),且參數要帶有method=load。
@RequestMapping(params="method=load",method = RequestMethod.GET)
public ModelAndView load() {...}

2. 說明:url 結尾必須要是xxx/login,才會執行此method。HttpServletRequest及HttpServletResponse這兩個參數不一定需要。Users為javabean,會自動將參數塞到bean中,類似struts的formbean。

@RequestMapping(value="/login")
public String test(HttpServletRequest request, HttpServletResponse response,Users userinfo){...}
3. 說明:url為xxx/{id},{id}作為傳遞的參數,接收參數必須加上@PathVariable。

@RequestMapping(value = "/{id}",method=RequestMethod.GET)
public ModelAndView helloWorld(@PathVariable Long id) {...}

Tiles設定:
1. 在mvc-config.xml加入
<bean id="tilesConfigurer" 
 class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
 <property name="definitions">
  <list>
   <value>/WEB-INF/config/tiles-front.xml</value>
  </list>
 </property>
</bean>

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
 <property name="viewResolvers">
  <list>
   <bean id="tilesViewResolver"
    class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass"
     value="org.springframework.web.servlet.view.tiles2.TilesView" />
    <property name="order" value="1" />
   </bean>
   <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/jsp/" />
    <property name="suffix" value=".jsp" />
   </bean>
  </list>
 </property>
</bean>

2. 在/WEB-INF/config/增加tiles-front.xml,範例請下載原始碼。

注意事項:請看