一、相应的spring的jar
Struts2-spring-plugin.jar
spring.jar
1、了解Struts2-spring-plugin.jar包中的struts-plugin.xml配置文件
<struts> <bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" /> <!-- Make the Spring object factory the automatic default --> <constant name="struts.objectFactory" value="spring" /> <package name="spring-default"> <interceptors> <interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/> <interceptor name="sessionAutowiring" class="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"/> </interceptors> </package> </struts>
2、按如下步骤
1)将Struts2-spring-plugin.jar拷贝到lib下
2)增加配置文件applicationContex.xml(可以如下获得:利用myeclipse自动增加的功能-->在工程上点击右键选择“Add Spring Capabilities”,然后选择spring2.0选择spring2.0 core Libraries,选择 Copy check Library contents to project folder)
3、官方参考资料
http://struts.apache.org/2.1.6/index.html页面上的plugin图标
进入到http://cwiki.apache.org/S2PLUGINS/spring-plugin.html
http://struts.apache.org/2.x/docs/spring-plugin.html
二、示例
1、建立业务逻辑包service和包serviceImp
他们分别内涵LoginService和LoginServiceImp
package com.test.service; public interface LoginService { public boolean isLogin(String username, String password); } package com.test.service.impl; import com.test.service.LoginService; public class LoginServiceImpl implements LoginService { public boolean isLogin(String username, String password) { if ("hello".equals(username) && "world".equals(password)) { return true; } return false; } }
2、LoginAction.java
(该类加入了LoginService接口,通过spring来注入该服务,)
import com.opensymphony.xwork2.ActionSupport; import com.test.service.LoginService; public class LoginAction extends ActionSupport { private String username; private String password; private LoginService loginService; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public void setLoginService(LoginService loginService) { this.loginService = loginService; } @SuppressWarnings("unchecked") public String execute() throws Exception { if (loginService.isLogin(username, password)) { return SUCCESS; } else { return INPUT; } } }
3、spring配置文件
(下面scope="prototype",表示请求一个实例化一个,非单例的,线程安全的!)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean id="loginService" class="com.test.service.impl.LoginServiceImpl"></bean> <bean id="loginAction" class="com.test.action.LoginAction" scope="prototype"> <property name="loginService"> <ref local="loginService"/> </property> </bean> </beans>
4、在原来的struts.xml文件修改(此处的class名字"loginAction"需要和上面spring配置中的id的"loginAction"一致)
<action name="login" class="loginAction"> <result name="success">/result.jsp</result> <result name="input">/login2.jsp</result> </action>
5、让spring容器在启动时加载进来
在web.xml可以通过servert或监听器两种方式来加载
现在的servert2.4以后版本一般可以用监听器比较简单:<listener>
在web.xml文件中加入以下内容:
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
这样系统就会默认加载web-INF下 的applicationContext.xml文件了
但是如果spring有多个配置文件需要加载
处理方法:增加以下配置
<context-param> <param-name>contextConfigLocation</param-name> <param-value>多个配置文件名(中间用逗号隔开)</param-value> </context-param>
6、此时可以看到struts2的加载顺序,他会先加载strust-defualt.xml,接着会加载struts-plugin.xml,组后加载struct.xml
后加载的配置信息可以覆盖前面加载的配置信息。