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>

 

  

posted @ 2017-03-14 14:06  仰望高端玩家的小清新  阅读(968)  评论(0编辑  收藏  举报