最近一直在编写基于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