ApplicationContext ctx
1,定義資源文件獲得資源文件的消息,國際化信息
<bean id="messageResource" class="org.springFramework.context.support.ResourceBoundleMessageSource">
<property name="basenames">
xxxx
</property>
</bean>
將會搜索xxxx.properties,xxxx_zh.properties ,xxxx_ch.properties等。
2,
程序里使用資源文件 :ctx.getMessage('key',arg);
頁面上使用資源文件:<spring:message code="keyxxx"/>
3,使用其他文件。
Resource rs = ctx.getResource("classpath:config.properties");
File file = rs.getFile();
目錄規則:
file:c:/test。txt
/config.properties
classpath:config.properties
三種方式。
4,事件傳播
不過沒有找到ApplicationListener這個類。
5, WebApp獲取ApplicaionContext的方法,
首先是在web。xml中進行配置,可以配置成一個listener,也可以配置成一個servlet。
然后程序里使用WebApplicationContextUtils.getWebApplicationContext.獲得飲用。
6,Spring可以和很多框架進行集成。
Struts+Spring,Webwork+Spring。
7,Spring可以有自己的調度類,DispatherServlet。
使用的配置文件就是beans的配置,名字可以隨便取。
8,Sping配置文件(具體名字見web.xml中對ContextLoaderServlet的參數)類似于Struts的配置文件。
定義viewer使用的是系統類:
org.springframework.web.servlet.view.InternalResourceViewResolver
Request mapping 使用的系統類:
org.springframework.web.servlet.handler.SimpleUrlHandleMapping
對Action的定義使用自定義類,但這些類都是下面類的子類:
SimpleFormController
Actoin的屬性包括:
1,跳轉的頁面,和view關聯
2,封裝form類,就是一個普通的javabean。
9,Acition類的內容,
實現onsubmit( 封裝的form,異常對象) 返回一個ModelAndView。
ModelAndView用字符串初始化,字符串來自Action的兩個跳轉view名稱。
還可以把Map傳入ModelAndView構造函數,用來返回消息。
10,Spring自帶的數據驗證功能。
10.1,驗證類作為Aciotn的一個名為“validator”的屬性在配置文件中配置。
此類繼承org.springframework.validation.Validator
需要實現兩個接口,support(傳入一個類),驗證此類是否是Action對應的form類。
validator(object obj,Errors err )首先把obj轉為form類對象,如果有錯誤放到errors里,用法和
struts類似。
10.2,表現層頁面需要的顯示錯誤
全部錯誤:
<spring:bind path="command.*">
//遍歷status.errorMessages
</spring:bind>
單個錯誤:
<spring:bind path="command.username">
<input type="text" value="${staus.value}" name="${status.expression}">
<c:if test="${status.error}">
//遍歷status.errorMessages
</c:if>
</spring:bind>
如果已經在Action中配置了commandName,那么就不使用command了,而是使用配置的名字
<bean id=‘loginActoni’>
<property name="commandName">
<value>RegisterInfo</value>
</property>
</bean>
11, 異常處理
在Dispather的配置文件中配置
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
定義兩個屬性:
<property name="defaultErrorView">
<property name="exceptionMapping">
<props>
<prop key="java.sql.SQLException">sss</prop>
<prop key="java.lang.RuntimeException">yyy</prop>
</props>
</property>
可以按不同異常映射到不同的頁面。
異常頁面從request.getAttribute("Exception")取得Exception對象。顯示他的message屬性。
12,國際化
看完1后,補充如下:
Spring判斷用戶Locale的方式有三種,request中取,session中取,cookie中取客戶端的locale。
分別用三個類,配置到配置文件中。
13,數據持久層(重要)對事務的封裝
Spring是依賴容器的參數化事務管理不用寫代碼。
見p67。
1,在配置文件中配置完數據源,
2,之后配置事務管理的bean,數據源是它的屬性。
3,DAO,事務員是它的屬性。
4,事務beanDAOProxy,事務策略,事務bean,DAO都是它的屬性。
14,數據持久層,對JDBC的封裝
org.springframework.jdbc.core.JdbcTemplate.
JdbcTemplate jdbctemplate = new JdbcTemptlate( datasource );
jdbctemplate.update("xxxxx");
jdbctemplate.update("xxxxx",new PreparedStatementSetter(){
public void setValues( PreparedStatementSetter ps ){
ps.setInt(1,15);
ps.setString(2,"jjjjjjj");
}
});
jdbctemplate.query("select ...",new RollbackHandler(){
public void processRow( ResultSet rs ){
User user = new User();
user.setName= rs.getString("name");
userList.add( user );
}
});
.call()可以調用存儲過程。
query,update還有很多不同版本的實現。
15, JDBC封裝還要引入事務管理機制,默認是沒有事務的。
兩種方式
1,代碼控制的,在DAO里TransactionTemplate使用它的方法。
2,參數化配置的事務。配置一個ProxyDAO,不用寫這個類,只需要在配置文件里增加他對DAO的事物設置。
使得DAO代碼十分簡潔。
測試代碼:
InputStream is = new FileInputStream("xxx.xml");
XmlBeanFactory factory = new XmlBeanFactoy( is );
UserDAO dao = (UserDAO)factory.getBean("ProxyDAO");
dao.insert();//這樣就行了
16,Hibernate in Spring
只需修改配置文件增加一個bean名字為sessionFactory,數據源作為他的屬性。
TrsactionManager的屬性:sessionFactory
IDAO接口:定義數據庫操作方法。
DAO的屬性:sessionFactory。繼承HibernateDAOSupport,并實現IDAO接口。
里面使用getHibernateTemplate模版進行數據庫操作。
ProxyDAO的屬性:transactionManager,DAO.
測試例子:
IUserDAO dao=(IUserDAO)factory.getBean("ProxyUserDAO");
User user = new User();
user.setxxx...
dao.insertOrUpdate(user);