`
lijunaccp
  • 浏览: 159080 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

struts2拦截器剖析

阅读更多
一.Struts2使用拦截器步骤:
1. 定义拦截器类
2. 声明拦截器
3. 使用拦截器
1. 定义拦截器MyInterceptor.java
package com.test.interceptor;

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

public class MyInterceptor implements Interceptor {

	@Override
	public void destroy() {
		System.out.println("destroy invoked");
	}

	@Override
	public void init() {
		System.out.println("init invoked");
	}

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		System.out.println("intercept invoked");
		String result=invocation.invoke();
		System.out.println("intercept invoke result:"+result);
		return result;
	}

}

2. 声明拦截器 struts.xml
<?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>
	<package name="struts2" extends="struts-default">
	
		<interceptors>
			<interceptor name="myInterceptor" class="com.test.interceptor.MyInterceptor"></interceptor>
		</interceptors>
		
		<action name="helloworld" class="com.test.action.HelloWorld">
			<result>/helloworld.jsp</result>
		</action>
		
		<action name="login" class="com.test.action.LoginAction">
			<result>/result.jsp</result>
			<result name="input">/login2.jsp</result>
		</action>
		
		<action name="converterAction" class="com.test.action.PointAction" method="test" >
			<result name="success">/output.jsp</result>
			<result name="input">/error.jsp</result>
		</action>
		
		<action name="register" class="com.test.action.RegisterAction">
			<result name="success">/success.jsp</result>
			<result name="input">/register.jsp</result>
		</action>
		
	</package>
</struts>

3. 使用拦截器 struts.xml
<?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>
	<package name="struts2" extends="struts-default">
	
		<interceptors>
			<interceptor name="myInterceptor" class="com.test.interceptor.MyInterceptor"></interceptor>
		</interceptors>
		
		<action name="helloworld" class="com.test.action.HelloWorld">
			<result>/helloworld.jsp</result>
		</action>
		
		<action name="login" class="com.test.action.LoginAction">
			<result>/result.jsp</result>
			<result name="input">/login2.jsp</result>
		</action>
		
		<action name="converterAction" class="com.test.action.PointAction" method="test" >
			<result name="success">/output.jsp</result>
			<result name="input">/error.jsp</result>
		</action>
		
		<action name="register" class="com.test.action.RegisterAction">
			<result name="success">/success.jsp</result>
			<result name="input">/register.jsp</result>
			
			<interceptor-ref name="myInterceptor"></interceptor-ref>
			
		</action>
		
	</package>
</struts>

注:拦截器在服务器启动时就加载,并初始化。
二.Struts2.xml中使用拦截器问题
1. 如上使用拦截器会发现输入结果不能被传到结果页面
这是因为strut2.xml继承了struts-default文件,这个XML文件中定义了很多拦截器,且定义了默认使用的拦截器组defaultStack,如果在struts.xml中Aciton使用了自定的拦截器,默认的使用的拦截器无效,解决方法就是在引用一下defaultStack拦截器
<action name="register" class="com.test.action.RegisterAction">
			<result name="success">/success.jsp</result>
			<result name="input">/register.jsp</result>
			
			<interceptor-ref name="myInterceptor"></interceptor-ref>
			<interceptor-ref name="defaultStack"></interceptor-ref>
		</action>

三.Struts2.xml中使用拦截器同Filter可以对黑名单进行操作
1. struts.xml
<?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>
	<package name="struts2" extends="struts-default">
	
		<interceptors>
			<interceptor name="myInterceptor" class="com.test.interceptor.MyInterceptor">
				<param name="hello">world</param>
			</interceptor>
		</interceptors>
		
		<action name="helloworld" class="com.test.action.HelloWorld">
			<result>/helloworld.jsp</result>
		</action>
		
		<action name="login" class="com.test.action.LoginAction">
			<result>/result.jsp</result>
			<result name="input">/login2.jsp</result>
		</action>
		
		<action name="converterAction" class="com.test.action.PointAction" method="test" >
			<result name="success">/output.jsp</result>
			<result name="input">/error.jsp</result>
		</action>
		
		<action name="register" class="com.test.action.RegisterAction">
			<result name="success">/success.jsp</result>
			<result name="input">/register.jsp</result>
			
			<interceptor-ref name="myInterceptor"></interceptor-ref>
			<interceptor-ref name="defaultStack"></interceptor-ref>
		</action>
		
	</package>
</struts>

2.  MyInterceptor.java
package com.test.interceptor;

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

public class MyInterceptor implements Interceptor {
	
	private String hello;
	
	public String getHello() {
		return hello;
	}

	public void setHello(String hello) {
		this.hello = hello;
	}

	@Override
	public void destroy() {
		System.out.println("destroy invoked");
	}

	@Override
	public void init() {
		System.out.println("init invoked");
		System.out.println("hello:"+hello);
	}

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		System.out.println("intercept invoked");
		String result=invocation.invoke();
		System.out.println("intercept invoke result:"+result);
		return result;
	}

}

四.为了避免实现Interceptor接口时要实现init(),destory(),只需要interceptor(),可以继承抽象类AbstractInterceptor
1. AbstractInterceptor.java
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.err.println("MyInterceptor2 invoked");
		String result=invocation.invoke();
		System.out.println("MyInterceptor2 invoke result:"+result);
		return result;
	}

}

2. struts.xml
<?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>
	<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>
		</interceptors>
		
		<action name="helloworld" class="com.test.action.HelloWorld">
			<result>/helloworld.jsp</result>
		</action>
		
		<action name="login" class="com.test.action.LoginAction">
			<result>/result.jsp</result>
			<result name="input">/login2.jsp</result>
		</action>
		
		<action name="converterAction" class="com.test.action.PointAction" method="test" >
			<result name="success">/output.jsp</result>
			<result name="input">/error.jsp</result>
		</action>
		
		<action name="register" class="com.test.action.RegisterAction">
			<result name="success">/success.jsp</result>
			<result name="input">/register.jsp</result>
			
			<interceptor-ref name="myInterceptor"></interceptor-ref>
			<interceptor-ref name="myInterceptor2"></interceptor-ref>
			<interceptor-ref name="defaultStack"></interceptor-ref>
		</action>
		
	</package>
</struts>

五.Action中的方法拦截器,继承抽象类MethodFilterInterceptor
1.  MethodFilterInterceptor.java
package com.test.interceptor;

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

public class MyInterceptor3 extends MethodFilterInterceptor {

	@Override
	protected String doIntercept(ActionInvocation invocation) throws Exception {
		System.out.println("MyInterceptor3 invoked");
		String result=invocation.invoke();
		System.out.println("MyInterceptor3 invoke result:"+result);
		return result;
	}

}

2. struts.xml
<?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>
	<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>
		</interceptors>
		
		<action name="helloworld" class="com.test.action.HelloWorld">
			<result>/helloworld.jsp</result>
		</action>
		
		<action name="login" class="com.test.action.LoginAction">
			<result>/result.jsp</result>
			<result name="input">/login2.jsp</result>
		</action>
		
		<action name="converterAction" class="com.test.action.PointAction" method="test" >
			<result name="success">/output.jsp</result>
			<result name="input">/error.jsp</result>
		</action>
		
		<action name="register" class="com.test.action.RegisterAction">
			<result name="success">/success.jsp</result>
			<result name="input">/register.jsp</result>
			
			<interceptor-ref name="myInterceptor"></interceptor-ref>
			<interceptor-ref name="myInterceptor2"></interceptor-ref>
			<interceptor-ref name="myInterceptor3">
				<!-- <param name="excludeMethods">execute</param> --> 
没有param就拦截所有方法,includeMethods拦截指定方法,excludeMethods不拦截指定方法
			</interceptor-ref>
			<interceptor-ref name="defaultStack"></interceptor-ref>
		</action>
		
	</package>
</struts>

六.拦截器栈(拦截器的集合)
1. struts.xml
<?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>
	<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-stack>
		</interceptors>
		
		<action name="helloworld" class="com.test.action.HelloWorld">
			<result>/helloworld.jsp</result>
		</action>
		
		<action name="login" class="com.test.action.LoginAction">
			<result>/result.jsp</result>
			<result name="input">/login2.jsp</result>
		</action>
		
		<action name="converterAction" class="com.test.action.PointAction" method="test" >
			<result name="success">/output.jsp</result>
			<result name="input">/error.jsp</result>
		</action>
		
		<action name="register" class="com.test.action.RegisterAction">
			<result name="success">/success.jsp</result>
			<result name="input">/register.jsp</result>
			<!-- 
			<interceptor-ref name="myInterceptor"></interceptor-ref>
			<interceptor-ref name="myInterceptor2"></interceptor-ref>
			 -->
			 
			 <interceptor-ref name="myStack"></interceptor-ref>
			 
			<interceptor-ref name="defaultStack"></interceptor-ref>
		</action>
		
	</package>
</struts>

七.自定义默认的拦截器
1. struts.xml
<?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>
	<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="helloworld" class="com.test.action.HelloWorld">
			<result>/helloworld.jsp</result>
		</action>
		
		<action name="login" class="com.test.action.LoginAction">
			<result>/result.jsp</result>
			<result name="input">/login2.jsp</result>
		</action>
		
		<action name="converterAction" class="com.test.action.PointAction" method="test" >
			<result name="success">/output.jsp</result>
			<result name="input">/error.jsp</result>
		</action>
		
		<action name="register" class="com.test.action.RegisterAction">
			<result name="success">/success.jsp</result>
			<result name="input">/register.jsp</result>
			<!-- 
			<interceptor-ref name="myInterceptor"></interceptor-ref>
			<interceptor-ref name="myInterceptor2"></interceptor-ref>
			 <interceptor-ref name="myStack"></interceptor-ref>
			 -->
			
		</action>
		
	</package>
</struts>

注:自定义默认的拦截器会对所有Action生效,所有一般情况不会用自定默认拦截器
八.在拦截器中增加监听器(观察者模式)
1.  定义监听器MyListener.java实现PreResultListener(在execute方法执行完,result执行之前调用)接口
package com.test.listener;

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

public class MyListener implements PreResultListener {

	@Override
	public void beforeResult(ActionInvocation invocation, String resultCode) {
		System.out.println("MyListener invoked");
	}

}

2. 在拦截器MyInterceptor中增加监听器
package com.test.interceptor;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
import com.test.listener.MyListener;

public class MyInterceptor implements Interceptor {
	
	private String hello;
	
	public String getHello() {
		return hello;
	}

	public void setHello(String hello) {
		this.hello = hello;
	}

	@Override
	public void destroy() {
		System.out.println("destroy invoked");
	}

	@Override
	public void init() {
		System.out.println("init invoked");
		System.out.println("hello:"+hello);
	}

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		
		invocation.addPreResultListener(new MyListener());
		
		System.out.println("intercept invoked");
		String result=invocation.invoke();
		System.out.println("intercept invoke result:"+result);
		return result;
	}

}

对于以上方式,只有一处会用到的一个类的一个简单方法,可以不用自定义监听器,直接在拦截器中用一个匿名类来实现,如下:
@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		
		invocation.addPreResultListener(new PreResultListener(){
			@Override
			public void beforeResult(ActionInvocation invocation,
					String resultCode) {
				System.out.println("hello world");
			}
		});
		
		System.out.println("intercept invoked");
		String result=invocation.invoke();
		System.out.println("intercept invoke result:"+result);
		return result;
	}

九.拦截器应用的场合(最重要的应用是权限验证)
1. 定义权限拦截器AuthInterceptor.java
package com.test.interceptor;

import java.util.Map;

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

public class AuthInterceptor extends AbstractInterceptor {

	@SuppressWarnings("unchecked")
	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		Map map=invocation.getInvocationContext().getSession();
		if(null==map.get("user")){   //用户没有登录
			return Action.LOGIN;
		}else{
			return invocation.invoke();  //转到下一个拦截器
		}
	}

}

2. struts.xml增加拦截器
<?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>
	<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 name="authInterceptor" class="com.test.interceptor.AuthInterceptor">
			</interceptor>
//使用权限拦截器		
			<interceptor-stack name="myStack">
				<interceptor-ref name="authInterceptor"></interceptor-ref>
				<interceptor-ref name="myInterceptor"></interceptor-ref>
				<interceptor-ref name="myInterceptor2"></interceptor-ref>
				<interceptor-ref name="defaultStack"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
//使用全局结果集,对所有Action生效	
		<global-results>     
//type的值,可以在struts-default.xml中查找,redirect是重定向,默认是dispatcher转发                 
			<result name="login" type="redirect">/login.jsp</result>
		</global-results>
		<!-- 
		<default-interceptor-ref name="myStack"></default-interceptor-ref>
		 -->
		<action name="helloworld" class="com.test.action.HelloWorld">
			<result>/helloworld.jsp</result>
		</action>
		
		<action name="login" class="com.test.action.LoginAction">
			<result>/result.jsp</result>
			<result name="input">/login2.jsp</result>
		</action>
		
		<action name="converterAction" class="com.test.action.PointAction" method="test" >
			<result name="success">/output.jsp</result>
			<result name="input">/error.jsp</result>
		</action>
		
		<action name="register" class="com.test.action.RegisterAction">
			<result name="success">/success.jsp</result>
			<result name="input">/register.jsp</result>
			<!-- 
			<interceptor-ref name="myInterceptor"></interceptor-ref>
			<interceptor-ref name="myInterceptor2"></interceptor-ref>
			 -->
			 <interceptor-ref name="myStack"></interceptor-ref>
			
			
		</action>
		
	</package>
</struts>


分享到:
评论

相关推荐

    struts2 拦截器

    2. **拦截器链**:在Struts2中,多个拦截器可以形成一个拦截器链,每个拦截器按照定义的顺序依次执行。如果所有拦截器都允许Action执行,那么Action的结果将被传递到下一个拦截器,直到整个链执行完毕。 ### 二、...

    详解Struts2拦截器

    通过对Struts2拦截器的深入分析,我们可以看出拦截器不仅是Struts2框架的核心组成部分,也是实现代码重用、提高代码质量的有效手段。理解并合理运用拦截器,对于提升项目的开发效率和代码质量具有重要意义。

    Struts2拦截器原理分析

    在文章"Struts2拦截器原理分析实例"中,作者通过一个具体的应用场景,展示了如何配置和使用拦截器来实现特定的功能,比如日志记录或权限验证。通过阅读这篇博客,我们可以更直观地理解拦截器的工作方式和价值。 ...

    Struts2拦截器源程序

    分析这个文件或目录可以帮助我们更深入地理解Struts2拦截器的内部工作机制,包括它如何与ActionInvocation交互,以及如何处理请求和响应。 总结来说,Struts2拦截器是框架的核心部分,它们提供了一种灵活的方式,以...

    Struts2拦截器源码

    首先,理解拦截器的定义:拦截器是AOP(面向切面编程)的一个概念,在Struts2中,拦截器是基于Java的动态代理机制实现的。它们是一系列实现了`Interceptor`接口的类,可以在Action执行前后插入额外的行为。这些行为...

    Struts2 拦截器的执行顺序(二十九)

    Struts2 框架是Java Web开发中的一个强大工具,尤其在处理MVC模式时。拦截器(Interceptor)是Struts2的...通过阅读博客和分析项目源代码,开发者可以更深入地了解Struts2框架,并利用拦截器实现更高效的Web应用程序。

    Struts2的拦截器的小例子程序

    ### Struts2拦截器原理与实战案例解析 #### 一、Struts2拦截器概述 Struts2框架作为Java Web开发中的重要工具之一,其核心优势在于强大的MVC架构支持和丰富的扩展性。其中,拦截器(Interceptor)是Struts2框架的...

    12 struts2拦截器

    Struts2提供了一系列内置的拦截器,如`params`拦截器用于处理请求参数,`exception`拦截器处理异常,`i18n`拦截器实现国际化,`chain`拦截器使请求继续执行下一个Action,`timer`记录Action的执行时间等。这些拦截...

    Struts2的拦截器的使用详解

    本文将深入探讨Struts2的拦截器使用,结合实例和源码分析,帮助你更好地理解和运用这一特性。 一、拦截器的概念与作用 拦截器是Struts2框架的核心组件之一,它是在动作执行前后插入的一段代码,能够对请求进行...

    struts2拦截器举例

    在Struts2中,拦截器(Interceptor)是一个至关重要的概念,它增强了MVC框架的功能,使得开发者可以对请求处理进行预处理和后处理,实现如日志记录、权限验证、事务管理等通用操作。下面我们将深入探讨Struts2拦截器...

    struts拦截器的例子

    Struts拦截器是Java Web开发中的重要概念,尤其在基于Struts 2框架的应用中扮演着核心角色。这个"struts拦截器的例子"提供了一个学习和理解拦截器工作原理的起点,非常适合对这一主题感兴趣的初学者。 Struts 2框架...

    JavaWeb中Struts2拦截器深入分析(一)

    Struts2 拦截器是JavaWeb开发中Struts2框架的核心组件之一,它基于AOP(面向切面编程)理念,允许开发者在Action方法执行前后插入自定义逻辑。拦截器与Servlet中的过滤器虽然在功能上有相似之处,但它们在设计和使用...

    Struts2拦截器

    Struts2 拦截器是该框架中的核心组件之一,它允许开发者在Action执行前后插入自定义逻辑,实现如日志记录、权限验证、性能监控等功能。拦截器的机制基于AOP(面向切面编程)思想,通过拦截器链的方式,使得在执行...

    Struts2的拦截器——Struts2拦截器的基础知识.pptx

    拦截器是Struts2的核心组件之一,它基于AOP(面向切面编程)的概念,为框架提供了高度的灵活性和可扩展性。以下是关于Struts2拦截器的基础知识的详细说明: 1. **拦截器的定义与作用**: - 拦截器是Struts2框架中...

    浪曦struts2拦截器源码

    浪曦Struts2拦截器源码分析是深入理解Struts2工作原理的关键部分。拦截器在Struts2中扮演着重要的角色,它们是AOP(面向切面编程)的一种实现,用于在动作执行前后插入额外的功能,如日志记录、权限检查等。 首先,...

    Struts 2 过滤器和拦截器的区别

    通过对Struts 2框架中过滤器和拦截器的核心区别以及具体应用场景的分析,我们可以看到,虽然两者都能实现类似的功能(如权限验证),但它们的工作方式和技术基础存在明显差异。选择合适的技术方案取决于实际项目的...

    一个Struts2的核心拦截器例子

    核心拦截器是Struts2框架的重要组成部分,它们允许开发者在动作执行前后插入自定义逻辑,以实现如日志、权限验证、数据校验等常见功能。下面将详细讲解Struts2的核心拦截器以及如何在项目中使用它们。 1. **Struts2...

    Struts2 拦截器

    拦截器链是Struts2的一个重要特性,它允许开发者定义一系列拦截器,这些拦截器会在Action执行前后按顺序调用,提供了在不修改Action代码的情况下增强功能的可能性。 **2. 拦截器的工作原理** 当一个HTTP请求到达...

    Struts2之拦截器原理分析及使用-上案例struts007

    本篇文章将深入剖析Struts2拦截器的工作原理,并通过案例"struts007"来展示如何实际应用。 首先,我们了解下拦截器的基本概念。拦截器是一个实现了Struts2提供的`Interceptor`接口的类,它定义了两个方法:`...

    struts2拦截器的使用

    在深入探讨Struts2拦截器的...通过以上的分析,我们可以看出,Struts2拦截器为框架提供了强大的扩展性和灵活性,使得开发者能够轻松地在Action执行的前后加入各种自定义逻辑,极大地提高了应用的可维护性和功能多样性。

Global site tag (gtag.js) - Google Analytics