拦截器:

Struts2大多数核心功能都是通过拦截器实现的,每个拦截器完成某项功能;

拦截器方法在Action执行之前或之后执行。

工作原理:

拦截器的执行过程是一个递归的过程

action请求-->拦截器1-->拦截器2-->...-->拦截器n-->action方法-->返回结果-->拦截器n-->...-->拦截器2-->拦截器1-->逻辑视图


实现方式:

方式一:实现Interceptor接口

1.void init():初始化拦截器所需资源;

2.void destory():释放在init()中分配的资源;

3.String interceptor(ActionInvocation invocation)throw Exception:

1)实现拦截器;

2)利用ActionInvocation参数获取Action动态;

3)返回result字符串作为逻辑视图。

方式二:继承AbstractInterceptor类(常用)

1.提供了init()和destroy()方法的空实现;

2.只需要实现interceptor方法。

Struts2内置拦截器:

    params拦截器:

        负责将请求参数设置为Action属性

    staticParams拦截器:

将配置文件中action子元素param参数设置为Action属性

servletConfig拦截器:

将源于Servlet API的各种对象注入到Action中,必须实现对应接口

fileUpload拦截器:

对文件上传提供支持,将文件和数据设置到对应的Action属性(对Commons-FileUpload进行封装)

exception拦截器:

捕获异常,并且将异常映射到用户自定义的错误页面

validation拦截器:

调用验证框架进行数据验证

项目实例:

1、项目结构

2、pom.xml

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.ray</groupId>
  5. <artifactId>struts2Test</artifactId>
  6. <packaging>war</packaging>
  7. <version>1.0-SNAPSHOT</version>
  8. <name>struts2Test Maven Webapp</name>
  9. <url>http://maven.apache.org</url>
  10.  
  11. <dependencies>
  12.  
  13. <dependency>
  14. <groupId>junit</groupId>
  15. <artifactId>junit</artifactId>
  16. <version>3.8.1</version>
  17. <scope>test</scope>
  18. </dependency>
  19.  
  20. <!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-core -->
  21. <dependency>
  22. <groupId>org.apache.struts</groupId>
  23. <artifactId>struts2-core</artifactId>
  24. <version>2.5.16</version>
  25. </dependency>
  26.  
  27. </dependencies>
  28.  
  29. <build>
  30. <finalName>struts2Test</finalName>
  31. </build>
  32.  
  33. </project>

3、web.xml

  1. <web-app xmlns="http://java.sun.com/xml/ns/javaee"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  4. http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  5. version="3.0" metadata-complete="true">
  6. <display-name>Archetype Created Web Application</display-name>
  7.  
  8. <!-- 过滤所有请求交给Struts2处理 -->
  9. <filter>
  10. <filter-name>struts2</filter-name>
  11. <filter-class>
  12. org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
  13. </filter-class>
  14.  
  15. <!--action后缀(方法二)-->
  16. <!--<init-param>-->
  17. <!--<param-name>struts.action.extension</param-name>-->
  18. <!--<param-value>ray</param-value>-->
  19. <!--</init-param>-->
  20. </filter>
  21.  
  22. <filter-mapping>
  23. <filter-name>struts2</filter-name>
  24. <url-pattern>/*</url-pattern>
  25. </filter-mapping>
  26.  
  27. </web-app>

4、time.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
  5. %>
  6.  
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  8. <html>
  9. <head>
  10. <base href="<%=basePath%>">
  11.  
  12. <title>Struts2拦截器示例之时间拦截器</title>
  13.  
  14. <meta http-equiv="pragma" content="no-cache">
  15. <meta http-equiv="cache-control" content="no-cache">
  16. <meta http-equiv="expires" content="0">
  17. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  18. <meta http-equiv="description" content="This is my page">
  19. <!--
  20. <link rel="stylesheet" type="text/css" href="styles.css">
  21. -->
  22.  
  23. </head>
  24.  
  25. <body>
  26. <a href="timer.action">执行Action方法并计算执行时间</a>
  27. </body>
  28. </html>

5、success.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
  5. %>
  6.  
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  8. <html>
  9. <head>
  10. <base href="<%=basePath%>">
  11.  
  12. <title>success.jsp</title>
  13.  
  14. <meta http-equiv="pragma" content="no-cache">
  15. <meta http-equiv="cache-control" content="no-cache">
  16. <meta http-equiv="expires" content="0">
  17. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  18. <meta http-equiv="description" content="This is my page">
  19. <!--
  20. <link rel="stylesheet" type="text/css" href="styles.css">
  21. -->
  22.  
  23. </head>
  24.  
  25. <body>
  26. Hello World~
  27. 登录成功
  28. Action执行成功
  29. </body>
  30. </html>

6、TimerAction.java

  1. package com.ray.action;
  2.  
  3. import com.opensymphony.xwork2.ActionSupport;
  4.  
  5. /**
  6. * Created by Ray on 2018/3/26 0026.
  7. **/
  8. public class TimerAction extends ActionSupport {
  9.  
  10. @Override
  11. public String execute() throws Exception {
  12.  
  13. for(int i = 0; i < 1000; i++){
  14. System.out.println("第" + i + "次循环");
  15. }
  16.  
  17. return SUCCESS;
  18. }
  19. }

