`
tomyjohn
  • 浏览: 7730 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

spring整合struts二三事

 
阅读更多

在经历了一段时间的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整合遇到的问题作一个总结。





分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics