拦截器:

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

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.ray</groupId><artifactId>struts2Test</artifactId><packaging>war</packaging><version>1.0-SNAPSHOT</version><name>struts2Test Maven Webapp</name><url>http://maven.apache.org</url><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-core --><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>2.5.16</version></dependency></dependencies><build><finalName>struts2Test</finalName></build></project>

3、web.xml

<web-app xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0" metadata-complete="true"><display-name>Archetype Created Web Application</display-name><!-- 过滤所有请求交给Struts2处理 --><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class><!--action后缀(方法二)--><!--<init-param>--><!--<param-name>struts.action.extension</param-name>--><!--<param-value>ray</param-value>--><!--</init-param>--></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>

4、time.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<%String path = request.getContextPath();String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><base href="<%=basePath%>"><title>Struts2拦截器示例之时间拦截器</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><a href="timer.action">执行Action方法并计算执行时间</a>
</body>
</html>

5、success.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<%String path = request.getContextPath();String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><base href="<%=basePath%>"><title>success.jsp</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body>Hello World~登录成功Action执行成功
</body>
</html>

6、TimerAction.java

package com.ray.action;import com.opensymphony.xwork2.ActionSupport;/*** Created by Ray on 2018/3/26 0026.**/
public class TimerAction extends ActionSupport {@Overridepublic String execute() throws Exception {for(int i = 0; i < 1000; i++){System.out.println("第" + i + "次循环");}return SUCCESS;}
}

7、TimeInterceptor.java

package com.ray.interceptor;import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;/*** Created by Ray on 2018/3/26 0026.**/
public class TimerInterceptor extends AbstractInterceptor {public String intercept(ActionInvocation invocation) throws Exception {//获取当前时间:mslong start = System.currentTimeMillis();//执行下一个拦截器,若已经是最后一个拦截器则执行action方法(result为逻辑视图名称)String result = invocation.invoke();//获取当前时间:mslong end = System.currentTimeMillis();//计算action执行时间并输出System.out.println("action执行时间为: " + (end-start) + "ms");//返回逻辑视图return result;}
}

8、ninth-struts.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN""http://struts.apache.org/dtds/struts-2.5.dtd"><struts><package name="default" extends="struts-default" namespace="/"><!-- 注册拦截器 --><interceptors><interceptor name="timer" class="com.ray.interceptor.TimerInterceptor"/></interceptors><action name="timer" class="com.ray.action.TimerAction"><result>/success.jsp</result><!-- 引入拦截器 --><interceptor-ref name="timer"/></action></package>
</struts>

9、struts.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN""http://struts.apache.org/dtds/struts-2.5.dtd"><struts><!-- action后缀(方法一) --><!--<constant name="struts.action.extension" value="ra"/>--><package name="default" namespace="/" extends="struts-default"><!-- 默认action --><default-action-ref name="404"/><action name="404"><result>/404.jsp</result></action><action name="helloWorld" class="com.ray.action.HelloWorldAction"><result name="success">/success.jsp</result></action></package><!--<include file="second-struts.xml"/>--><!--<include file="third-struts.xml"/>--><!--<include file="fourth-struts.xml"/>--><!--<include file="seventh-struts.xml"/>--><!--<include file="eighth-struts.xml"/>--><include file="ninth-struts.xml"/>
</struts>

10、页面效果

ok!

转载于:https://www.cnblogs.com/Remenber-Ray/p/8858040.html

第九篇——Struts2的拦截器相关推荐

  1. Struts2之拦截器篇

    拦截器是Struts2框架的核心和基础,Struts2绝大多数功能都是通过拦截器来完成的,当StrutsPrepareAndExecuteFilter拦截到用户请求后,大量拦截器会对该请求进行处理,然 ...

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

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

  3. struts2自定义拦截器并配置拦截器使其生效

    首先编写一个struts2的拦截器,要继承 MethodFilterInterceptor 并获取其中的方法 package star.july.d_interceptor;import com.op ...

  4. (转)Struts2的拦截器

    http://blog.csdn.net/yerenyuan_pku/article/details/68648101 Struts2的拦截器 拦截器的概述 拦截器,在AOP(Aspect-Orien ...

  5. java struts 拦截器_java框架篇---struts实现拦截器

    Struts2的拦截器和Servlet过滤器类似.在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器,在执行完所有引用的拦截器的intercept ...

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

    2019独角兽企业重金招聘Python工程师标准>>> 什么是拦截器 拦截器Interceptor.....拦截器是Struts的概念,它与过滤器是类似的...可以近似于看作是过滤器 ...

  7. struts2 18拦截器详解(五)

    I18nInterceptor 该拦截器处理defaultStack第四的位置,是用来方便国际化的,如果说我们的一个Web项目要支持国际化的话,通常的做法是给定一个下拉框列出所支持的语言,当用户选择了 ...

  8. Struts2自定义拦截器实例—登陆权限验证

    版本:struts2.1.6 此实例实现功能:用户需要指定用户名登陆,登陆成功进入相应页面执行操作,否则返回到登陆页面进行登陆,当直接访问操作页面(登陆后才能访问的页面)时则不允许,须返回登陆页面. ...

  9. dwz ajax session超时跳转登录页(struts2自定义拦截器)

    1.定义struts2拦截器(网上例子很多) 代码如下: package rt.intercepter;import java.util.Map;import javax.servlet.http.H ...

最新文章

  1. usb大容量存储设备驱动_Win10默认已禁用USB驱动器缓存 1903版本起无需点击安全弹出...
  2. 【转】C#Static类和Static构造函数
  3. [转]Tomcat启动报错:AnnotationConfigBeanDefinitionParser are only available on JDK 1.5 and higher...
  4. eclipse java main方法传参数
  5. MarkerOpter marker操作类
  6. 和最大子序列(dp)
  7. 从托管映像创建 VM
  8. Jeecg弱口令后台上传getShell渗透测试
  9. 10 个深恶痛绝的 Java 异常
  10. 稿定设计怎么去除水印?
  11. Flutter Provider状态管理-Consumer
  12. 103000大写加零吗_103000怎样大写不写零
  13. 神奇。cv2.calcHist()函数返回值,灰度值为255的像素个数看似为0。
  14. T(n)=25T(n/5)+n*n的时间复杂度
  15. 千万不要死于无知—几条健康忠告(三)
  16. Android Camera了解一下
  17. 广联达 BIM5D 云平台---《建筑信息模型标准》解读
  18. 微信小程序7__一行3 列的布局
  19. 【Android】Android Broadcast源码解析
  20. 三体模拟器(python)

热门文章

  1. 心理学在产品中的应用
  2. 开启Windows的telnet客户端
  3. Kotlin之美——DSL篇 和 如何让你的回调更具Kotlin风味
  4. JAVA——界面设计Swing教程
  5. Java简易扑克牌游戏(慕课网作业)
  6. 程序员平常加班严重,如何有效率的提升自己?
  7. Python3趣味系列题4------非递归解决三阶汉诺塔以及动态展示过程
  8. Nebius Welcome Round (Div. 1 + Div. 2)(B~E)
  9. 啥也不想干的时候怎么办呢?
  10. linux 命令自动填充,Shell脚本学习笔记之(自动填充函数模板)