java strtus2 拦截器(Interceptors)
在strtus2 中有一个比较重要的东西就是拦截器(Interceptors)
拦截器可以做到在已有的业务中插入一块共通的,比如在一个业务中,直接插入一串登录功能,就不用去每个页面一个个去显示是否登录,
直接在拦截器管理,就等于在总入口直接管理了,也不会出现,个别直接通过连接能进入网站的。
或者说,在没进入一个功能的时候记录一下客户的操作,这样与其在一个个的action分别记录,直接在拦截器去记录会更加的方便
或者是记录log
这里来简单讲解下拦截器的使用。
拦截器是在struts.xml中进行配置
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
- "http://struts.apache.org/dtds/struts-2.1.7.dtd">
- <struts>
- <!-- 请求参数的编码方式-->
- <constant name="struts.i18n.encoding" value="UTF-8"/>
- <!-- 指定被struts2处理的请求后缀类型。多个用逗号隔开-->
- <constant name="struts.action.extension" value="action"/>
- <!-- 当struts.xml改动后,是否重新加载。默认值为false(生产环境下使用),开发阶段最好打开 -->
- <constant name="struts.configuration.xml.reload" value="true"/>
- <!-- 是否使用struts的开发模式。开发模式会有更多的调试信息。默认值为false(生产环境下使用),开发阶段最好打开 -->
- <constant name="struts.devMode" value="false"/>
- <!-- 设置浏览器是否缓存静态内容。默认值为true(生产环境下使用),开发阶段最好关闭 -->
- <constant name="struts.serve.static.browserCache" value="false" />
- <!-- 配置返回结果去哪里寻找 -->
- <constant name="struts.convention.result.path" value="/" />
- <!-- 配置类去哪里寻找 -->
- <constant name="struts.convention.package.locators" value="action" />
- <!-- 动态方法调用打开,可以通过感叹号调用action里面的方法 -->
- <constant name="struts.enable.DynamicMethodInvocation" value="true" />
- <!-- <package name="Menu" namespace="/Menu" extends="struts-default">
- <action name="mainpage" class="com.almostman.action.MainPageAction">
- <result name="success">/success.jsp</result>
- <result name="input">/input.jsp</result>
- </action>
- </package> -->
- <!-- 这里的{1}表示*的值 -->
- <package name="Menu" namespace="/Menu" extends="struts-default">
- <interceptors>
- <!-- 定义拦截器
- name:拦截器名称
- class:拦截器类路径
- -->
- <interceptor name="timer" class="com.almostman.action.TimerInterceptor"></interceptor>
- <interceptor name="logger" class="com.almostman.action.LoggerInterceptor"></interceptor>
- <!-- 定义拦截器栈 -->
- <interceptor-stack name="mystack">
- <!-- 在有自定义拦截器的时候一定要将默认拦截器放在最上面,不然会出现参数无法传递 -->
- <interceptor-ref name="defaultStack" />
- <interceptor-ref name="timer"/>
- <interceptor-ref name="logger"/>
- </interceptor-stack>
- </interceptors>
- <!-- 定义默认的拦截器 每个Action都会自动引用
- 如果Action中引用了其它的拦截器 默认的拦截器将无效 -->
- <default-interceptor-ref name="mystack"></default-interceptor-ref>
- <!-- 全局results配置 -->
- <action name="*" class="com.almostman.action.{1}Action" >
- <result name="success">/{1}.jsp</result>
- <result name="input">/input.jsp</result>
- </action>
- </package>
- <package name="Test" namespace="/Test" extends="struts-default">
- <action name="HelloPage" class="com.almostman.action.HelloPageAction" >
- <result name="success" type="velocity" >/HelloPage.vm</result>
- <result name="input">/error.jsp</result>
- </action>
- </package>
- </struts>
这里自定义了两个拦截器的类,一个用来记录 用户操作的时间,一个用来记录log。
- package com.almostman.action;
- import com.opensymphony.xwork2.ActionInvocation;
- import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
- public class TimerInterceptor extends AbstractInterceptor
- {
- @Override
- public String intercept(ActionInvocation actionInvocation) throws Exception
- {
- // TODO Auto-generated method stub
- System.out.println("在正确的时间登录");
- return actionInvocation.invoke();
- }
- }
- package com.almostman.action;
- import com.opensymphony.xwork2.ActionInvocation;
- import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
- public class LoggerInterceptor extends AbstractInterceptor
- {
- public LoggerInterceptor()
- {
- // TODO Auto-generated constructor stub
- }
- @Override
- public String intercept(ActionInvocation actionInvocation) throws Exception
- {
- // TODO Auto-generated method stub
- System.out.println("在这里输出log");
- return actionInvocation.invoke();
- }
- }
执行后一定要invoke出去,这样才能走到action,然后就是按照action的正常路程去返回给jsp页面。
,以上运行结果是:
能发下,拦截器生效,并且正常的走到了jsp的页面。
源码地址:http://pan.baidu.com/s/1cpdJdG
java strtus2 拦截器(Interceptors)的更多相关文章
- 【Struts2】自定义拦截器interceptors
下面给一张图片表示Struts2拦截器的处理流程. 通过这个流程图,我们可以看出一个完整的请求大概的过程为: 请求 -->filter 控制器 --> 拦截器 1/ 拦截器 2--> ...
- 三种实现日志过滤器的方式 (过滤器 (Filter)、拦截器(Interceptors)和切面(Aspect))
1.建立RequestWrapper类 import com.g2.order.server.utils.HttpHelper; import java.io.BufferedReader; impo ...
- java web 拦截器、过滤器理解
1.首先要明确什么是拦截器.什么是过滤器 1.1 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加 ...
- java中拦截器与过滤器
注:文摘自网络,仅供自己参考 1.首先要明确什么是拦截器.什么是过滤器 1.1 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之 ...
- java之拦截器Interceptor
1,拦截器的概念 java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了 ...
- 拦截器interceptors
拦截器interceptors 1. 基于HandlerMapping,对请求实施拦截,根据业务需求,基于不同的HandlerMapping定义多个拦截器 2. HandlerInterceptor接 ...
- java端拦截器判断客户的的请求是否是ajax请求
java端拦截器判断客户的的请求是否是ajax请求 发表于 2014-08-22 23:38:08 普通请求与ajax请求的报文头不一样,通过如下 String requestType = reque ...
- [Java]利用拦截器和自定义注解做登录以及权限验证
1.自定义注解 需要验证登录的注解 package com.etaofinance.wap.common; import java.lang.annotation.Documented; import ...
- Java使用拦截器的两种方式
拦截器是个好东西,之前用到过,现在记录一下,供以后参考使用! 其一,使用org.aspectj.lang.annotation.Aspect 先上代码: package com.test.interc ...
随机推荐
- DOS命令:列出某目录下的所有文本文件名并重定向到某文件
命令如下: >dir /b *.txt>output.txt dir无需说,/b 是只要文件名,>是重定向. 2013年11月7日13:36:57
- sass 和 css 互转网址
sass to css:https://www.sassmeister.com/ css to sass:http://css2sass.herokuapp.com/
- 算法笔记_133:最大连续乘积子数组(Java)
目录 1 问题描述 2 解决方案 2.1 蛮力法 2.2 动态规划法 1 问题描述 给定一个浮点数组,任意取出数组中的若干个连续的数相乘,请找出其中乘积最大的子数组. 2 解决方案 2.1 蛮力法 ...
- JQuery 之CSS操作
JQuery 之CSS操作 设置 <p> 元素的颜色: 将所有段落的颜色设为红色 $(".btn1").click(function(){ $("p" ...
- 解构赋值 和 symbol
1.数组解构 let [a,b,c,d] = ['aa','bb',77,88] 嵌套数组解构 let [a,b,[c,d],e] = ['aa','bb',[33,44],55] 空缺变量 let ...
- 查看正在执行的sql语句
;WITH t AS( SELECT [Spid] = session_Id, ecid, [Database] = DB_NAME(sp.dbid), [User] = nt_username, [ ...
- Spring 基于xml配置方式的AOP
我们具体用代码来说明: 1.ArithmeticCalculator.java package com.proc; public interface ArithmeticCalculator { in ...
- 如何自动生成Makefile
作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的M ...
- 本地ubuntu下pycharm 如何利用远程开发环境时显示图片
最近使用pycharm远程开发tensorflow,每次在想显示图像时,苦于不知怎么操作,就通过保存后再看结果,使得调试很不方便.今天打算解决这个问题,收获也是很多啊. 我首先参考了这两篇博客: ht ...
- Java Socket网络编程Client端详解
此类实现客户端套接字(也可以就叫“套接字”).套接字是两台机器之间的通信端点. Socket client = new Socket(ip,port);//创建一个流套接字并将其连接到指定 IP 地址 ...