<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.devMode" value="true" /> <package name="p1" extends="struts-default"> <!-- 声明自定义拦截器 --> <interceptors> <interceptor name="demo1Interceptor" class="com.itheima.web.interceptor.Demo1Interceptor"></interceptor> <interceptor name="demo2Interceptor" class="com.itheima.web.interceptor.Demo2Interceptor"></interceptor> </interceptors> <action name="action1" class="com.itheima.web.action.Demo1Action" method="save"> <!-- 使用自定义拦截器:当配置了任何一个拦截器,默认的拦截器栈就不会在工作了 . 当有多个拦截器的时候,是由引用配置决定执行的顺序 。 注意:执行顺序与声明无关--> <interceptor-ref name="demo2Interceptor"></interceptor-ref> <interceptor-ref name="demo1Interceptor"></interceptor-ref> <result name="success">/demo1.jsp</result> </action> </package> <!-- 使用自定义拦截器,检查登录。最基本的配置方式。 其中存在的问题: 当我们使用了自定义拦截器之后,默认的拦截器栈就不再工作了 <package name="p2" extends="struts-default"> <interceptors>声明拦截器 <interceptor name="checkLoginInterceptor" class="com.itheima.web.interceptor.CheckLoginInterceptor" /> </interceptors> <global-results>全局结果视图 <result name="input">/login.jsp</result>数据回显的结果视图 </global-results> 用户登录时,不需要检查登录的拦截器工作 <action name="login" class="com.itheima.web.action.Demo2Action" method="login"> <result type="redirectAction">showMain</result> </action> 前往主页的动作名称,需要检查登录的拦截器工作 <action name="showMain" class="com.itheima.web.action.Demo2Action" > <interceptor-ref name="checkLoginInterceptor"></interceptor-ref> <result>/main.jsp</result> </action> 前往另一个页面的动作名称,需要检查登录的拦截器工作 <action name="showOther" class="com.itheima.web.action.Demo2Action" > <interceptor-ref name="checkLoginInterceptor"></interceptor-ref> <result>/otherpage.jsp</result> </action> </package>--> <!-- a.针对上面的问题,我们的解决办法是,把默认的拦截器栈也配置进来. <package name="p2" extends="struts-default"> <interceptors> <interceptor name="checkLoginInterceptor" class="com.itheima.web.interceptor.CheckLoginInterceptor" /> </interceptors> <global-results> <result name="input">/login.jsp</result> </global-results> <action name="login" class="com.itheima.web.action.Demo2Action" method="login"> <result type="redirectAction">showMain</result> </action> <action name="showMain" class="com.itheima.web.action.Demo2Action" > 加入自定义拦截器,和默认的拦截器栈 <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="checkLoginInterceptor"></interceptor-ref> <result>/main.jsp</result> </action> <action name="showOther" class="com.itheima.web.action.Demo2Action" > 加入自定义拦截器,和默认的拦截器栈 <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="checkLoginInterceptor"></interceptor-ref> <result>/otherpage.jsp</result> </action> </package>--> <!-- b. a中存在的弊端,当如果需要拦截的动作很多时,写起来很繁琐 <package name="p2" extends="struts-default"> <interceptors> <interceptor name="checkLoginInterceptor" class="com.itheima.web.interceptor.CheckLoginInterceptor" /> 定义一个拦截器栈,把我们自定义的拦截器和默认的拦截器栈放到一起. <interceptor-stack name="myDefaultStack"> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="checkLoginInterceptor"></interceptor-ref> </interceptor-stack> </interceptors> <global-results> <result name="input">/login.jsp</result> </global-results> <action name="login" class="com.itheima.web.action.Demo2Action" method="login"> <result type="redirectAction">showMain</result> </action> <action name="showMain" class="com.itheima.web.action.Demo2Action" > 直接引入我们自己定义的拦截器栈,里面已经包含了默认的拦截器栈 <interceptor-ref name="myDefaultStack"></interceptor-ref> <result>/main.jsp</result> </action> <action name="showOther" class="com.itheima.web.action.Demo2Action" > 直接引入我们自己定义的拦截器栈,里面已经包含了默认的拦截器栈 <interceptor-ref name="myDefaultStack"></interceptor-ref> <result>/otherpage.jsp</result> </action> </package> --> <!-- c. b中存在的问题,还需要在每个要用到地方使用拦截器引用。 解决办法:使用覆盖struts-default.xml配置文件中的默认拦截器栈,让我们的这个称为默认的 <package name="p2" extends="struts-default"> <interceptors> <interceptor name="checkLoginInterceptor" class="com.itheima.web.interceptor.CheckLoginInterceptor" /> <interceptor-stack name="myDefaultStack"> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="checkLoginInterceptor"></interceptor-ref> </interceptor-stack> </interceptors> 覆盖了struts-default.xml中定义的默认拦截器栈。由myDefaultStack把defaultStack给替换了 <default-interceptor-ref name="myDefaultStack"></default-interceptor-ref> <global-results> <result name="input">/login.jsp</result> </global-results> <action name="login" class="com.itheima.web.action.Demo2Action" method="login"> <result type="redirectAction">showMain</result> </action> <action name="showMain" class="com.itheima.web.action.Demo2Action" > <result>/main.jsp</result> </action> <action name="showOther" class="com.itheima.web.action.Demo2Action" > <result>/otherpage.jsp</result> </action> </package> --> <!-- d. c中存在的问题,当我们配置了默认的拦截器栈时,连登陆都被拦截了。 解决办法: 在AbstractInterceptor的子类中,还有一个抽象类MethodFilterInterceptor,它里面提供了两个属性。 excludeMethods:哪些方法不需要拦截 includeMethods:哪些方法需要拦截 <package name="p2" extends="struts-default"> <interceptors> <interceptor name="checkLoginInterceptor1" class="com.itheima.web.interceptor.CheckLoginInterceptor1" /> <interceptor-stack name="myDefaultStack"> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="checkLoginInterceptor1"> 给自定义拦截器注入参数,告知他哪些方法不需要拦截 <param name="excludeMethods">login</param> </interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="myDefaultStack"></default-interceptor-ref> <global-results> <result name="input">/login.jsp</result> </global-results> <action name="login" class="com.itheima.web.action.Demo2Action" method="login"> <result type="redirectAction">showMain</result> </action> <action name="showMain" class="com.itheima.web.action.Demo2Action" > <result>/main.jsp</result> </action> <action name="showOther" class="com.itheima.web.action.Demo2Action" > <result>/otherpage.jsp</result> </action> </package> --> <!-- e. d中的问题,我们在声明拦截器和定义拦截器栈的时候,可能根本不知道哪些方法需要拦截,哪些不需要 解决办法:在使用拦截器的时候,注入参数,告诉拦截器哪些需要拦截,哪些不需要 --> <package name="p2" extends="struts-default"> <interceptors> <interceptor name="checkLoginInterceptor1" class="com.itheima.web.interceptor.CheckLoginInterceptor1" /> <interceptor-stack name="myDefaultStack"> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="checkLoginInterceptor1"></interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="myDefaultStack"></default-interceptor-ref> <global-results> <result name="input">/login.jsp</result> </global-results> <action name="login" class="com.itheima.web.action.Demo2Action" method="login"> <interceptor-ref name="myDefaultStack"> <!-- 在引用自定义拦截器栈的时候,给指定的拦截器注入参数。方式就是:拦截器名称.属性名称 --> <param name="checkLoginInterceptor1.excludeMethods">login</param> </interceptor-ref> <result type="redirectAction">showMain</result> </action> <action name="showMain" class="com.itheima.web.action.Demo2Action" > <result>/main.jsp</result> </action> <action name="showOther" class="com.itheima.web.action.Demo2Action" > <result>/otherpage.jsp</result> </action> </package> </struts>
相关推荐
3. 在Struts2的配置文件(struts.xml)中声明并配置拦截器,指定拦截器的执行顺序和作用范围。 **四、拦截器的配置** Struts2的拦截器可以通过XML或注解两种方式进行配置: - XML配置:在`struts.xml`文件中,...
3. **配置拦截器**:拦截器可以通过Struts2配置文件或注解进行配置,指定在哪些Action上使用哪些拦截器。 ### 二、单个Action配置拦截器实例 1. **创建拦截器**:首先,我们需要创建一个实现了`Interceptor`接口的...
### Struts2拦截器的使用方法 #### 一、Struts2拦截器概述 ...通过以上介绍,我们可以了解到Struts2拦截器的基本使用方法及配置方式,这对于理解Struts2框架的工作机制以及优化应用架构具有重要意义。
2. **配置拦截器**:在`struts.xml`配置文件中定义拦截器,指定其执行顺序和关联的Action。 3. **注册拦截器**:将自定义拦截器加入到`struts-default`或`struts-plugin`拦截器栈中,或者创建新的拦截器栈并应用到...
### Struts2拦截器详解 #### 一、Struts2拦截器概述 Struts2框架作为Java Web开发中的一种流行框架,其核心组件之一便是**拦截器**。拦截器不仅在Struts2中扮演着重要角色,更是整个框架灵活性与扩展性的基石。...
3. 在调用Action之前,Struts2会按照配置的顺序依次执行拦截器链。 4. 每个拦截器可以决定是否允许请求继续传递到下一个拦截器或直接终止。例如,一个登录拦截器可能会检查用户是否已登录,如果未登录则跳转到登录...
在Struts2的核心配置文件`struts.xml`中,我们可以定义拦截器链,指定哪些拦截器应用于哪些Action。 权限控制是web应用中不可或缺的一部分,它可以防止未经授权的用户访问特定资源。在Struts2中,我们可以通过拦截...
在提供的文件"10Struts2Validation"和"11Struts2InterceptorConfig"中,可能包含了Struts2拦截器配置和验证的示例代码。这些代码可以帮助你理解如何设置拦截器,如何配置验证规则,以及如何在实际应用中实现登录验证...
拦截器是Struts2框架的核心特性之一,它们扮演着处理请求、增强功能和实现业务逻辑的角色。在Struts2中,拦截器就像过滤器一样工作,通过链式调用在动作执行前后进行预处理和后处理。 首先,我们来理解一下拦截器的...
当一个请求被发送到Struts2框架时,拦截器会按照配置的顺序依次对请求进行处理。每个拦截器都有`intercept()`方法,这个方法会在动作执行前和执行后被调用,允许开发者插入预处理和后处理逻辑。 **2. 拦截器的工作...
当请求到达控制器时,Struts2会依次调用这个栈中的拦截器,每个拦截器都有机会处理请求,然后决定是否将请求传递给下一个拦截器或直接返回响应。 创建一个简单的Struts2拦截器,你需要遵循以下步骤: 1. 创建拦截...
2. **拦截**:当一个请求到达Action时,Struts2会根据配置的拦截器栈顺序,先调用每个拦截器的`intercept()`方法,然后才执行Action的业务逻辑。 3. **后处理**:Action执行完毕后,Struts2会逆序遍历拦截器栈,调用...
2. **拦截器配置**: - 在Struts2配置文件中定义拦截器,比如创建一个名为`myInterceptor`的拦截器,指定其类为`com.zzz.struts2.interceptor.MyInterceptor`,并设置系统初始化参数,如`张钊钊</param>`。 - 创建...
我们需要在struts.xml配置文件中声明这个拦截器,并将其加入到默认的拦截器栈或者特定Action的拦截器配置中。例如: ```xml <struts> <package name="default" namespace="/" extends="struts-default"> <!-- ...
1. **Struts2配置**:理解`struts.xml`文件的配置,包括Action的配置、拦截器栈的定义等。 2. **拦截器的编写和使用**:创建自定义拦截器类,实现`Interceptor`接口,以及如何在配置文件中引用拦截器。 3. **Action...
3. 依据配置的Interceptor Stack(拦截器栈),Struts2会按顺序调用每个拦截器的`intercept`方法。 4. 在`intercept`方法中,通常会先调用`ActionInvocation`的`invoke`方法,这将执行下一个拦截器或者直接执行...
在Struts2配置中,我们需要将这个拦截器添加到拦截器栈中,通常是在`struts.xml`文件中。这样,每次请求到达Action之前,都会先经过这个拦截器: ```xml <struts> ...
3. 配置拦截器栈:Struts2使用拦截器栈的概念,即将多个拦截器组织成一个栈,按照栈的顺序依次执行。在`struts.xml`中,可以创建一个或多个拦截器栈,并将权限拦截器包含在内。 4. 应用拦截器:在Action配置中,...
然而,Struts2从2.1版本开始引入了拦截器注解,使得无需在配置文件中显式声明拦截器,就可以直接在Action类或方法上使用注解来应用拦截器。这种方式更简洁,减少了配置工作量,提高了代码可读性。 以下是几种常见的...
当一个请求到达时,Struts2会按照配置的拦截器栈顺序逐个调用这些拦截器,然后执行Action,最后再按逆序返回。拦截器可以进行如权限验证、日志记录、性能监控等多种操作。 2. **创建自定义拦截器** 创建自定义拦截...