SSH框架是现在非常流行的框架之一,本文接下来主要来对Spring和Struts的集成进行展示.
集成原理:在Action中取得BeanFactory,通过BeanFactory取得业务逻辑对象.
集成框架图如下:
1 spring 和struts依赖包配置.
*struts
--拷贝struts相关java包和jstl.
--在web.xml中配置ActionServlet.
--提供struts-config.xml核心配置文件.
--提供struts国际化资源文件,最好提供默认国际化文件.
*spring
--拷贝spring相关java包
*SPRING_HOME/dist/spring.jar
*SPRING_HOME/lib/log4j/log4j-1.2.14.jar
*SPRING_HOME/lib/jakarta-commons/commons-logging.jar
*SPRING_HOME/lib/aspectj/aspectjrt.jar
*SPRING_HOME/lib/aspectj/aspectjweaver.jar
--提供spring配置文件.
2 在web.xml文件中配置ContextLoaderListener,让Web Server启动的时候将BeanFactory放在ServletContext中
代码如下:
- <!-- 找到文件名 -->
- <context-param>
- <!-- 此处的名字是固定死的,在ContextLoader里中的一个常量 -->
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:applicationContext-*.xml</param-value>
- </context-param>
- <!-- 设置Listener,一次性创建BeanFactory -->
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
3 在Action中采用WebApplicationContextUtil.getRequiredWebApplicationContext()从ServletContext中取得BeanFactory
- //从配置文件中的监听器中获取SessionFactory,此种方法不用每次频繁的创建SessionFactory
- BeanFactory factory=WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext());
- UserManager userManager = (UserManager)factory.getBean("userManager");
- userManager.login(username, password);
4 通过BeanFactory从IOC容器中取得业务逻辑对象.
此集成方案的不足:WEB层中知道Spring的相关内容,因为需要去主动的查找对象:BeanFactory.可以通过依赖注入的方式解决此问题.方案二便是通过依赖注入的方式来进行.