`
ccii
  • 浏览: 57127 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

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实例,则可以通过如下代码获取:
    WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext); 当然也可以通过Servlet的getAttribute("WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE")方法获取ApplicationContext。

完整web.xml配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="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>
    <!-- 定义Struts 2的FilterDispathcer的Filter -->
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <!-- FilterDispatcher用来初始化Struts 2并且处理所有的WEB请求。 -->
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

2. Action(LoginAction.java)

package test.action;

import com.opensymphony.xwork2.Action;
import test.service.*;

public class LoginAction implements Action {
    // 下面是用于封装用户请求参数的两个属性
    private String username;
    private String password;
    // 用于封装处理结果的属性
    private String tip;
    // 系统所用的业务逻辑组件
    private MyService ms;
    public void setMs(MyService ms) {
        this.ms = ms;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getUsername() {
        return this.username;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getPassword() {
        return this.password;
    }
    public void setTip(String tip) {
        this.tip = tip;
    }
    public String getTip() {
        return this.tip;
    }
    // 处理用户请求的execute方法
    public String execute() throws Exception {
        // 调用业务逻辑组件的valid方法来,验证用户输入的用户名和密码是否正确
        if (ms.valid(getUsername(), getPassword())) {
            setTip("哈哈,整合成功!");
            return SUCCESS;
        } else {
            return ERROR;
        }
    }
}

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

<?xml version="1.0" encoding="GBK"?>
<!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.i18n.encoding" value="GBK"/>   
    <constant name="struts.devMode" value="true"/>   
    <package name="lee" extends="struts-default">
        <!-- 定义处理用户请求的Action,该Action的class属性不是实际处理类, 而是Spring容器中的Bean实例-->
        <action name="loginPro" class="loginAction">
            <result name="error">/content/error.jsp</result>
            <result name="success">/content/welcome.jsp</result>
        </action>
        <!-- 让用户直接访问该应用时列出所有视图页面 -->
        <action name="*">
            <result>/content/{1}.jsp</result>
        </action>
    </package>
</struts>

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

接口:

package test.service;
public interface MyService {
    boolean valid(String username, String pass);
}

实现:

package test.service.impl;
import test.service.*;
public class MyServiceImpl implements MyService {
    public boolean valid(String username, String pass) {
        // 此处只是简单示范,故直接判断用户名、密码是否符合要求
        if (username.equals("aaa") && pass.equals("sss")) {
            return true;
        }
        return false;
    }
}

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

<?xml version="1.0" encoding="GBK"?>
<!-- Spring配置文件的根元素,使用spring-beans-3.0.xsd语义约束 -->
<beans xmlns: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">
    <bean id="myService" class="test.service.impl.MyServiceImpl"/>
    <!-- 让Spring管理的Action实例 -->
    <bean id="loginAction" class="test.action.LoginAction" scope="prototype">
        <property name="ms" ref="myService"/>
    </bean>
</beans>

6. 测试页面

login.jsp:

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>登录页面</title></head>
<body>
<h3>用户登录</h3>
<s:form action="loginPro">
    <s:textfield name="username" label="用户名"/><s:textfield name="password" label="密码"/>
    <tr align="center"><td colspan="2"><s:submit value="登录" theme="simple"/><s:reset value="重设" theme="simple"/></td></tr>
</s:form>
</body>
</html>

error.jsp:

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>错误页面</title></head>
<body>
    您不能登录!
</body>
</html>

welcome.jsp:

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>错误页面</title></head>
<body>
    您不能登录!
</body>
</html>

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

struts.xml:

<?xml version="1.0" encoding="GBK"?>
<!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.i18n.encoding" value="GBK"/>   
    <constant name="struts.devMode" value="true"/>   
    <package name="lee" extends="struts-default">
        <!-- 定义处理用户请求的Action,此处修改为原本的类路径-->
        <action name="loginPro" class="test.action.LoginAction">
            <result name="error">/content/error.jsp</result>
            <result name="success">/content/welcome.jsp</result>
        </action>
        <!-- 让用户直接访问该应用时列出所有视图页面 -->
        <action name="*">
            <result>/content/{1}.jsp</result>
        </action>
    </package>
</struts>

applicationContext.xml:

<?xml version="1.0" encoding="GBK"?>
<!-- Spring配置文件的根元素,使用spring-beans-3.0.xsd语义约束 -->
<beans xmlns: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,让其自动装配。只需让业务Bean ID和Action类中的变量名相同 -->
    <bean id="ms" class="test.service.impl.MyServiceImpl"/>
</beans>
分享到:
评论

相关推荐

    SSH笔记-Spring整合Struts2

    在IT行业中,SSH(Spring、Struts2、...总的来说,Spring整合Struts2是一种最佳实践,能够提升企业级应用的开发效率和质量。理解这一整合过程,对于任何想要深入理解和使用SSH框架的开发者来说,都是非常重要的。

    ssh集成jar包,支持spring集成Hibernate,spring集成struts2等

    - Spring还提供了对其他库的集成,如JDBC、JMS、JTA等,以及对其他框架如Hibernate、Struts2的整合支持。 2. **Hibernate框架**: - Hibernate是一个对象关系映射(Object-Relational Mapping,ORM)框架,它简化...

    spring整合struts2

    整合过程中,开发者需要配置Struts2的配置文件以指向Spring的DispatcherServlet,同时配置Spring以管理Struts2的Action和Service。对于Hibernate,需要配置数据源、实体类和映射文件,以及事务管理策略。整个过程...

    整合struts2和spring

    将Struts2和Spring整合可以充分利用各自的优势,实现更加灵活、高效的应用开发。 整合Struts2和Spring主要涉及以下几个关键步骤: 1. **添加依赖**:首先,需要在项目的构建配置文件(如Maven的pom.xml或Gradle的...

    spring与struts2整合

    同时,为了集成 Spring,需要配置 Struts2-Spring 插件,这样 Struts2 就能利用 Spring 管理的 Bean。 4. **Action 类**:Action 类通常作为 Struts2 处理请求的入口,它可以从 Spring 容器中注入所需的依赖。通过...

    Spring集成Struts2环境简单配置

    以下是对“Spring集成Struts2环境简单配置”的详细说明: 首先,我们需要在项目中引入Spring和Struts2的依赖库。这通常通过Maven或Gradle等构建工具完成,添加相应的依赖项到项目的pom.xml或build.gradle文件中。...

    spring整合struts2与hibernate核心配置文件

    `struts2-spring-plugin.xml`配置Struts2与Spring的集成,确保Action类由Spring容器管理。`spring-context.xml`中,需要配置数据源、SessionFactory、事务管理器以及各业务层和DAO层的bean。Hibernate的`hibernate....

    spring整合struts2 开发源码

    Spring以其强大的依赖注入(DI)和面向切面编程(AOP)能力,而Struts2则以其优秀的MVC设计模式著称,两者整合可以构建出高效、可维护的Web应用。本教程将深入探讨如何将Spring与Struts2进行整合,以及相关的源码...

    spring整合struts2的方法

    5. **整合Struts2的Action**:如果有些Action还需要使用Struts2,可以在Spring的配置文件中定义这些Action类的bean,并在Action类中使用Spring的setter方法注入依赖。 以上两种整合方式各有优缺点。基于Spring-...

    Spring+Struts2+hibernate+Redis整合

    在IT行业中,SSH(Spring、Struts2、Hibernate)是一个经典的Java Web开发框架组合,而Redis则是一个高性能的键值存储系统,常用于缓存和数据持久化。将SSH与Redis整合,可以提升应用程序的性能和响应速度。下面将...

    spring+struts2+ibatis整合的jar包

    总的来说,Spring、Struts2和iBatis的整合为Java Web开发提供了一个强大、灵活的解决方案,让开发者能够更专注于业务逻辑,而不是框架的底层实现。通过合理的配置和使用这个jar包,开发者可以快速构建出稳定、高性能...

    Spring与Struts 2整合.zip

    整合Spring和Struts 2的主要目的是将Spring的依赖注入和管理能力引入到Struts 2的Action中,以及利用Spring的AOP进行事务管理。整合步骤通常包括以下几个部分: 1. **添加依赖**:在项目中引入Spring和Struts 2的库...

    Spring整合Struts

    ### Spring与Struts的整合:实现灵活的企业级应用开发 在企业级应用开发领域,Spring框架和Struts框架都是极具影响力的技术。Spring以其强大的依赖注入(DI)和面向切面编程(AOP)能力,提供了良好的环境管理和...

    Spring集成struts2、ibatis、dwr、poi实现的demo

    使用Spring集成struts2、ibatis、poi实现的增删改查功能,包括采用jquery实现的无刷新查询机分页、dwr实现的两级联动、以及采用poi动态将数据库数据导出成excel,本demo采用mysql数据库,附有建表sql,项目导入...

    Spring与Struts2整合

    Spring以其强大的依赖注入(DI)和面向切面编程(AOP)能力,而Struts2则以其优秀的MVC设计模式著称,两者整合可以构建出高效、可维护的Web应用。下面将详细介绍Spring与Struts2整合的相关知识点。 **一、整合背景*...

    spring和struts的整合-aop的使用

    最后,关于提供的"spring_add"文件,可能是Spring整合Struts2过程中的一个示例或配置文件。它可能包含了Spring的bean定义,或者是在Struts2中使用Spring时需要的特定配置。具体用途需要根据文件内容来解读。 总之,...

Global site tag (gtag.js) - Google Analytics