`
zhaolianyang
  • 浏览: 94676 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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" class="com.test.interceptor.MyInterceptor">
				
			</interceptor>
		</interceptors>
	
		<action name="login" class="com.test.action.LoginAction">
			<result name="input">/login2.jsp</result>
			<result name="success">/result.jsp</result>
			<result name="failer">login2.jsp</result>
		</action>
		
		<action name="pointConverter" class="com.test.action.PointAction">
			<result name="success">/output.jsp</result>
		</action>
		
		<action name="register" class="com.test.action.RegisterAction">
			<result name="success">/success.jsp</result>
			<result name="input">/register2.jsp</result>
			
			<interceptor-ref name="myInterceptor"></interceptor-ref>
			<interceptor-ref name="defaultStack"></interceptor-ref>
			
		</action>
		
		<action name="zly" class="com.test.action.RegisterAction" 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" class="com.test.interceptor.MyInterceptor">
				<param name="hello">world</param>
			</interceptor>
		</interceptors>

四、然后在拦截器MyInterceptor.java中添加一个对应的对象hello:
public void init() {
		
		System.out.println("init()");
		System.out.println(hello);
	}

结果是world能在控制台正常的输出:init()
world
五、然后在Action中引用的时候,在在引用的属性中再增加一个param属性,并且把welcome赋给hello:
	<action name="register" class="com.test.action.RegisterAction">
			<result name="success">/success.jsp</result>
			<result name="input">/register2.jsp</result>
			
			<interceptor-ref name="myInterceptor">
				<param name="hello">welcome</param>
			</interceptor-ref>
			<interceptor-ref name="defaultStack"></interceptor-ref>
			
		</action>

在控制台输出的是:init()
welcome,说明后来所赋得值welcome把前面的给替换掉了,所以说使用的时候给变量赋的值,会替换掉之前定义的时候所赋得值。
功能:定义拦截器栈。
六、还是在Intercepoters借点节点中添加一个拦截器栈,然后在对应的Action中引用这个拦截器栈,效果是一样的:
<package name="struts2" extends="struts-default">
		
		<interceptors>
			<interceptor name="myInterceptor" class="com.test.interceptor.MyInterceptor">
				<param name="hello">world</param>
			</interceptor>
			
			<interceptor-stack name="myStack">
				<interceptor-ref name="myInterceptor"></interceptor-ref>
				<interceptor-ref name="defaultStack"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
	
		<action name="login" class="com.test.action.LoginAction">
			<result name="input">/login2.jsp</result>
			<result name="success">/result.jsp</result>
			<result name="failer">login2.jsp</result>
		</action>
		
		<action name="pointConverter" class="com.test.action.PointAction">
			<result name="success">/output.jsp</result>
		</action>
		
		<action name="register" class="com.test.action.RegisterAction">
			<result name="success">/success.jsp</result>
			<result name="input">/register2.jsp</result>
			
			<interceptor-ref name="myStack"></interceptor-ref>
			
		</action>
		
	</package>

功能:改变默认继承的拦截器:
七、添加一个默认的拦截器栈,替换原有默认的拦截器,可以应用到所有的Action当中:
<package name="struts2" extends="struts-default">
		
		<interceptors>
			<interceptor name="myInterceptor" class="com.test.interceptor.MyInterceptor">
				<param name="hello">world</param>
			</interceptor>
			
			<interceptor-stack name="myStack">
				<interceptor-ref name="myInterceptor"></interceptor-ref>
				<interceptor-ref name="defaultStack"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
	
		<default-interceptor-ref name="myStack"></default-interceptor-ref>
	
		<action name="login" class="com.test.action.LoginAction">
			<result name="input">/login2.jsp</result>
			<result name="success">/result.jsp</result>
			<result name="failer">login2.jsp</result>
		</action>
		
		<action name="pointConverter" class="com.test.action.PointAction">
			<result name="success">/output.jsp</result>
		</action>
		
		<action name="register" class="com.test.action.RegisterAction">
			<result name="success">/success.jsp</result>
			<result name="input">/register2.jsp</result>
			
		</action>
		
	</package>

功能:在同一目录下再定义一个拦截器MyInterceptor2.java继承自AbstractInterceptor类:
package com.test.interceptor;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class MyInterceptor2 extends AbstractInterceptor {

	@Override
	public 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" class="com.test.interceptor.MyInterceptor">
				<param name="hello">world</param>
			</interceptor>
			
			<interceptor name="myInterceptor2" class="com.test.interceptor.MyInterceptor2">
			</interceptor>
			
			<interceptor name="myInterceptor3" class="com.test.interceptor.MyInterceptor3">
			</interceptor>
			
			<interceptor-stack name="myStack">
			
			<!-- 
				<interceptor-ref name="myInterceptor"></interceptor-ref>
				<interceptor-ref name="myInterceptor2"></interceptor-ref> 
			-->
				
				<interceptor-ref name="defaultStack"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
	
		<default-interceptor-ref name="myStack"></default-interceptor-ref>
	
		<action name="login" class="com.test.action.LoginAction">
			<result name="input">/login2.jsp</result>
			<result name="success">/result.jsp</result>
			<result name="failer">login2.jsp</result>
		</action>
		
		<action name="pointConverter" class="com.test.action.PointAction">
			<result name="success">/output.jsp</result>
		</action>
		
		<action name="register" class="com.test.action.RegisterAction" 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");
	}
	
	@Override
	protected 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" class="com.test.interceptor.MyInterceptor">
				<param name="hello">world</param>
			</interceptor>
			
			<interceptor name="myInterceptor2" class="com.test.interceptor.MyInterceptor2">
			</interceptor>
			
			<interceptor name="myInterceptor3" class="com.test.interceptor.MyInterceptor3">
			</interceptor>
			
			<interceptor-stack name="myStack">
			
			<!-- 
				<interceptor-ref name="myInterceptor"></interceptor-ref>
				<interceptor-ref name="myInterceptor2"></interceptor-ref> 
			-->
				
				<interceptor-ref name="defaultStack"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
	
		<default-interceptor-ref name="myStack"></default-interceptor-ref>
	
		<action name="login" class="com.test.action.LoginAction">
			<result name="input">/login2.jsp</result>
			<result name="success">/result.jsp</result>
			<result name="failer">login2.jsp</result>
		</action>
		
		<action name="pointConverter" class="com.test.action.PointAction">
			<result name="success">/output.jsp</result>
		</action>
		
		<action name="register" class="com.test.action.RegisterAction" 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的属性具有优先级,但对某方法既拦截又不拦截的时候,这个方法是一定会执行的。
1
1
分享到:
评论

相关推荐

    struts2学习笔记十(第10讲.Struts2的核心 拦截器)

    NULL 博文链接:https://zhaolianyang.iteye.com/blog/870600

    struts2 学习重点笔记

    这是学习struts2时记得重点笔记,包括了一些原理,ognl语句的编写,以及如何设置拦截器等等一些基本知识,起到复习和巩固的作用

    struts2学习笔记

    struts2学习笔记,拦截器,action,所需jar包,从零开始

    struts项目学习笔记

    Struts2 是一个非常优秀的MVC框架,基于Model2 设计模型 由传统Struts1和WebWork两个经典框架发展而来 Struts2框架=Struts2+XWork Strust2 核心功能 允许POJO(Plain Old Java Objects,简单javabean对象,没有继承,...

    Struts2 学习笔记

    01 Struts2-Action 5 一、 Struts作用: 5 二、 搭建Struts2的运行环境: 5 三、 Namespace 6 四、 标签 6 五、 Action 6 六、 路径问题的说明 8 ...09 自定义拦截器 38 10 类型转换 38 Struts2总结 39

    Struts2学习笔记

    struts2快速入门学习笔记,包含执行流程、验证、拦截器、国际化等的使用

    struts2.2学习笔记

    struts2.2学习笔记总结,action,拦截器,过滤器,国际化,struts.xml解析等的总结。

    struts学习笔记(2)

    当前struts2的filter过滤到一个.action结尾的请求的时候,会把这个请求交给struts2内部的拦截器(interceptor) 2)拦截器起到什么作用 可以帮我们丰富action的功能,比自动类型转换(页面传一个String类型的id,接收的...

    Struts2.1学习笔记

    基于 Struts2.1.8 包括Struts2的基本应用、文件上传、拦截器、输入校验、国际化、OGNL表达式、Struts2标签等内容。

    struts拦截器 课堂笔记

    适合新手借鉴的struts学习笔记,更适合一入门的老手借鉴,个人学习心得

    struts2入门笔记与源码

    学习struts2的笔记与源码:输入验证、国际化、拦截器等

    Struts 2.1.8_学习源码

    Struts 2.1.8 学习源码内容 Struts2_01FirstDemo : 跑通第一个Struts2的实例 Struts2_02CURD : 关于Struts2的增、删、...Struts2_05Interceptor : Struts2拦截器的使用 Struts2_06FileUpload : Struts2上传文件的使用

    struts2的学习笔记+测试源代码

    拦截器 博文链接:https://wuzhaohuixy-qq-com.iteye.com/blog/710102

    Java学习笔记-个人整理的

    {12.11.2}intersect与minus}{166}{subsection.12.11.2} {12.11.3}join}{166}{subsection.12.11.3} {12.11.3.1}cross join}{166}{subsubsection.12.11.3.1} {12.11.3.2}inner join}{167}{subsubsection.12.11.3.2...

    struts2框架学习项目,根据各个知识点分包分类实例

    struts2框架教学项目,针对每个知识点都有一个对应的实例,内嵌学习笔记。想学习的同学绝对适合,本人亲自教学实例。

    SpringMVC学习笔记整合搭建框架

    8、拦截器 2.Spring入门 2.1.Springmvc是什么 3.3.jdbc编程步骤: 1、加载数据库驱动 2、创建并获取数据库链接 3、创建jdbc statement对象 4、设置sql语句 5、设置sql语句中的参数(使用preparedStatement) 6、通过...

    跟我学javaweb全套ppt

    除此之外,第11、第14章还提供了两个完整的实例来讲解Struts2开发新特性和开发SSH的详细步骤.通过对这两章的学习,读者可以对SSH开发模式有更透彻的理解和认识。《跟我学Java Web》光盘中提供了丰富的内容,包括全书...

Global site tag (gtag.js) - Google Analytics