摘要:介绍实现的方式用于实现之前之后执行一般用于事物操作一般用于对某些未授权的页面访问的时候进行拦截操作拦截非法访问开箱即用拦截器拦截器传递属性拦截器测算执行时间必须有传递属性这个拦截器运行输出日志如下可以
介绍
实现aop的方式
用于实现action之前,之后执行
一般用于事物操作.
一般用于对某些未授权的页面访问的时候,进行拦截操作,拦截非法访问.
必须有传递属性这个拦截器
运行输出日志如下
2019-03-24 03:50:19.231 [DEBUG] com.opensymphony.xwork2.ognl.SecurityMemberAccess.isAccessible(SecurityMemberAccess.java:67) - Checking access for [target: com.ming.HelloWorldAction@33e67d25, member: public java.lang.String com.ming.HelloWorldAction.getName(), property: name] 2019-03-24 03:50:19.232 [INFO ] com.opensymphony.xwork2.interceptor.TimerInterceptor.doLog(TimerInterceptor.java:205) - Executed action [//hello!execute] took 12 ms.
可以看到这个action一共运行耗时12ms
自定义拦截器需要继承该抽象类,并实现其方法 即 com.opensymphony.xwork2.interceptor.AbstractInterceptor 抽象类
代码如下
package com.ming; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class MyInterceptor extends AbstractInterceptor { /** * Override to handle interception * * @param invocation */ @Override public String intercept(ActionInvocation invocation) throws Exception { return null; } }实现该类的interceptor方法
package com.ming; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class MyInterceptor extends AbstractInterceptor { /** * Override to handle interception * * @param invocation */ @Override public String intercept(ActionInvocation invocation) throws Exception { Logger logger = LogManager.getLogger(); // 执行结果前 String output = "hi before"; logger.info(output); // 开始执行Action String result = invocation.invoke(); // 执行结果后 output = "hi after"; logger.info(output); // 继续传递到下一个拦截器 return result; } }更改配置文件
效果如下/HelloWorld.jsp /error.html
控制台输出结果如下
2019-03-24 04:37:24.086 [DEBUG] com.opensymphony.xwork2.ognl.SecurityMemberAccess.isAccessible(SecurityMemberAccess.java:67) - Checking access for [target: com.ming.HelloWorldAction@5121691d, member: public void com.ming.HelloWorldAction.setName(java.lang.String), property: name] 2019-03-24 04:37:24.087 [INFO ] com.ming.MyInterceptor.intercept(MyInterceptor.java:19) - hi before 2019-03-24 04:37:24.089 [DEBUG] com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:430) - Executing action method = execute 2019-03-24 04:37:24.106 [DEBUG] com.opensymphony.xwork2.ognl.SecurityMemberAccess.isAccessible(SecurityMemberAccess.java:67) - Checking access for [target: com.ming.HelloWorldAction@5121691d, member: public java.lang.String com.ming.HelloWorldAction.execute() throws java.lang.Exception, property: null] 2019-03-24 04:37:24.143 [DEBUG] com.opensymphony.xwork2.ognl.SecurityMemberAccess.isAccessible(SecurityMemberAccess.java:67) - Checking access for [target: org.apache.struts2.result.ServletDispatcherResult@2e4369c6, member: public void org.apache.struts2.result.StrutsResultSupport.setLocation(java.lang.String), property: location] 2019-03-24 04:37:24.143 [DEBUG] com.opensymphony.xwork2.ognl.SecurityMemberAccess.isAccessible(SecurityMemberAccess.java:67) - Checking access for [target: org.apache.struts2.result.ServletDispatcherResult@2e4369c6, member: public void org.apache.struts2.result.StrutsResultSupport.setLocation(java.lang.String), property: location] 2019-03-24 04:37:24.150 [DEBUG] org.apache.struts2.result.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:127) - Forwarding to location: /error.html 2019-03-24 04:37:24.158 [DEBUG] com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler.nullPropertyValue(InstantiatingNullHandler.java:98) - Entering nullPropertyValue [target=[com.ming.HelloWorldAction@5121691d, com.opensymphony.xwork2.DefaultTextProvider@2e34626e], property=struts] 2019-03-24 04:37:24.175 [INFO ] com.ming.MyInterceptor.intercept(MyInterceptor.java:26) - hi after 2019-03-24 04:37:24.176 [INFO ] com.opensymphony.xwork2.interceptor.TimerInterceptor.doLog(TimerInterceptor.java:205) - Executed action [//hello!execute] took 89 ms.
可以看到,由于配置了3个拦截器,拦截器被顺序执行.
在执行前后分别执行了两个操作
这就是面向切面编程
此处可以添加事物 锁 其中锁可以用redis实现,达到同时多个tomcat实例读取数据库的时候,进行加锁操作,使用redis达到锁的目的
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/73926.html
摘要:文件上传通过这个拦截器拦截器的设计就是基于组件设计的应用再次回顾拦截器基础在开始讲解的时候已经说明过了这个文件,它定义了的所有拦截器。由于我们配置了自定义拦截器,那么默认的拦截器栈是不会执行的。 什么是拦截器 拦截器Interceptor.....拦截器是Struts的概念,它与过滤器是类似的...可以近似于看作是过滤器 为什么我们要使用拦截器 前面在介绍Struts的时候已经讲解过了...
摘要:执行中的方法,默认执行方法返回结果同样会通过一系列拦截器,然后由指定的表现形式返回,比如,或字面值配置文件利用配置文件初始化一系列的相关资源,这个底层实现技术属于依赖注入。会通过配置文件初始化的资源包括拦截器,类及。 1.Struts2简介 框架是一组程序的集合,包含了一系列的最佳实践,作用是解决某个领域的问题。本质上来讲,框架只是一个jar包,其本质上是对jdk的扩展。 最佳实践:...
摘要:现在,我们使用了的话,那么框架内部就能帮我们封装了。每个中都有和这样的方法,没必要的。我们抽取出来,通过配置文件来把这两个方法替换掉,那么我们的程序就会更加优雅了。于是乎,就应运而生了。因此,学习的时候,不了解是没有任何关系的。 前言 这是Strtus的开山篇,主要是引入struts框架...为什么要引入struts,引入struts的好处是什么,以及对Struts2一个简单的入门.....
摘要:的开发流程在文件中定义核心拦截用户请求。的最大作用是配置和请求之间的对应关系,并配置逻辑视图名和物理视图资源之间的相对关系,即返回结果和文件的物理位置的关系。实现为了使开发的更规范,提供了一个接口,定义了的处理应该实现的规范。 1.struts2的开发流程 在web.xml文件中定义核心Filter拦截用户请求。 struts2 org.apa...
摘要:前言前面博文基本把的配置信息讲解完了本博文主要讲解对数据的处理开发的三种方式在第一次我们写开发步骤的时候,我们写的是继承着类的为啥我们继承了类呢下面我就会讲解到继承类我们来看一下干了什么也就是说,如果我们在类中需要用到为我们提供的数据校验等 前言 前面Struts博文基本把Struts的配置信息讲解完了.....本博文主要讲解Struts对数据的处理 Action开发的三种方式 在第一...
摘要:自定义的拦截器可以和框架内置的拦截器进行混合使用,一般情况拦截器都被默认配置成为执行的基础。若类型转换失败,或者数据验证失败,拦截器就会阻止的执行。 1.拦截器简介 默认的拦截器在设计的时候就能满足大部分的应用,所以很多时候就不需要添加自定义的拦截器或者修改拦截器栈。很多action有各种各样的需求,比如输入验证、文件上传、防止多次提交等等。于是struts框架就提供了一个解决方案,I...
阅读 1014·2019-08-30 12:57
阅读 2060·2019-08-30 11:11
阅读 2161·2019-08-29 15:20
阅读 1847·2019-08-29 14:12
阅读 3256·2019-08-28 17:51
阅读 2363·2019-08-26 13:23
阅读 763·2019-08-26 10:34
阅读 3812·2019-08-23 12:37