在strtus2 中有一个比较重要的东西就是拦截器(Interceptors)

拦截器可以做到在已有的业务中插入一块共通的,比如在一个业务中,直接插入一串登录功能,就不用去每个页面一个个去显示是否登录,

直接在拦截器管理,就等于在总入口直接管理了,也不会出现,个别直接通过连接能进入网站的。

或者说,在没进入一个功能的时候记录一下客户的操作,这样与其在一个个的action分别记录,直接在拦截器去记录会更加的方便

或者是记录log

这里来简单讲解下拦截器的使用。

拦截器是在struts.xml中进行配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
  4. "http://struts.apache.org/dtds/struts-2.1.7.dtd">
  5. <struts>
  6. <!-- 请求参数的编码方式-->
  7. <constant name="struts.i18n.encoding" value="UTF-8"/>
  8. <!-- 指定被struts2处理的请求后缀类型。多个用逗号隔开-->
  9. <constant name="struts.action.extension" value="action"/>
  10. <!-- 当struts.xml改动后,是否重新加载。默认值为false(生产环境下使用),开发阶段最好打开 -->
  11. <constant name="struts.configuration.xml.reload" value="true"/>
  12. <!-- 是否使用struts的开发模式。开发模式会有更多的调试信息。默认值为false(生产环境下使用),开发阶段最好打开 -->
  13. <constant name="struts.devMode" value="false"/>
  14. <!-- 设置浏览器是否缓存静态内容。默认值为true(生产环境下使用),开发阶段最好关闭 -->
  15. <constant name="struts.serve.static.browserCache" value="false" />
  16. <!-- 配置返回结果去哪里寻找 -->
  17. <constant name="struts.convention.result.path" value="/" />
  18. <!-- 配置类去哪里寻找 -->
  19. <constant name="struts.convention.package.locators" value="action" />
  20. <!-- 动态方法调用打开,可以通过感叹号调用action里面的方法 -->
  21. <constant name="struts.enable.DynamicMethodInvocation" value="true" />
  22.  
  23. <!-- <package name="Menu" namespace="/Menu" extends="struts-default">
  24. <action name="mainpage" class="com.almostman.action.MainPageAction">
  25. <result name="success">/success.jsp</result>
  26. <result name="input">/input.jsp</result>
  27. </action>
  28. </package> -->
  29. <!-- 这里的{1}表示*的值 -->
  30. <package name="Menu" namespace="/Menu" extends="struts-default">
  31.  
  32. <interceptors>
  33. <!-- 定义拦截器
  34. name:拦截器名称
  35. class:拦截器类路径
  36. -->
  37. <interceptor name="timer" class="com.almostman.action.TimerInterceptor"></interceptor>
  38. <interceptor name="logger" class="com.almostman.action.LoggerInterceptor"></interceptor>
  39. <!-- 定义拦截器栈 -->
  40. <interceptor-stack name="mystack">
  41. <!-- 在有自定义拦截器的时候一定要将默认拦截器放在最上面,不然会出现参数无法传递 -->
  42. <interceptor-ref name="defaultStack" />
  43. <interceptor-ref name="timer"/>
  44. <interceptor-ref name="logger"/>
  45. </interceptor-stack>
  46. </interceptors>
  47.  
  48. <!-- 定义默认的拦截器 每个Action都会自动引用
  49. 如果Action中引用了其它的拦截器 默认的拦截器将无效 -->
  50. <default-interceptor-ref name="mystack"></default-interceptor-ref>
  51. <!-- 全局results配置 -->
  52.  
  53. <action name="*" class="com.almostman.action.{1}Action" >
  54. <result name="success">/{1}.jsp</result>
  55. <result name="input">/input.jsp</result>
  56. </action>
  57. </package>
  58.  
  59. <package name="Test" namespace="/Test" extends="struts-default">
  60. <action name="HelloPage" class="com.almostman.action.HelloPageAction" >
  61. <result name="success" type="velocity" >/HelloPage.vm</result>
  62. <result name="input">/error.jsp</result>
  63. </action>
  64. </package>
  65.  
  66. </struts>

这里自定义了两个拦截器的类,一个用来记录 用户操作的时间,一个用来记录log。

  1. package com.almostman.action;
  2.  
  3. import com.opensymphony.xwork2.ActionInvocation;
  4. import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
  5.  
  6. public class TimerInterceptor extends AbstractInterceptor
  7. {
  8.  
  9. @Override
  10. public String intercept(ActionInvocation actionInvocation) throws Exception
  11. {
  12. // TODO Auto-generated method stub
  13. System.out.println("在正确的时间登录");
  14.  
  15. return actionInvocation.invoke();
  16. }
  17.  
  18. }
  1. package com.almostman.action;
  2.  
  3. import com.opensymphony.xwork2.ActionInvocation;
  4. import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
  5.  
  6. public class LoggerInterceptor extends AbstractInterceptor
  7. {
  8.  
  9. public LoggerInterceptor()
  10. {
  11. // TODO Auto-generated constructor stub
  12. }
  13.  
  14. @Override
  15. public String intercept(ActionInvocation actionInvocation) throws Exception
  16. {
  17. // TODO Auto-generated method stub
  18. System.out.println("在这里输出log");
  19. return actionInvocation.invoke();
  20. }
  21.  
  22. }

