zoukankan      html  css  js  c++  java
  • struts 2.5 访问未定义 action 时报错的问题

    转载请注明:

    仰望高端玩家的小清新

    使用 struts 的时候我们自己设计的action毕竟是有限的,那么我们就需要使用一种方法来限制用户输入未定义的action。

    网上很多解决方案都是一个抄一个,没有自己的实践和总结。虽然我预感到很快我的这篇博客又会被爬虫盗走,不过还是写出来,给需要帮助的新人一点微小的贡献,少走一些弯路。

    众所周知,struts 2.5 是支持注解配置的,因此我们当然应该尽可能遵循简单的原则。因此这篇博客是尽可能使用注解进行配置的。注解和 xml 配置各有利弊,因此通常我们需要结合使用注解和 xml。

    我们直到,当我们访问未定义页面时,会出现报错,大意是找不到一个名为 XXX 的action。如何处理呢?经过我自己的测试和思考,我发现这是 struts 2 内部的 com.opensymphony.xwork2.config.ConfigurationException 的错误。我们如果使用 struts 自己的 <global-excepton-mappings/> 是无法捕获的。也就是说,struts 2 只能捕获后端抛出的异常,而对自身的异常无法简单的通过配置来捕获和处理。

    那么问题来了,当用户访问一个不存在的aciton,如何跳转到友好的 404 页面呢?

    基本的思路是:定义一个默认 action, 当找不到一个指定 action 时,就进入这个 action 并跳转到友好的 404 页面。

    如果是基于 xml 配置,那我们随手一找,就能找到一大堆,我就不赘述了。

    如果是基于注解,那么我们需要这么做:

    1. 写一个 action 方法,专门处理上述情况

    2. 将 action 的 result 指向我们指定的友好的 404 界面

    3. 切记,不要在 xml 进行上述操作,而要将这个方法写在 java 类中

    4. 在 xml 中配置一个默认的 package, 让所有 package 继承此 package,然后在这个默认的 package 中,引用 我们刚刚写好的 action 作为默认 action,然后就 ok 了。

    实例如下:

    在这个例子中,我的action 名称为 noSuchAction,是一个基于注解的 action

    <package name="myDefault" namespace="/" extends="struts-default">
        <default-action-ref name="noSuchAction"/>
    </package>

      

  • 相关阅读:
    java-se 选择和冒泡排序
    获得最大数
    打印正反星星 先正后反星星
    Django链接MySQL,数据库迁移
    ORM常用字段及查询
    Django的View(视图)
    Pycharm设置默认HTML模板
    Django简介
    Django
    如何使用Python输出一个[斐波那契数列]
  • 原文地址:https://www.cnblogs.com/luruiyuan/p/6548172.html
Copyright © 2011-2022 走看看