struts框架中也存在拦截器,只不过系统自动调用。框架自带的拦截器的配置文件所在的位置为:

  java Resources--->Libraries--->struts2-core-2.3.36.jar(核心包)--->struts-default.xml

  这个配置文件中放置的是框架所有的拦截器,拦截器放置在拦截器栈中<interceptor-stack>。在配置文件中有一个基本拦截器栈,我们如果需要使用拦截器的时候,调用基本拦截器就可以了。

如果我们想要实现自己定义的功能,就需要自定义拦截器:

1. 编写拦截器,需要实现Interceptor接口,实现接口中的三个方法
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor; public class MyInterceptor implements Interceptor{ @Override
public void destroy() { } @Override
public void init() { } @Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("加密");
//放行
invocation.invoke();//放行让请求的功能执行
System.out.println("解密");
return null;
} }

2. 需要在struts.xml中进行拦截器的配置,配置一共有两种方式:

(1)第一种方式:定义拦截器。在action中要引用拦截器:只要是引用自己的拦截器,默认栈的拦截器就不执行了,必须要手动引入默认栈 。

(2)第二种方式:定义拦截器栈。将两个拦截器定义在一个栈中,所以在action标签中引用 拦截器的时候,只用引入拦截器栈名就可以了。

<package name="default" namespace="/" extends="struts-default">
<!-- 第一种配置方式 :定义了拦截器-->
<!-- <interceptors> -->
<!-- <interceptor name="MyInterceptor" class="com.huida.interceptor.MyInterceptor"></interceptor> -->
<!-- </interceptors> -->
<!-- 第二种配置方式:定义拦截器栈 -->
<interceptors>
<interceptor name="MyInterceptor" class="com.huida.interceptor.MyInterceptor"></interceptor>
<!-- 定义拦截器栈 -->
<interceptor-stack name="myStack">
<interceptor-ref name="MyInterceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<action name="demo3Action_*" class="com.huida.action.Demo3Action" method="{1}"><!-- 通配符的方式 -->
<!-- <interceptor-ref name="MyInterceptor"></interceptor-ref> --><!-- 这样访问demo的时候就会经过拦截器,这样系统的拦截器就不执行了 -->
<!-- <interceptor-ref name="defaultStack"></interceptor-ref> --><!-- 执行系统的拦截器,保证系统的完整性 -->
<interceptor-ref name="myStack"></interceptor-ref><!--如果定义了拦截器栈,这里就只用写拦截器栈的名称就可以了,因为拦截器把两个拦截器定义为了一个-->
<result name="success" >/suc.jsp</result>
</action>
</package>

启动服务器,在浏览器中输入:http://localhost:8080/struts2_day02/demo3Action_save,在控制台输出:

 

struts2框架之自定义拦截器和配置的更多相关文章

  1. Struts2中一个自定义拦截器的使用

    1.自定义的拦截器的类: package it.web.interceptor; import com.opensymphony.xwork2.ActionContext; import com.op ...

  2. 整合spring之后,struts2里面的自定义拦截器的invocation.invoke()总是返回input

    这个真的是整死我了,还好看见了一篇博客提示了我, 解决方法: 在spring的bean配置中我没有设置action的作用域为prototype,也就是多例的,如果不设置则就会是默认的singleton ...

  3. 使用struts2框架后的拦截器

    过滤特殊字符的过滤器 struts2会在web.xml中配置如下的过滤器: <filter> <filter-name>struts</filter-name> & ...

  4. struts2学习(6)自定义拦截器-登录验证拦截器

    需求:对登录进行验证,用户名cy 密码123456才能登录进去:  登录进去后,将用户存在session中: 其他链接要来访问(除了登录链接),首先验证是否登录,对这个进行拦截: com.cy.mod ...

  5. Struts2第七篇【介绍拦截器、自定义拦截器、执行流程、应用】

    什么是拦截器 拦截器Interceptor-..拦截器是Struts的概念,它与过滤器是类似的-可以近似于看作是过滤器 为什么我们要使用拦截器 前面在介绍Struts的时候已经讲解过了,Struts为 ...

  6. Struts2透过自定义拦截器实现登录之后跳转到原页面

    Struts2通过自定义拦截器实现登录之后跳转到原页面 这个功能对用户体验来说是非常重要的.实现起来其实很简单. 拦截器的代码如下: package go.derek.advice; import g ...

  7. JavaEE开发之SpringMVC中的自定义拦截器及异常处理

    上篇博客我们聊了<JavaEE开发之SpringMVC中的路由配置及参数传递详解>,本篇博客我们就聊一下自定义拦截器的实现.以及使用ModelAndView对象将Controller的值加 ...

  8. JavaWeb -- Struts 自定义拦截器, 登录权限拦截

    1. 自定义拦截器, 登录权限拦截 login.jsp 登录JSP <%@ page language="java" contentType="text/html; ...

  9. [ SSH框架 ] Struts2框架学习之四(自定义拦截器)

    一.Struts2的拦截器 1.1 拦截器概述 拦截器,在AOP( Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.拦截 ...

随机推荐

  1. jQuery的selector和context属性

    从jQuery1.3开始添加了这2个属性. 现在我们来看看那这2个属性的用法. selector属性是一个字符串.存储的字符串是选择器. HTML代码: <div class="guo ...

  2. 第3章 文件I/O(1)_标准C的I/O

    1. 标准C的I/O和FILE结构体 1.1 标准C的I/O库函数 (1)char *fgets( char *string, int n, FILE *stream );//从流中获取字符串 (2) ...

  3. bitmap运算

    概述 所谓bitmap就是用一个bit位来标记某个元素对应的value,而key即是这个元素.由于采用bit为单位来存储数据,因此在可以大大的节省存储空间     算法思想 32位机器上,一个整形,比 ...

  4. php 流程控制switch实例

    switch允许对一个标量(表达式)的多个可能结果做选择. 语法: switch (expr) { case result1: statement1 break; case result2: stat ...

  5. guess_age

    age_shanshan = 18count = 3num = 0while num < count: age = int(input("age:")) if age == ...

  6. Python模块之shelve

    shelve是python的自带model. 可以直接通过import shelve来引用. shelve类似于一个存储持久化对象的持久化字典,即字典文件. 使用方法也类似于字典. 保存对象至shel ...

  7. java中的URLConnection和HttpURLConnection有什么区别(因为我自己搜到别人写的区别看下来都没有什么区别)

    今天看了一下公司同事的代码,如下 URLConnection connection = openConnection(localURL); HttpURLConnection httpURLConne ...

  8. django模板中自动加载static

    TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join( ...

  9. 类继承-super, 私有变量

    多继承 class A: def ces(self): print('a-ces') class B(A): def ces(self): print('b-ces') class C(A): def ...

  10. python3.5过滤网址和图片的函数自己亲测可用

    def has_replace(tag): #过滤网址 real=re.sub(r'<a\shref=.+</a>', '',tag.decode(), count=0, flags ...