3 Spring3与Struts2整合

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。通俗的说就是页面端将信息提交给Struts,Struts负责将页面提交的数据生成模型,并调用业务层完成本次请求。

1 加载struts2 jar包

在pom.xml中加载struts2.jar包


        <!-- struts -->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>2.3.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-spring-plugin</artifactId>
            <version>2.3.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-convention-plugin</artifactId>
            <version>2.3.4.1</version>
        </dependency>

在上面的代码中需要注意:


<dependency>
    <groupId>org.apache.struts</groupId>
        <artifactId>struts2-spring-plugin</artifactId>
        <version>2.3.4.1</version>
    </dependency>
<dependency>

要让Spring管理Struts,必须导入上面的jar包。当web容器启动的时候,Struts的Action将会被加入spring上下文中(即使用了@Action注解的类将会统一由Spring管理)。

2 添加struts.xml

在\src\main\resources下添加struts.xml配置文件。
struts.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>

    <!-- 指定由spring负责action对象的创建 -->
    <constant name="struts.objectFactory" value="spring" />
    <!-- 所有匹配*.action的请求都由struts2处理 -->
    <constant name="struts.action.extension" value="action" />
    <!-- 是否启用开发模式 -->
    <constant name="struts.devMode" value="true" />
    <!-- struts配置文件改动后,是否重新加载 -->
    <constant name="struts.configuration.xml.reload" value="true" />
    <!-- 设置浏览器是否缓存静态内容 -->
    <constant name="struts.serve.static.browserCache" value="false" />
    <!-- 请求参数的编码方式 -->
    <constant name="struts.i18n.encoding" value="utf-8" />
    <!-- 每次HTTP请求系统都重新加载资源文件,有助于开发 -->
    <constant name="struts.i18n.reload" value="true" />
    <!-- 文件上传最大值 -->
    <constant name="struts.multipart.maxSize" value="104857600" />
    <!-- 让struts2支持动态方法调用 -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <!-- Action名称中是否还是用斜线 -->
    <constant name="struts.enable.SlashesInActionNames" value="false" />
    <!-- 允许标签中使用表达式语法 -->
    <constant name="struts.tag.altSyntax" value="true" />
    <!-- 对于WebLogic,Orion,OC4J此属性应该设置成true -->
    <constant name="struts.dispatcher.parametersWorkaround" value="false" />
    <constant name="struts.multipart.saveDir" value="/tmp"/>
    <package name="basePackage" extends="struts-default">
    </package>

</struts>

3 配置web.xml

在web.xml中加入:


<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>*.action</url-pattern>
</filter-mapping>

表示拦截所有后缀名为action的访问。

4 编写Action类

创建action包,并在此包下创建UserAction类,结构如下图所示。


目录结构


UserAction类代码如代码清单1所示。
代码清单1:UserAction.java


package ilv.action;

import org.apache.log4j.Logger;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;

@ParentPackage("basePackage")
@Namespace("/")
@Action(value="userAction")
public class UserAction {

    /**
     * Logger for this class
     */
    private static final Logger logger = Logger.getLogger(UserAction.class);

    public void test() {
        logger.info("进入Action");
    }   
}

注意:
@ParentPackage(“basePackage”),表示将这个Action类加入web.xml中的basePackage命名空间中
@Action(value=”userAction”)表示将这个Action类命名为userAction
@Namespace(“/”)表示这个Action类的访问空间为当前目录

5 测试

删除Tomcat关联项目ilv_ic,重新进行关联,启动Tomcat,在浏览器中输入:
http://localhost:8080/ilv_ic/userAction!test.action
测试test方法,如果打印语句,表示Struts2配置成功。


测试语句


6 深度整合

(1)修改UserAction代码


//创建用户业务类接口
private UserServiceI userService;
public UserServiceI getUserService() {
    return userService;
}

@Autowired
public void setUserService(UserServiceI userService) {
    this.userService = userService;
}

@Autowired表示spring自动注入生成的对象,即当调用 UserAction 对象时,Spring会自动生成实现了 UserServiceI 的 UserServiceImpl 对象,并赋值给 userService 变量。
(2)修改test方法


public void test() {
    logger.info("进入Action");
//UserServive不需要创建,Autowired将会自动创建对应类对象,
//并赋值给userServive变量
    userService.test();
}

重新启动Tomcat,在浏览器中输入:
http://localhost:8080/ilv_ic/userAction!test.action
测试test方法,如果能调用UserServiceImpl对象打印语句,表示Struts2与Spring整合成功。


测试结果


为了更好的理解整合后的执行机制,可结合下图理解。


执行原理


当用户在浏览器输入:
http://localhost:8080/ilv_ic/userAction!test.action
表示访问 ilv_ic 应用程序中 UserAction 对象的 test 方法。由于我们配置了Spring和Struts文件,因此使用:
“注解变量” + “!” + “方法” + “.action”
这种规则访问。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值