Spring整合Struts2

1.启动Spring容器

对于使用Spring的Web应用,无须手动创建Spring容器,而是通过配置文件,声明式地创建Spring容器。其中有两种方式:一是直接在web.xml文件中配置创建Spring容器;二是利用三方MVC框架的扩展点,创建Spring容器。下面使用方法一:

<!--使用ContextLoaderListener初始化Spring容器-->

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener

</listener-class>

</listener>

如果有多个Spring配置文件,则还要加上下面的配置

<context-param>

<param-name>contextConfigLocation</param-name>

<!--多个配置文件之间以逗号隔开,或者使用classpath:test/application*.xml全部一起引入(src/test下)-->

<param-value>/WEB-INF/daoContext.xml,/WEB-INF/applicationContext.xml</param-value>

</context-param>

如果需要在应用中获取ApplicationContext实例,则可以通过如下代码获取:

WebApplicationContextctx=WebApplicationContextUtils.getWebApplicationContext(servletContext);当然也可以通过Servlet的getAttribute("WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE")方法获取ApplicationContext。

完整web.xml配置文件如下:

<?xmlversion="1.0"encoding="UTF-8"?>

<web-appversion="2.5"xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<!--使用ContextLoaderListener初始化Spring容器-->

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener

</listener-class>

</listener>

<!--定义Struts2的FilterDispathcer的Filter-->

<filter>

<filter-name>struts2</filter-name>

<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

</filter>

<!--FilterDispatcher用来初始化Struts2并且处理所有的WEB请求。-->

<filter-mapping>

<filter-name>struts2</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

</web-app>

2.Action(LoginAction.java)

packagetest.action;

importcom.opensymphony.xwork2.Action;

importtest.service.*;

publicclassLoginActionimplementsAction{

//下面是用于封装用户请求参数的两个属性

privateStringusername;

privateStringpassword;

//用于封装处理结果的属性

privateStringtip;

//系统所用的业务逻辑组件

privateMyServicems;

publicvoidsetMs(MyServicems){

this.ms=ms;

}

publicvoidsetUsername(Stringusername){

this.username=username;

}

publicStringgetUsername(){

returnthis.username;

}

publicvoidsetPassword(Stringpassword){

this.password=password;

}

publicStringgetPassword(){

returnthis.password;

}

publicvoidsetTip(Stringtip){

this.tip=tip;

}

publicStringgetTip(){

returnthis.tip;

}

//处理用户请求的execute方法

publicStringexecute()throwsException{

//调用业务逻辑组件的valid方法来,验证用户输入的用户名和密码是否正确

if(ms.valid(getUsername(),getPassword())){

setTip("哈哈,整合成功!");

returnSUCCESS;

}else{

returnERROR;

}

}

}

3.Struts配置文件(struts.xml)

<?xmlversion="1.0"encoding="GBK"?>

<!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1.7//EN"

"http://struts.apache.org/dtds/struts-2.1.7.dtd">

<struts>

<constantname="struts.i18n.encoding"value="GBK"/>

<constantname="struts.devMode"value="true"/>

<packagename="lee"extends="struts-default">

<!--定义处理用户请求的Action,该Action的class属性不是实际处理类,而是Spring容器中的Bean实例-->

<actionname="loginPro"class="loginAction">

<resultname="error">/content/error.jsp</result>

<resultname="success">/content/welcome.jsp</result>

</action>

<!--让用户直接访问该应用时列出所有视图页面-->

<actionname="*">

<result>/content/{1}.jsp</result>

</action>

</package>

</struts>

4.业务处理Service(接口MyService.java和实现MyServiceImpl.java)

接口:

packagetest.service;

publicinterfaceMyService{

booleanvalid(Stringusername,Stringpass);

}

实现:

packagetest.service.impl;

importtest.service.*;

publicclassMyServiceImplimplementsMyService{

publicbooleanvalid(Stringusername,Stringpass){

//此处只是简单示范,故直接判断用户名、密码是否符合要求

if(username.equals("aaa")&&pass.equals("sss")){

returntrue;

}

returnfalse;

}

}

5.Spring配置文件(applicationContext.xml)

<?xmlversion="1.0"encoding="GBK"?>

<!--Spring配置文件的根元素,使用spring-beans-3.0.xsd语义约束-->

<beansxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://www.springframework.org/schema/beans"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<beanid="myService"class="test.service.impl.MyServiceImpl"/>

<!--让Spring管理的Action实例-->

<beanid="loginAction"class="test.action.LoginAction"scope="prototype">

<propertyname="ms"ref="myService"/>

</bean>

</beans>

6.测试页面

login.jsp:

<%@pagecontentType="text/html;charset=GBK"language="java"errorPage=""%>

<%@taglibprefix="s"uri="/struts-tags"%>

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<htmlxmlns="http://www.w3.org/1999/xhtml">

<head><title>登录页面</title></head>

<body>

<h3>用户登录</h3>

<s:formaction="loginPro">

<s:textfieldname="username"label="用户名"/><s:textfieldname="password"label="密码"/>

<tralign="center"><tdcolspan="2"><s:submitvalue="登录"theme="simple"/><s:resetvalue="重设"theme="simple"/></td></tr>

</s:form>

</body>

</html>

error.jsp:

<%@pagecontentType="text/html;charset=GBK"language="java"errorPage=""%>

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<htmlxmlns="http://www.w3.org/1999/xhtml">

<head><title>错误页面</title></head>

<body>

您不能登录!

</body>

</html>

welcome.jsp:

<%@pagecontentType="text/html;charset=GBK"language="java"errorPage=""%>

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<htmlxmlns="http://www.w3.org/1999/xhtml">

<head><title>错误页面</title></head>

<body>

您不能登录!

</body>

</html>

7.使用自动装配

使用自动装配,即让Spring管理Bean与Bean之间的依赖关系,自动将业务逻辑组件注入Struts2的Action实例中。下面采用按name来完成自动装配,按name装配时无须设置任何的Struts2常量。只需要修改上例中的两个配置文件。

struts.xml:

<?xmlversion="1.0"encoding="GBK"?>

<!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1.7//EN"

"http://struts.apache.org/dtds/struts-2.1.7.dtd">

<struts>

<constantname="struts.i18n.encoding"value="GBK"/>

<constantname="struts.devMode"value="true"/>

<packagename="lee"extends="struts-default">

<!--定义处理用户请求的Action,此处修改为原本的类路径-->

<actionname="loginPro"class="test.action.LoginAction">

<resultname="error">/content/error.jsp</result>

<resultname="success">/content/welcome.jsp</result>

</action>

<!--让用户直接访问该应用时列出所有视图页面-->

<actionname="*">

<result>/content/{1}.jsp</result>

</action>

</package>

</struts>

applicationContext.xml:

<?xmlversion="1.0"encoding="GBK"?>

<!--Spring配置文件的根元素,使用spring-beans-3.0.xsd语义约束-->

<beansxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://www.springframework.org/schema/beans"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<!--此处去掉原来Action类的Bean,让其自动装配。只需让业务BeanID和Action类中的变量名相同-->

<beanid="ms"class="test.service.impl.MyServiceImpl"/>

</beans>

相关推荐