从 Struts1 迁移到 Struts2 [关闭]

2023-12-21

我的应用程序位于 Struts1 中,并且我在所有操作中都使用了 Dispatch 操作。现在请告诉我如何转换到 struts 2 以及应该进行哪些修改来更改我的所有操作和表单 bean。


我将向您推荐这个系列文档:

  • http://www.infoq.com/articles/converting-struts-2-part1 http://www.infoq.com/articles/converting-struts-2-part1
  • http://www.infoq.com/articles/migration-struts-2-part2 http://www.infoq.com/articles/migrating-struts-2-part2

第一个链接解释了该主题,第二个链接中有一个示例。我在下面写了一个来自那里的解释:

配置框架

第一个也是最重要的配置是在 servlet 容器 web.xml 文件中启用 Web 应用程序框架的配置。

大家应该熟悉的Struts配置是:

<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
    <param-name>config</param-name>
    <param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

对于 Struts2 来说,变化很少。最重要的是调度程序已从 servlet 更改为 servlet 过滤器。配置就像 servlet 一样简单,如下所示:

<filter>
<filter-name>webwork</filter-name>
<filter-class>
    org.apache.struts.action2.dispatcher.FilterDispatcher
</filter-class>
</filter>

<filter-mapping>
<filter-name>webwork</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

解构动作

在请求演练中,我们从较高的层面讨论了 Struts 和 Struts2 之间的一些差异。现在让我们更深入地了解一下每个框架中操作结构之间的差异。

我们首先回顾一下Struts Action的总体结构。 Struts 操作的一般形式如下所示:

