最近一直在编写基于IOC与AOP的web开发框架,有点模仿spring的意思。IOC部分已经差不多了,正在编写persistence部分。目前所在的公司,初来乍到,而且公司软件方面以前没有积累,没有能直接使用的开发框架,可是现在项目情况有变,可能留给我自己编写框架的时间不是太够,为了以防万一,先来套Struts2,spring3,hibernate的整合框架用用,于是开始抽时间搭建。网上查了一些搭建配置的文章,但是都是简单的拼凑在一起就完事了,没有深度的集成。 下面就将我在集成的过程中的一些关键的问题的解决,介绍一下。
Struts2 在集成的时候,配置文件大多是放置在src的根目录下就完了。这样很简单。但是无法按照自己工程的结构,进行设计调整。而且也违反了我个人自己多年的习惯。所以第一步将struts的配置放到webapp(上下文)下面的config目录里。web.xml进行如下配置。
- <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就能够修改默认配置了。于是实现代码如下:
- 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,测试通过。