在经历了一段时间的PHP操练之后,我又重新拿起了JAVA。恰好今天看到如何整合spring+struts的时候,发现问题一大堆,把这些问题总结下来,有以下几点:
(1)在整合前的准备工作
struts的库文件(包括struts2-spring-plugin-2.2.3.jar),以及spring框架的JAR。如果没有备齐,会出现在启动服务器的时候出现很多的Exception,以及虽然能成功部署,但是不能访问整合后的ACTION。
(2)整合的方法(两种)
第一种,“伪Action”。
这种方法主要是在struts.xml配置一个Action,不直接指向ACTION的CLASS文件,只是作为spring中与一个bean同名的“伪Action”。具体做法如下:
struts.xml的代码
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.custom.i18n.resources" value="messageResource"></constant>
<constant name="struts.i18n.encoding" value="GBK"></constant>
<package name="normal" extends="struts-default">
<action name="login" class="loginAction">
<result name="success">/welcome.jsp</result>
<result name="error">/error.jsp</result>
</action>
<action name="">
<result>.</result>
</action>
</package>
</struts>
applicationContext.xml
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE beans PUBLIC "//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<bean id="myService" class="org.lee.managersys.service.MyServiceImpl" />
<bean id="loginAction" class="org.lee.managersys.struts.LoginAction" scope="prototype">
<property name="ms" ref="myService" />
</bean>
</beans>
第二种,利用自动装配。
Spring能够自动管理Bean之间的依赖关系,无须显示地指定ref依赖bean;
struts.xml
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.custom.i18n.resources" value="messageResource"></constant>
<constant name="struts.i18n.encoding" value="GBK"></constant>
<package name="normal" extends="struts-default">
<action name="login" class="org.lee.managersys.struts.LoginAction">
<result name="success">/welcome.jsp</result>
<result name="error">/error.jsp</result>
</action>
<action name="">
<result>.</result>
</action>
</package>
</struts>
applicationContext.xml
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE beans PUBLIC "//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<bean id="ms" class="org.lee.managersys.service.MyServiceImpl" />
</beans>
第二种方法比第一个简洁,但是可读性差。不用新建Action的bean。
下面是此次示例中的相关代码。
业务逻辑层接口MyService.java
package org.lee.managersys.service;
public interface MyService {
public boolean valid(String user,String password);
}
业务逻辑层组件MyServiceImpl.java
package org.lee.managersys.service;
public class MyServiceImpl implements MyService{
@Override
public boolean valid(String user,String password){
if(user.equals("aa") && password.equals("aa")){
return true;
}
else{
return false;
}
}
}
处理用户请求LoginAction.java
package org.lee.managersys.struts;
import org.lee.managersys.service.MyService;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport{
private String user;
private String password;
private String tip;
private MyService ms;
public void setMs(MyService ms){
this.ms=ms;
}
@Override
public String execute()throws Exception{
if(ms.valid(getUser(),getPassword())){
setTip("哈哈,整合成功");
return SUCCESS;
}
else{
return ERROR;
}
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getTip() {
return tip;
}
public void setTip(String tip) {
this.tip = tip;
}
}
web.xml
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
在下面的一节,我将把spring与hibernate整合遇到的问题作一个总结。
分享到:
相关推荐
Spring 整合 Struts,很强大
Spring整合集成Struts1.2最简单例子
使用Spring整合Struts编写多页面用户注册模块 使用Spring整合Struts编写多页面用户注册模块
三大框架集成及两两集成的jar包,spring集成hibernate的jar包以及spring集成struts2的jar包已经单独打包
Spring与struts整合主要有三种方式,通过Spring的ActionSupport类,通过Spring的DelegatingRequestProcessor类、通过Spring的DelegatingActionProxy类。
Spring集成struts以及hibernate jar包 所有的都在里面 需要的可以下载
spring框架整合struts框架时必需的类库文件
struts spring集成 struts spring集成 struts spring集成
spring与struts2整合的小示例,适合初学者,具体说明在博客里
只使用spring和struts进行整合
整合Spring与Struts的几种方法
里面有spring+struts2+ibatis整合的jar包,
JPA+Spring+Struts整合实例,JPA+Spring+Struts整合实例
spring整合struts2与hibernate核心配置文件
Spring+Struts+Hibernate比较详细的整合配置方案
SSH+Redis整合
spring和struts整合的三种方案.
spring struts 整合的所有jar包
spring整合struts.rar
Spring 整合 Struts2 详解