未知处理器

从struts2.1 开始 ,struts2配置文件的DTD中增加了<unknown-handler-stack…/>和<unknown-handler-ref…/>,这个元素用于配置Struts2的未知处理器。

当用请求未知Action、或指定action里的未知方法、或action 处理结束之后返回一个未知result ,struts2允许使用处理器来处理这些方法。

未知处理器需要实现 UnknownHandler 接口,该接口里包含来了3个方法:

    HandleUnknownAction:用户请求未知Action时,该方法见会被回调。
HandleUnknownActionMethod: 用户请求指定Action的未知方法时,该方法将会被回调。
HandleUnKnownResult: action处理结束之后返回一个位置Result时,该方法将会被回调。

代码如下:

package com.struts2.action;

import org.apache.struts2.dispatcher.ServletDispatcherResult;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.Result;

import com.opensymphony.xwork2.UnknownHandler;

import com.opensymphony.xwork2.XWorkException;

import com.opensymphony.xwork2.config.entities.ActionConfig;

public class MyUnKnownHandler implements UnknownHandler{

    /**

     * @param namespace 用户请求的action所在的命名空间

     * @param actionName 用户请求的Action的名字

     * @return 该Action最后生成的ActionConfig,可以返回null

     */

    @Override

    public ActionConfig handleUnknownAction(String namespace, String actionName)

           throws XWorkException {

       // TODO Auto-generated method stub

       return null;

    }

    /**

     * @param action 用户请求的Action对象

     * @param methodName 用户请求的Action 的方法名

     * @return 该Action 的该方法处理后返回的Result。

     */

@Override

    public Object handleUnknownActionMethod(Object action, String methodName)

           throws NoSuchMethodException {

       // TODO Auto-generated method stub

       return null;

    }

    /**

     * @param  actionContext  该result所在ActionContext

     * @param  actionName     该result所在的Action名

     * @param  actionCofig    该result所在ActionContext

     * @param  resultCode     该result所对应的逻辑视图字符串

     * @return 将要被处理的结果,可以返回null

     */

    @Override

    public Result handleUnknownResult(ActionContext actionContext, String actionName,

           ActionConfig actionConfig, String resultCode) throws XWorkException {

       // TODO Auto-generated method stub

       actionContext.put("action", actionName);

       actionContext.put("result", resultCode);

       return new ServletDispatcherResult("/unknownResult.jsp");

    }

}

相关的配置:

<!-- 使用bean 定义一个UnknownHandler -->
<bean name="yeekuHandler" type="com.opensymphony.xwork2.UnknownHandler" class="com.struts2.action.MyUnKnownHandler"></bean> //定义未值处理栈
<unknown-handler-stack>
<unknown-handler-ref name="yeekuHandler"></unknown-handler-ref>
</unknown-handler-stack>

UnknownHandler的更多相关文章

  1. 菜鸟学Struts2——零配置(Convention )

    又是周末,继续Struts2的学习,之前学习了,Struts的原理,Actions以及Results,今天对对Struts的Convention Plugin进行学习,如下图: Struts Conv ...

  2. Python3使用urllib访问网页

    介绍 改教程翻译自python官网的一篇文档. urllib.request是一个用于访问URL(统一资源定位符)的Python模块.它以urlopen函数的形式提供了一个非常简单的接口,可以访问使用 ...

  3. Struts2 源码分析——配置管理之ContainerProvider接口

    本章简言 上一章笔者讲到关于Dispatcher类的执行action功能,知道了关于执行action需要用到的信息.而本章将会讲到的内容也跟Dispatcher类有关系.那就是配置管理中的Contai ...

  4. python2 与 python3 urllib的互相对应关系

    urllib Python2 name Python3 nameurllib.urlopen() Deprecated. See urllib.request.urlopen() which mirr ...

  5. cookielib和urllib2模块相结合模拟网站登录

    1.cookielib模块 cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源.例如可以利用 本模块的CookieJar类的对 ...

  6. Urllib2 总结

    Urllib2 总结 介绍 Urllib2是用于获取URLs(统一资源定位符)的一个Python模块.它以urlopen函数的形式提供了非常简单的接口.能够使用各种不同的协议来获取网址.它还提供一个稍 ...

  7. struts2支持的结果类型

    在struts2-core.jar/struts-default.xml中,我们可以找到关于result-type的一些配置信息,从中可以看出struts2组件默认为我们提供了这 些result-ty ...

  8. Python之urllib2

    urllib2 - extensible library for opening URLs Note The urllib2 module has been split across several ...

  9. python的urllib2库详细使用说明

    一直以来技术群里会有新入行的同学提问关于urllib和urllib2以及cookielib相关的问题.所以我打算在这里总结一下,避免大家反复回答同样的问题浪费资源. 这篇属于教程类的文字,如果你已经非 ...

随机推荐

  1. 项目开发之UML之初识

  2. 云与备份之(1):VMware虚机备份和恢复

    本系列文章会介绍云与备份之间的关系,包括: (1)VMware 虚机备份和恢复 (2)KVM 虚机备份和恢复 (3)云与备份 (4)OpenStack 与备份 (5)公有云与备份 1. 与备份有关的V ...

  3. UVALive 4431 Fruit Weights --floyd,差分约束?

    题意: 给出一些关系用aX <= bY表示, 最后查询aX 和 bY的关系,是>=,==,<=,还是不能确定,还是出现了矛盾. 解法:对每一个关系其实都可以建一条X->Y的边, ...

  4. NOIP2010pj三国游戏[博弈论]

    题目描述 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏. 在游戏中,小涵和计算机各执一方,组建各自的军队进行对战.游戏中共有 N 位武将(N为偶数且不小于 4),任意两个武将之 ...

  5. [tem]线段树(白书版)

    个人感觉有点坑 add用的标记永久化 set用的标记下传 #include <iostream> #include <cstdio> #include <algorith ...

  6. django authenticate

    程序少不了验证用户与权限分配.通过 Django 自带以及我们一些扩展就能够满足验证与权限的需求. 我在使用 Django 遇到的"login(request, user) 之后,再重定向这 ...

  7. [ASP.NET 5]终于解决:Unable to load DLL 'api-ms-win-core-localization-obsolete-l1-2-0.dll'

    11月12日,惊喜地发现SqlClient(System.Data.SqlClient.dll)跨平台了(对应的nuget包包是runtime.unix.System.Data.SqlClient), ...

  8. 如何在Excel中通过VBA快速查找多列重复的值

    今天项目组的一个同事问我如何快速的找到一个Excel中第3列和第5列的值完全重复的值,我想了想虽然Excel中自带查找重复值的功能,但是好像只能对同一列进行比较,所以就写了一个VBA进行处理,VBA非 ...

  9. java使用ftp上传文件

    ftpServer是apache MINA项目的一个子项目,它实现了一个ftp服务器,与vsftpd是同类产品.Filezilla是一个可视化的ftp服务器. ftp客户端也有很多,如Filezill ...

  10. SpringBoot应用部署[转]

    在开发spring Boot应用的过程中,Spring Boot直接执行public static void main()函数并启动一个内嵌的应用服务器(取决于类路径上的以来是Tomcat还是jett ...