公共类 MyAction 扩展了 Action { 公共 ActionForward 执行(ActionMapping 映射, ActionForm 表单, HttpServletRequest 请求, HttpServletResponse 响应) 抛出异常{ // 做工作 return (mapping.findForward("成功")); } }

在实现 Struts 操作时,您需要注意以下事项:

  • 所有操作都必须扩展 Action 基类。
  • 所有操作都必须是线程安全的,因为只创建一个操作实例。
  • 由于操作必须是线程安全的,因此操作处理中可能需要的所有对象都在方法签名中传递。
  • 处理动作时调用的方法的名称是“execute”(Struts中有一个DispatchAction类,它可以将要执行的方法重新路由到同一动作中的另一个方法,但是初始入口点从框架进入动作仍然是“execute”方法)。
  • ActionForward 结果是使用 ActionMapping 类中的方法返回的,最常见的是通过“findForward”方法调用。

相比之下,Struts2 操作提供了更简单的实现。它看起来是这样的:

public class MyAction {
   public String execute() throws Exception {
        // do the work
        return "success";
   }
}

您可能注意到的第一件事是该操作不会扩展任何类或接口。事实上,事情远不止于此。按照惯例,在处理操作时调用的方法是“执行”方法 - 但不一定如此。任何遵循方法签名 public String methodName() 的方法都可以通过配置调用。

最后,也许与原始 Struts 实现最具革命性的区别是,在操作处理中调用的方法(“execute”方法)没有参数。那么如何访问您需要使用的对象呢?答案在于“控制反转”或“依赖注入”模式(有关更多信息,Martin Fowler 在以下位置发表了一篇内容丰富的文章:http://www.martinfowler.com/articles/injection.html http://www.martinfowler.com/articles/injection.html)。 Spring 框架普及了这种模式,然而,Struts2 的前身(WebWork)大约在同一时间开始使用该模式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Struts1 迁移到 Struts2 [关闭] 的相关文章

随机推荐

  • 如何在 Amazon EC2 上部署 Eclipse Java Web 动态项目?

    我正在尝试创建一个能够与 Amazon RDS 通信的 Web 项目 我知道如何使用 JDBC 将 localhost 项目连接到 RDS 然而 问题是我从未尝试部署我的项目 这样 例如有人可以输入somePage com 然后转到我的网页
  • 使Python json编码器支持Python的新数据类

    从Python 3 7开始 有一个叫做数据类的东西 from dataclasses import dataclass dataclass class Foo x str 但是 以下情况会失败 gt gt gt import json gt
  • 如何在mui主题中插入字体

    在index css 文件中我有一个字体 我想完全避免这个文件 并将这个配置放在作为 MUI 库实现的一部分创建的 theme js 文件中 怎么做 索引 css font face font family ATTAleckSans W L
  • Java Native Access 不支持 C++,对吗?

    我在网上找到了许多关于用于 C 库的 JNA 的参考 包括 stackoverflow 上的一些 但我在 JNA 文档中找不到任何内容表明这是可能的 特别是 似乎没有任何方法可以包装 C 类 我需要本机访问才能使用 RTAudio 但 RT
  • ASMX 返回纯字符串

    我有一个 ASP NET Web 服务 asmx 我的服务定义如下 System Web Services WebService Namespace http tempuri org System Web Services WebServi
  • 用 Java 将数据发送到打印机

    然而 下面的代码将数据发送到打印机 当它到达打印机队列时 它会返回一个Unable to convert PostScript file 我认为可以通过指定口味来克服这个问题 但事实并非如此 import javax print Doc i
  • 如何找到两个凸包的交集?

    我有两个凸包 让我们假设它们被给出为scipy spatial ConvexHulls import numpy as np points1 np random rand 10 3 points2 np random rand 10 3 h
  • 2台服务器之间的Websocket?

    我想知道是否可以在 2 个网络服务器之间而不是在浏览器和后端之间使用 websockets 我运行 2 个 Node js 服务器并希望在它们之间交换数据 尝试看看node2node socket io https github com d
  • 使用 winmain 和简单代码编译错误,“Previous declaration of WinMain”

    include
  • appengine 在中国可以用吗?

    我们的一些客户想知道 查看一些关于信息不一致的帖子 http code google com p googleappengine issues detail id 1144 http code google com p googleappe
  • iOS - 如何实现像默认相册一样裁剪图像?

    iPhone相册默认裁剪功能 有谁知道如何实现这一点 我想先剪掉它Use按钮被点击 尝试以下其中一项 您可能会找到一个完全可以做到这一点的开源软件
  • JBoss 7 未经过 Java EE6 认证

    我真的很想知道这到底意味着什么 我可以在开发和生产中使用 JBoss 7 的所有 EE 6 功能 我需要 JMS EJB 3 1 JSF 2 1 CDI 还是必须等待 JBoss 7 的更高版本 如果没有 那么由于 JBoss 6 x 仅通
  • 如何在 PHP 中注释掉正则表达式的 */ 部分

    我有 preg replace 函数 我正在调用它并放在多行上以提高可读性 但是 正则表达式中的字符弄乱了注释 如何注释掉所有这些行而不将它们全部移动到一行上 return preg replace Lorem Ipsum More Lor
  • 如何在批处理文件中获取一年中的某一天

    如何从 Windows 批处理文件中的当前日期获取一年中的第几天 我努力了 SET A dayofyear Date 0 2 30 5 Date 3 2 但它不适用于闰年 并且总是会偏差几天 我不想使用任何第三方可执行文件 如果您想要儒略日
  • Delphi 2009:Vista下如何在Windows服务和桌面应用程序之间进行通信?

    Vista Windows2008 Windows7下桌面应用程序如何与Windows服务通信 应用程序需要向服务发送小字符串并接收返回的字符串响应 两者都是用Delphi 2009编写的 请同时提供示例代码 要走的路是命名管道 http
  • 如何使用 CSS 为背景图像着色?

    我有一个通过 CSS 设置的背景图像 html background image url img cello jpg background attachment fixed background size 100 我计划为网站的不同页面使用
  • 如何通过允许预发布来指定 Python 要求?

    我对声明 Python 包需求的正确方法有些困惑 未正式发布的新版本确实有预发布名称 例如0 2 3 dev20160513165655 当我们添加时 pip 非常聪明地安装预发行版 pre选项 当我们构建开发分支时 我们确实使用它 主分支
  • 关于机器学习的 train_test_split 的想法

    我只是注意到很多人甚至在处理丢失的数据之前就倾向于使用train test split 并且似乎他们一开始就分割了数据 还有很多人 他们倾向于在完成所有数据清理 特征工程 特征选择之后 在模型构建步骤之前分割数据 人们一开始倾向于将数据进行
  • 反应 this.props 未定义或空对象

    构建一个小型反应应用程序 将地理位置 由浏览器确定为子组件作为道具 传递 第一个组件 App jsx import React Component from react import DateTime from components dat
  • 从 Struts1 迁移到 Struts2 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我的应用程序位于 Struts1 中 并且我在所有操作中都使用了 Dispatch 操作 现在请告诉我如何转换到 struts 2 以