7、TimeInterceptor.java

  1. package com.ray.interceptor;
  2.  
  3. import com.opensymphony.xwork2.ActionInvocation;
  4. import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
  5.  
  6. /**
  7. * Created by Ray on 2018/3/26 0026.
  8. **/
  9. public class TimerInterceptor extends AbstractInterceptor {
  10.  
  11. public String intercept(ActionInvocation invocation) throws Exception {
  12.  
  13. //获取当前时间:ms
  14. long start = System.currentTimeMillis();
  15. //执行下一个拦截器,若已经是最后一个拦截器则执行action方法(result为逻辑视图名称)
  16. String result = invocation.invoke();
  17. //获取当前时间:ms
  18. long end = System.currentTimeMillis();
  19. //计算action执行时间并输出
  20. System.out.println("action执行时间为: " + (end-start) + "ms");
  21. //返回逻辑视图
  22. return result;
  23. }
  24. }

8、ninth-struts.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <!DOCTYPE struts PUBLIC
  4. "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
  5. "http://struts.apache.org/dtds/struts-2.5.dtd">
  6.  
  7. <struts>
  8.  
  9. <package name="default" extends="struts-default" namespace="/">
  10. <!-- 注册拦截器 -->
  11. <interceptors>
  12. <interceptor name="timer" class="com.ray.interceptor.TimerInterceptor"/>
  13. </interceptors>
  14.  
  15. <action name="timer" class="com.ray.action.TimerAction">
  16. <result>/success.jsp</result>
  17. <!-- 引入拦截器 -->
  18. <interceptor-ref name="timer"/>
  19. </action>
  20. </package>
  21. </struts>

9、struts.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <!DOCTYPE struts PUBLIC
  4. "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
  5. "http://struts.apache.org/dtds/struts-2.5.dtd">
  6.  
  7. <struts>
  8.  
  9. <!-- action后缀(方法一) -->
  10. <!--<constant name="struts.action.extension" value="ra"/>-->
  11.  
  12. <package name="default" namespace="/" extends="struts-default">
  13. <!-- 默认action -->
  14. <default-action-ref name="404"/>
  15. <action name="404">
  16. <result>/404.jsp</result>
  17. </action>
  18.  
  19. <action name="helloWorld" class="com.ray.action.HelloWorldAction">
  20. <result name="success">/success.jsp</result>
  21. </action>
  22.  
  23. </package>
  24.  
  25. <!--<include file="second-struts.xml"/>-->
  26. <!--<include file="third-struts.xml"/>-->
  27. <!--<include file="fourth-struts.xml"/>-->
  28. <!--<include file="seventh-struts.xml"/>-->
  29. <!--<include file="eighth-struts.xml"/>-->
  30. <include file="ninth-struts.xml"/>
  31. </struts>

