`
zhaolianyang
  • 浏览: 97906 次
  • 性别: 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的核心 拦截器)

    本篇将深入探讨Struts2的核心拦截器以及其工作原理。 在Struts2中,拦截器是一个实现了`Interceptor`接口的类,它通过在动作执行前后插入额外的处理逻辑,实现了对请求处理的增强。拦截器链是由多个拦截器按照特定...

    struts2学习笔记.doc

    ### Struts2学习笔记知识点概览 #### 一、环境搭建 **1.1 Struts2简介** - **Struts2概述**:Struts2是一个开源的MVC框架,它结合了Struts 1.x、WebWork和其他一些框架的优点。Struts2的主要目标是简化Web应用程序...

    struts2学习笔记二(第2讲.Struts2入门与配置续)

    本篇学习笔记将深入探讨Struts2的入门与配置,继续上一讲的内容。 首先,Struts2的基础入门涉及到以下几个核心概念: 1. **Action类**:在Struts2中,业务逻辑通常封装在Action类中。Action类是处理用户请求的主体...

    struts2 学习重点笔记

    ### Struts2 学习重点知识点总结 #### 一、Struts2 概念与架构 **1.1 Struts2 简介** - **定义**:Struts2 是 Apache 组织提供的一个基于 MVC 架构模式的开源 Web 应用框架。 - **核心**:Struts2 的核心其实是 ...

    Struts2学习笔记

    根据给定的文件信息,以下是对Struts2学习笔记中涉及的关键知识点的详细解析: ### Struts2框架概览 #### MVC模式的理解与演进 Struts2是基于MVC(Model-View-Controller)模式设计的一种Java Web开发框架。在MVC...

    struts2学习笔记十九(第19讲.Struts2深入探索 续)

    在第19讲“Struts2深入探索”中,我们将继续深入理解Struts2的核心特性和工作原理,这包括但不限于配置、拦截器、插件、以及源码分析。以下是关于Struts2的一些关键知识点: 1. **MVC模式**:Struts2遵循Model-View...

    struts2学习笔记三(第3讲.Struts2的类型转换)

    在本篇“Struts2学习笔记三”中,我们将聚焦于Struts2的类型转换这一核心特性。类型转换在处理用户提交的数据时非常关键,它允许Struts2自动将请求参数转换为Java对象的属性。 在Struts2中,类型转换主要由`...

    张龙圣思园struts2学习笔记word

    张龙圣思园的Struts2学习笔记,无疑为Java开发者提供了一份宝贵的参考资料,它可能涵盖了Struts2的基础概念、核心组件、配置方式以及实战技巧。 首先,让我们深入了解Struts2的核心特性。Struts2是MVC(Model-View-...

    struts2学习笔记九(第9讲.Struts2的校验框架 续)

    在第九讲中,我们将深入探讨Struts2的校验框架,这是一个非常重要的功能,它有助于确保输入数据的准确性和完整性,防止非法数据导致的系统异常。 在传统的Java web开发中,数据验证通常在服务器端进行,如Servlet或...

    struts2学习笔记十八(第18讲.Struts2深入探索)

    Struts2的核心特性之一是拦截器,它允许开发者定义一系列的处理逻辑,这些逻辑会在Action执行前后被调用。拦截器可以用来实现如日志记录、权限验证、事务管理等功能。通过自定义拦截器,开发者能够灵活地扩展框架...

    struts2四天的学习笔记

    4. **拦截器(Interceptors)**:拦截器是Struts2的一个强大特性,它允许在Action执行前后插入自定义逻辑。常见的拦截器有:Params拦截器(处理参数绑定),Validation拦截器(进行字段验证),Stack拦截器(包含一...

    struts2学习笔记(完美总结)——转自OPEN经验库

    在实际项目中,Struts2可以处理类型转换、文件上传下载、拦截器(Interceptor)防止重复提交等问题。Interceptor是Struts2中的重要特性,它允许在Action执行前后插入额外的处理逻辑,如登录验证、日志记录等。深入...

    struts2学习笔记六(第6讲.Struts2的输入校验续一)

    在第六讲中,我们将深入探讨Struts2的输入验证机制,这是确保应用程序数据安全性和正确性的重要环节。Struts2的输入验证可以分为客户端验证和服务器端验证,两者都有其优点和适用场景。 首先,客户端验证通常使用...

    struts2学习笔记

    **一.Struts2核心文件:struts.xml配置** Struts2的核心配置文件是`struts.xml`,它负责定义Action、拦截器栈、结果类型、包配置等。在这个文件中,你可以声明你的Action类,定义它们对应的方法以及结果页面。例如...

    struts2学习笔记(1)

    ### Struts2学习笔记知识点详解 #### 一、Struts2框架的基本引入步骤 ##### 1. 导入Struts2相关Jar包 在引入Struts2框架时,首先需要将Struts2的相关Jar包导入到项目的类路径中。这些Jar包通常包括核心库以及其他...

    struts2学习笔记十四(第14讲.Struts2的文件上传和下载续二)

    在本篇“Struts2学习笔记十四”中,我们将深入探讨Struts2框架如何实现文件上传和下载功能,这是web应用中常见的需求,尤其在处理用户提交的表单数据时。我们将不涉及具体代码,而是重点讲解相关概念和技术原理。 ...

    struts2学习笔记十三(第13讲.Struts2的文件上传和下载续)

    在本篇“Struts2学习笔记十三”中,我们将深入探讨Struts2如何处理文件上传和下载,这是Web开发中常见的需求。 文件上传在Web应用中广泛用于让用户提交图片、文档或其他类型的数据。Struts2提供了一个名为`...

    struts2学习笔记黑马程序员

    ### Struts2学习笔记之文件上传与Ajax开发 #### Struts2文件上传 **文件上传简介** 文件上传是Web应用中常见的功能之一,Struts2框架内置了对文件上传的支持,使得开发者能够轻松地实现这一功能。为了确保文件...

    Struts1及14. Struts2学习笔记

    Struts2的核心是FilterDispatcher,它处理所有请求并根据配置的拦截器链进行处理。Struts2支持OGNL(Object-Graph Navigation Language)作为表达式语言,使得数据绑定更加便捷。同时,Struts2的配置文件通常为...

Global site tag (gtag.js) - Google Analytics