执行后一定要invoke出去,这样才能走到action,然后就是按照action的正常路程去返回给jsp页面。

,以上运行结果是:

能发下,拦截器生效,并且正常的走到了jsp的页面。

源码地址:http://pan.baidu.com/s/1cpdJdG

java strtus2 拦截器(Interceptors)的更多相关文章

  1. 【Struts2】自定义拦截器interceptors

    下面给一张图片表示Struts2拦截器的处理流程. 通过这个流程图,我们可以看出一个完整的请求大概的过程为: 请求 -->filter 控制器 --> 拦截器 1/ 拦截器 2--> ...

  2. 三种实现日志过滤器的方式 (过滤器 (Filter)、拦截器(Interceptors)和切面(Aspect))

    1.建立RequestWrapper类 import com.g2.order.server.utils.HttpHelper; import java.io.BufferedReader; impo ...

  3. java web 拦截器、过滤器理解

    1.首先要明确什么是拦截器.什么是过滤器 1.1 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加 ...

  4. java中拦截器与过滤器

    注:文摘自网络,仅供自己参考 1.首先要明确什么是拦截器.什么是过滤器 1.1 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之 ...

  5. java之拦截器Interceptor

    1,拦截器的概念    java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了 ...

  6. 拦截器interceptors

    拦截器interceptors 1. 基于HandlerMapping,对请求实施拦截,根据业务需求,基于不同的HandlerMapping定义多个拦截器 2. HandlerInterceptor接 ...

  7. java端拦截器判断客户的的请求是否是ajax请求

    java端拦截器判断客户的的请求是否是ajax请求 发表于 2014-08-22 23:38:08 普通请求与ajax请求的报文头不一样,通过如下 String requestType = reque ...

  8. [Java]利用拦截器和自定义注解做登录以及权限验证

    1.自定义注解 需要验证登录的注解 package com.etaofinance.wap.common; import java.lang.annotation.Documented; import ...

  9. Java使用拦截器的两种方式

    拦截器是个好东西,之前用到过,现在记录一下,供以后参考使用! 其一,使用org.aspectj.lang.annotation.Aspect 先上代码: package com.test.interc ...

随机推荐

  1. DOS命令:列出某目录下的所有文本文件名并重定向到某文件

    命令如下: >dir /b *.txt>output.txt dir无需说,/b 是只要文件名,>是重定向. 2013年11月7日13:36:57

  2. sass 和 css 互转网址

    sass to css:https://www.sassmeister.com/ css to sass:http://css2sass.herokuapp.com/

  3. 算法笔记_133:最大连续乘积子数组(Java)

    目录 1 问题描述 2 解决方案 2.1 蛮力法 2.2 动态规划法   1 问题描述 给定一个浮点数组,任意取出数组中的若干个连续的数相乘,请找出其中乘积最大的子数组. 2 解决方案 2.1 蛮力法 ...

  4. JQuery 之CSS操作

    JQuery 之CSS操作 设置 <p> 元素的颜色: 将所有段落的颜色设为红色 $(".btn1").click(function(){ $("p" ...

  5. 解构赋值 和 symbol

    1.数组解构 let [a,b,c,d] = ['aa','bb',77,88] 嵌套数组解构 let [a,b,[c,d],e] = ['aa','bb',[33,44],55] 空缺变量 let ...

  6. 查看正在执行的sql语句

    ;WITH t AS( SELECT [Spid] = session_Id, ecid, [Database] = DB_NAME(sp.dbid), [User] = nt_username, [ ...

  7. Spring 基于xml配置方式的AOP

    我们具体用代码来说明: 1.ArithmeticCalculator.java package com.proc; public interface ArithmeticCalculator { in ...

  8. 如何自动生成Makefile

    作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的M ...

  9. 本地ubuntu下pycharm 如何利用远程开发环境时显示图片

    最近使用pycharm远程开发tensorflow,每次在想显示图像时,苦于不知怎么操作,就通过保存后再看结果,使得调试很不方便.今天打算解决这个问题,收获也是很多啊. 我首先参考了这两篇博客: ht ...

  10. Java Socket网络编程Client端详解

    此类实现客户端套接字(也可以就叫“套接字”).套接字是两台机器之间的通信端点. Socket client = new Socket(ip,port);//创建一个流套接字并将其连接到指定 IP 地址 ...