10、页面效果

ok!

第九篇——Struts2的拦截器的更多相关文章

  1. 第十篇——Struts2的拦截器栈

    拦截器栈: 从结构上看:拦截器栈相当于多个拦截器的组合: 从功能上看:拦截器栈也是拦截器. 默认拦截器栈: 在struts-core.jar包中的struts-default.xml中自定义了一个de ...

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

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

  3. 谈谈 Struts2 的拦截器

    套话 相信非常多人都用过 Struts2 了,当然,对 Struts2 的原理也都比較了解.之前在一个项目中就已经用到了,当初的理解也不过局限在应用的层面上,对于更深层次的原理.机制,了解的并非非常多 ...

  4. 简单理解Struts2中拦截器与过滤器的区别及执行顺序

    简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...

  5. struts2总结六: Struts2的拦截器

    一.Struts2的系统结构图

  6. Struts2使用拦截器完成权限控制示例

    http://aumy2008.iteye.com/blog/146952 Struts2使用拦截器完成权限控制示例 示例需求:    要求用户登录,且必须为指定用户名才可以查看系统中某个视图资源:否 ...

  7. Struts2自定义拦截器Interceptor以及拦截器登录实例

    1.在Struts2自定义拦截器有三种方式: -->实现Interceptor接口 public class QLInterceptorAction implements Interceptor ...

  8. struts2之拦截器

    1. 为什么需要拦截器 早期MVC框架将一些通用操作写死在核心控制器中,致使框架灵活性不足.可扩展性降低, Struts 2将核心功能放到多个拦截器中实现,拦截器可自由选择和组合,增强了灵活性,有利于 ...

  9. Struts2【拦截器】就是这么简单

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

随机推荐

  1. Linux date 命令

    date命令用于打印或设置系统日期和时间,常见用法如下: [root@localhost ~]# date //查看当前时间 [root@localhost ~]# date +"%Y-%m ...

  2. VS每次F5都重新编译代码,即使没有任何修改

    遇到一个奇怪现象,不知道怎么设置了,突然工程的Release模式下,F5每次都要重新编译代码,而且是全部代码都重新编译 而Debug模式没问题 重启VS,重启机器,清理工程重新生成工程都无法解决 最后 ...

  3. java基础---->String中replace和replaceAll方法

    这里面我们分析一下replace与replaceAll方法的差异以及原理. replace各个方法的定义 一.replaceFirst方法 public String replaceFirst(Str ...

  4. git bash here右键菜单

    Windows Registry Editor Version 5.00 ; Open files[HKEY_CLASSES_ROOT\*\shell\gitbash]@="gitbash& ...

  5. HyperLogLog 算法的原理讲解以及 Redis 是如何应用它的

    作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...

  6. ECharts(中国地图篇)的使用

    代码html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <me ...

  7. Java课程寒假之开发记账本软件(网页版)之三

    一.实现基础功能之一(查询)(补) 在上一篇中解释的不够详细,在本篇中补充一下指定日期查询,其实和查询没有什么区别,就是设置select下拉框来对于日期的起始与结束日期,然后就是一个简单的mysql语 ...

  8. mybatis10--自连接多对一查询

    查询老师对应的所有导师的信息 在09的基础上修改dao和mapper文件 public interface TeacherDao { /** * 根据老师的编号查询所有的导师信息 */ Teacher ...

  9. Ubantu 好玩以及有用的命令

    1.cowsay 图像 Dell:~$ sudo apt-get install cowsay Dell:~$ cowsay -f elephant-in-snake 00 Dell:~$ cowsa ...

  10. canvas里设置width和css里设置width和js里设置width的区别

    canvas.width 和 它的style.width是不一样的: canvas是个画布,有他自己的宽和高(默认是没有单位的纯数字),就是canvas.width和canvas.height的宽和高 ...