Spring -- spring整合struts2

1. 概述

spring和struts整合:
	1.创建web程序
	2.引入struts2类库.
	3.创建HelloWorldAction
		package cn.itcast.struts2.action;
		import com.opensymphony.xwork2.ActionSupport;
		/**
		 * HelloWorldAction
		 */
		public class HelloWorldAction extends ActionSupport {
			private static final long serialVersionUID = 6480501738385774728L;
			public String reg() {
				System.out.println("hello world");
				return SUCCESS;
			}
		}
	3.配置web.xml
		<?xml version="1.0" encoding="UTF-8"?>
		<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
			xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
			http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
			<filter>
				<filter-name>action</filter-name>
				<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
			</filter>
			<filter-mapping>
				<filter-name>action</filter-name>
				<url-pattern>/*</url-pattern>
			</filter-mapping>
			<welcome-file-list>
				<welcome-file>index.jsp</welcome-file>
			</welcome-file-list>
		</web-app>
	4.配置struts.xml
		<?xml version="1.0"?>
		<!DOCTYPE struts PUBLIC
			"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
			"http://struts.apache.org/dtds/struts-2.1.7.dtd">
		<struts>
			<constant name="struts.devMode" value="true" />
			<package name="helloworldPkg" extends="struts-default">
				<action name="HelloWorldAction_*" class="cn.itcast.struts2.action.HelloWorldAction" method="{1}">
					<result name="success">/index.jsp</result>
				</action>
			</package>
		</struts>

	5.引入spring类库 + struts2-spring-plugin-2.1.8.1.jar
	6.配置web.xml
		<!-- 通过上下文参数指定spring配置文件的位置 -->
		<context-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:beans.xml</param-value>
		</context-param>
		
		<!-- 上下文载入器监听器,确保web服务器启动时,直接完成spring容器的初始化,将ac放到application范围中 -->
		<listener>
			<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
		</listener>

	7.修改struts.xml配置文件中的action
		把action的class改成bean的id.
		<!-- class:指定action在spring容器的id -->
		<action name="HelloWorldAction_*" class="helloWorldAction" method="{1}">
		

struts2加载顺寻:
	1.struts-core.jar/struts.xml
	2.xxx-plugin.xml / struts-plugin.xml
	3.project/struts.xml

ac = new Classpathxmlac(new String[]{a.xml,b.xml});


2. 示例代码

HelloWorldService.java, service接口

public interface HelloWorldService {
	public void sayHello();
}

HelloWorldServiceImpl.java, service实现

//方式二:注解配置
@Service("helloWorldService")
public class HelloWorldServiceImpl implements HelloWorldService {
	public void sayHello() {
		System.out.println("this is a service");
	}
}

HelloWorldAction.java, 处理请求的action

/**
 * HelloWorldAction, 方式二:注解配置
 */
@Controller("helloWorldAction")
@Scope("prototype")
public class HelloWorldAction extends ActionSupport {
	private static final long serialVersionUID = 6480501738385774728L;
	
	@Resource()
	private HelloWorldService hws ;
	
	public HelloWorldAction(){
		System.out.println("new HelloWorldAction()");
	}
	public String reg() {
		ServletActionContext.getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
		hws.sayHello();
		System.out.println("hello world");
		return SUCCESS;
	}
}

beans.xml,spring配置bean, 只配置bean

<?xml version="1.0"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd ">
    <!--  多个配置文件的情况,action,service配置分开
    <import resource="actions.xml" />
    -->
    <!-- helloWorldService 方式一,xml配置
    <bean id="helloWorldService"
        class="cn.itcast.struts2.service.HelloWorldServiceImpl">
    </bean>
     -->
     <!-- 组件扫描  方式二,注解配置 -->
     <context:component-scan base-package="cn.itcast.struts2.action,cn.itcast.struts2.service" />
</beans>

actions.xml,spring配置action

<?xml version="1.0"?>
<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.5.xsd">
    <!-- helloworldAction -->
    <bean id="helloWorldAction"
        scope="prototype"
        class="cn.itcast.struts2.action.HelloWorldAction">
        <property name="hws" ref="helloWorldService" />
    </bean>
</beans>

struts.xml, struts配置

<?xml version="1.0"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
    <constant name="struts.devMode" value="true" />
    <package name="helloworldPkg" extends="struts-default">
		<!--class 应该设置为action.xml中对应的ID,才能有spring的注入属性-->
        <action name="HelloWorldAction_*" class="helloWorldAction" method="{1}">
            <result name="success">/index.jsp</result>
        </action>
    </package>
</struts>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <!-- 通过上下文参数指定spring配置文件的位置 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:beans.xml</param-value>
    </context-param>
    
    <!-- 上下文载入器监听器,确保web服务器启动时,直接完成spring容器的初始化,并把ac保存到application中 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <filter>
        <filter-name>action</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>action</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>







 

原文地址:https://www.cnblogs.com/xj626852095/p/3648139.html