第九篇——Struts2的拦截器
拦截器:
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的拦截器相关推荐
- Struts2之拦截器篇
拦截器是Struts2框架的核心和基础,Struts2绝大多数功能都是通过拦截器来完成的,当StrutsPrepareAndExecuteFilter拦截到用户请求后,大量拦截器会对该请求进行处理,然 ...
- Struts2第七篇【介绍拦截器、自定义拦截器、执行流程、应用】
什么是拦截器 拦截器Interceptor-..拦截器是Struts的概念,它与过滤器是类似的-可以近似于看作是过滤器 为什么我们要使用拦截器 前面在介绍Struts的时候已经讲解过了,Struts为 ...
- struts2自定义拦截器并配置拦截器使其生效
首先编写一个struts2的拦截器,要继承 MethodFilterInterceptor 并获取其中的方法 package star.july.d_interceptor;import com.op ...
- (转)Struts2的拦截器
http://blog.csdn.net/yerenyuan_pku/article/details/68648101 Struts2的拦截器 拦截器的概述 拦截器,在AOP(Aspect-Orien ...
- java struts 拦截器_java框架篇---struts实现拦截器
Struts2的拦截器和Servlet过滤器类似.在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器,在执行完所有引用的拦截器的intercept ...
- Struts2【拦截器】就是这么简单
2019独角兽企业重金招聘Python工程师标准>>> 什么是拦截器 拦截器Interceptor.....拦截器是Struts的概念,它与过滤器是类似的...可以近似于看作是过滤器 ...
- struts2 18拦截器详解(五)
I18nInterceptor 该拦截器处理defaultStack第四的位置,是用来方便国际化的,如果说我们的一个Web项目要支持国际化的话,通常的做法是给定一个下拉框列出所支持的语言,当用户选择了 ...
- Struts2自定义拦截器实例—登陆权限验证
版本:struts2.1.6 此实例实现功能:用户需要指定用户名登陆,登陆成功进入相应页面执行操作,否则返回到登陆页面进行登陆,当直接访问操作页面(登陆后才能访问的页面)时则不允许,须返回登陆页面. ...
- dwz ajax session超时跳转登录页(struts2自定义拦截器)
1.定义struts2拦截器(网上例子很多) 代码如下: package rt.intercepter;import java.util.Map;import javax.servlet.http.H ...
最新文章
- usb大容量存储设备驱动_Win10默认已禁用USB驱动器缓存 1903版本起无需点击安全弹出...
- 【转】C#Static类和Static构造函数
- [转]Tomcat启动报错:AnnotationConfigBeanDefinitionParser are only available on JDK 1.5 and higher...
- eclipse java main方法传参数
- MarkerOpter marker操作类
- 和最大子序列(dp)
- 从托管映像创建 VM
- Jeecg弱口令后台上传getShell渗透测试
- 10 个深恶痛绝的 Java 异常
- 稿定设计怎么去除水印?
- Flutter Provider状态管理-Consumer
- 103000大写加零吗_103000怎样大写不写零
- 神奇。cv2.calcHist()函数返回值,灰度值为255的像素个数看似为0。
- T(n)=25T(n/5)+n*n的时间复杂度
- 千万不要死于无知—几条健康忠告(三)
- Android Camera了解一下
- 广联达 BIM5D 云平台---《建筑信息模型标准》解读
- 微信小程序7__一行3 列的布局
- 【Android】Android Broadcast源码解析
- 三体模拟器(python)
热门文章
- 心理学在产品中的应用
- 开启Windows的telnet客户端
- Kotlin之美——DSL篇 和 如何让你的回调更具Kotlin风味
- JAVA——界面设计Swing教程
- Java简易扑克牌游戏(慕课网作业)
- 程序员平常加班严重,如何有效率的提升自己?
- Python3趣味系列题4------非递归解决三阶汉诺塔以及动态展示过程
- Nebius Welcome Round (Div. 1 + Div. 2)(B~E)
- 啥也不想干的时候怎么办呢?
- linux 命令自动填充,Shell脚本学习笔记之(自动填充函数模板)