在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)的更多相关文章

  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. 使用BeyondCompare比较文件夹下的文件时,相同的文件内容,但显示为不相同

    主要原因是: 两个文件行尾标题不一致而导致的,一个是PC,一个是Unix 解决办法: 随便比较文件夹中的两个文件,点击规则,去掉比较行尾(pc/mac/unix)选项,点击确认,回到文件夹比较界面,刷 ...

  2. Android开发者指南(9) —— ProGuard

    转: 前言 本章内容为开发者指南(Dev Guide)/Developing/Tools/ProGuard,本章内容为"混淆器",版本为Android3.0 r1,翻译来自:&qu ...

  3. C#基础视频教程3.2 常见控件类型和使用方法

    这一部分我们介绍如何使用第三方的控件,我们前面一节介绍了使用微软提供的官方控件,比较中规中矩,而且也不用担心稳定性.但是很多时候我们还是会希望用第三方的控件让自己的软件更美观,更独特. 就单纯的按钮, ...

  4. Edit Control响应全选(Ctrl+A)

    MFC中的Edit控件用于输入数据,当输入的数据为大段数字的时候,全选功能就显得非常重要了,可偏偏在MFC中Edit控件就不 支持全选.Ctrl+A不行,双击也不行. Ctrl+C和Ctrl+V都是默 ...

  5. Drag & drop a button widget

    In the following example, we will demonstrate how to drag & drop a button widget. #!/usr/bin/pyt ...

  6. Python 创建包含列表的元组

    “可变”的tuple前面我们看到了tuple一旦创建就不能修改.现在,我们来看一个“可变”的tuple:>>> t = ('a', 'b', ['A', 'B'])注意到 t 有 3 ...

  7. 高阶函数简述 js

    1.简述 高阶函数似乎是一种先进编程的的技术.然而,并不是. 高阶函数其实就是将函数作为参数或者返回值的函数.其中作为参数的函数一般是回调函数. 2.例子 (1)最简单的例子 大家都熟悉数组的sort ...

  8. 深入RecyclerView-为什么要使用ItemDecoration

    Part 1:不要用view做分割线 首先,什么是ItemDecoration?来看看官网是如何解释的. ItemDecoration允许从adapter的数据集合中为特定的item视图添加特性的绘制 ...

  9. 在where子句中经常使用的运算符

    比较运算符 >   <   <=   >=   =    <> 大于.小于.大于(小于)等于.不等于 BETWEEN  ...AND... 显示在某一区间的值 IN ...

  10. Eclipse保存验证JS缓慢

    EclipseSave保存js文件的时候验证JS的时间很长( 使用extjs).Eclipse – Validation – JavaScript Validator 的 Manual和Build都没 ...