从struts2.1开始,struts2增加了未知处理器。 当用户请求未知Action,或指定Action里的未知方法,或Action处理结束后返回一个未知的result。struts2允许使用未知处理器来处理这些情况。 未知处理器需要实现UnknownHandler接口,该接口包含三个方法 -handleUnknownAction:用户请求未知Action时,该方法会被回调 -handleUnknownActionMethod:用户请求指定Action的未知方法时,该方法会被回调 -handleUnknownResult:Action处理结束后返回一个未知Result时,该方法会被回调 一旦实现了自定义的未知处理器,就可以在struts.xml中通过<bean../>元素来配置未知处理器 例如 <bean name="myHandler" class="com.cad.struts2.MyUnknownHandler" type="com.opensymphony.xwork2.UnknownHandler"></bean>
例子:
(1)我们实现我们简单的未知处理器
public class MyUnknownHandler implements UnknownHandler { public ActionConfig handleUnknownAction(String namespace, String actionName) throws XWorkException { System.out.println(actionName+"不存在"); return null; } public Result handleUnknownResult(ActionContext actionContext, String actionName, ActionConfig actionConfig, String resultCode) throws XWorkException { System.out.println(resultCode+"不存在"); return null; } public Object handleUnknownActionMethod(Object action, String methodName) throws NoSuchMethodException { System.out.println(methodName+"不存在"); return null; } }
(2)在struts.xml中配置未知处理器
//定义我们的未知处理器 <bean name="myHandler" class="com.cad.struts2.MyUnknownHandler" type="com.opensymphony.xwork2.UnknownHandler"></bean> <package name="p3" extends="struts-default"> <action name="myAction"></action> </package> //定义未知处理器栈 <unknown-handler-stack> <unknown-handler-ref name="myHandler"></unknown-handler-ref> </unknown-handler-stack>
原理:
然后我们访问myAction,会输出success不存在。 是因为不指定action的class属性时,默认使用ActioSupport 一般未知处理器主要处理Action返回未知result时有用。 了解即可。