最近一直在編寫基於IOC與AOP的web開發框架,有點模仿spring的意思。IOC部分已經差很少了,正在編寫persistence部分。目前所在的公司,初來乍到,並且公司軟件方面之前沒有積累,沒有能直接使用的開發框架,但是如今項目狀況有變,可能留給我本身編寫框架的時間不是太夠,爲了以防萬一,先來套Struts2,spring3,hibernate的整合框架用用,因而開始抽時間搭建。網上查了一些搭建配置的文章,可是都是簡單的拼湊在一塊兒就完事了,沒有深度的集成。 下面就將我在集成的過程當中的一些關鍵的問題的解決,介紹一下。web
Struts2 在集成的時候,配置文件大可能是放置在src的根目錄下就完了。這樣很簡單。可是沒法按照本身工程的結構,進行設計調整。並且也違反了我我的本身多年的習慣。因此第一步將struts的配置放到webapp(上下文)下面的config目錄裏。web.xml進行以下配置。spring
- <filter>
- <filter-name>struts2</filter-name>
- <filter-class>com.xk.commons.config.GeneralConfigFilter</filter-class>
- <init-param>
- <param-name>configProviders</param-name>
- <param-value>com.xk.commons.config.Struts2ConfigurationProvider</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
Struts2ConfigurationProvider 這個類是繼承了StrutsXmlConfigurationProvider,顧名思義,此類是用來提供xml格式的配置用的。查看類的各類方法,我的理解,只要實現了類的getConfigurationUrls方法,返回的是你本身的配置文件的url就可以修改默認配置了。因而實現代碼以下:app
- public class Struts2ConfigurationProvider extends StrutsXmlConfigurationProvider
- {
- private static final String CONFIG_FILE = "struts.xml";
- private static Logger logger = LoggerFactory.getLogger(Struts2ConfigurationProvider.class);
- public Struts2ConfigurationProvider()
- {
- this(false);
- }
- public Struts2ConfigurationProvider(boolean errorIfMissing)
- {
- super(CONFIG_FILE, errorIfMissing, null);
- }
- @Override
- protected Iterator<URL> getConfigurationUrls(String fileName) throws IOException
- {
- logger.info("get struts config file : " + fileName);
- return PathUtils.getStrutsConfigIterator(fileName);
- }
- }
編寫這個類的時候有點問題,在這裏提一下,若是不提供默認無參構造器,在啓動工程的時候會報錯誤, 框架
- @Override
- public int hashCode() {
- return ((configFileName != null) ? configFileName.hashCode() : 0);
- }
看吧,只要你經過參數傳遞的配置文件名與struts2中默認的名字是同樣的,那麼hashcode就是同樣的。,雖然不知道struts的開發者這樣設計的目的,可是確定是有緣由的,也罷,將我本身定義的provider中的struts配置文件名字改了一下,既然自定義嗎,那配置文件名稱也要自定義哦。 一些都ok了, 在配置裏寫個簡單的Action,測試經過。webapp