读书人

struts2学习札记十一(第11讲.Struts2

发布时间: 2012-10-26 10:30:58 作者: rapoo

struts2学习笔记十一(第11讲.Struts2的核心 拦截器续)
Struts2的核心 拦截器续
说明:拦截器的主要作用就是拦截Action,执行顺序就是:拦截器->Action->拦截器->……。
功能:拦截器的基本的配置。
一、在之前的struts2项目src下创建一个包com.test.interceptor,用来存放拦截器,创建一个名称为MyInterceptor.java类,实现Interceptor接口:

package com.test.interceptor;import java.awt.event.InvocationEvent;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.Interceptor;public class MyInterceptor implements Interceptor {public void destroy() {System.out.println("destroy()");}public void init() {System.out.println("init()");}public String intercept(ActionInvocation invocation) throws Exception {System.out.println("intercept");String result = invocation.invoke();return result;}}

二、在struts.xml配置文件中配置拦截器,在package节点先添加interceptors节点,并且要在对应的Action中进行引用:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd">    <struts><constant name="struts.custom.i18n.resources" value="message"></constant><package name="struts2" extends="struts-default"><interceptors><interceptor name="myInterceptor" method="test"><result name="success">/success.jsp</result><result name="input">/register2.jsp</result></action></package></struts>

三、再在struts.xml中的Intercepoters节点中添加一个param参数:
<interceptors><interceptor name="myInterceptor" name="code">public void init() {System.out.println("init()");System.out.println(hello);}

结果是world能在控制台正常的输出:init()
world
五、然后在Action中引用的时候,在在引用的属性中再增加一个param属性,并且把welcome赋给hello:
<action name="register" name="code"><package name="struts2" extends="struts-default"><interceptors><interceptor name="myInterceptor" name="code"><package name="struts2" extends="struts-default"><interceptors><interceptor name="myInterceptor" name="code">package com.test.interceptor;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class MyInterceptor2 extends AbstractInterceptor {@Overridepublic String intercept(ActionInvocation invocation) throws Exception {System.out.println("Intercept2");String result = invocation.invoke();return result;}}

八、在struts.xml中配置一下:
<package name="struts2" extends="struts-default"><interceptors><interceptor name="myInterceptor" method="test"><result name="success">/success.jsp</result><result name="input">/register2.jsp</result><interceptor-ref name="myInterceptor3"><!-- <param name="includeMethods">test,execute</param> --><param name="excludeMethods">test,execute</param><param name="includeMethods">test</param></interceptor-ref><interceptor-ref name="defaultStack"></interceptor-ref></action></package>

说明:拦截器执行的先后顺序与拦截器配置的先后顺序有关系,但是在结束的时候后配置的拦截器先结束。
功能:方法拦截器的实现。
九、在com.test.interceptor创建方法拦截器的类MyInterceptor3.java继承自MethodFilterInterceptor父类:
package com.test.interceptor;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;public class MyInterceptor3 extends MethodFilterInterceptor {public void init(){System.out.println("init3");}@Overrideprotected String doIntercept(ActionInvocation invocation) throws Exception {System.out.println("my interceptor3");String result = invocation.invoke();return result;}}

十、在struts.xml中进行方法拦截器的配置:
<package name="struts2" extends="struts-default"><interceptors><interceptor name="myInterceptor" method="test"><result name="success">/success.jsp</result><result name="input">/register2.jsp</result><interceptor-ref name="myInterceptor3"><!-- <param name="includeMethods">test,execute</param> --><param name="excludeMethods">test,execute</param><param name="includeMethods">test</param></interceptor-ref><interceptor-ref name="defaultStack"></interceptor-ref></action></package>

说明:includeMethods的属性具有优先级,但对某方法既拦截又不拦截的时候,这个方法是一定会执行的。

读书人网 >软件架构设计

热点推荐