在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. 【Python】http.client库的用法

    代码: # http.client测试,该库较底层,不常用 import http.client conn=None try: conn=http.client.HTTPSConnection(&qu ...

  2. Rust 格式输出

    格式输出由一系列定义在 std::fmt 中的宏提供. 包含: format! : 输出格式化的字符串. print!  : 输出格式化的字符串到控制台(终端)println!: 添加一个换行,输出格 ...

  3. eclipse因为js validator无法通过导致build workspace失败

    eclipse编译工程时时会validator js的errors和warnings,对于一些小型的项目,这当然没任何问题. 但是对于那些拥有大量js文件的web工程,js warnings通常会达到 ...

  4. 查找文本工具grep

    许多时候需要从一大堆的命令输出或文本内容中找出一两行关键的内容,例如从系统用户文件中查找某个用户.如果不借助工具,这将是一项非常繁琐的工作,这时可以使用grep工具对内容进行筛选. grep(glob ...

  5. Cocos2d-x 3.2 Lua演示样例 AssetsManagerTest(资源管理器)

    Cocos2d-x 3.2 Lua演示样例 AssetsManagerTest(资源管理器) 本篇博客介绍Cocos2d-x 为我们提供的一个类--AssetsManager在Lua中的使用样例,效果 ...

  6. SpringMVC中使用-sqljdbc4.jar

    昨天将现在写的Web项目中的数据库由MySQL换成SQLServer,昨天想把MySQL重新安装一下,但是由于不明原因,导致无法安装. 卸载MySQL.删除安装文件.删除注册表.重启电脑.但是安装的时 ...

  7. jQuery中.html(“xxx”)和.append("xxx")的区别和不同

    append是追加,html是完全替换比如<p id="1"><p>123</p></p>$("#1").htm ...

  8. 移动通信安全——GSM安全体系

    一.GSM网络概述 1.安全机制 认证用户,防止未授权接入 对空中接口传输加密,防止无线信道上用户信息被窃听 SIM卡独立于终端,管理用户信息 在空中接口上以临时身份标识用户,防止用户被跟踪 但是GS ...

  9. GPU 编程入门到精通(四)之 GPU 程序优化

    博主因为工作其中的须要,開始学习 GPU 上面的编程,主要涉及到的是基于 GPU 的深度学习方面的知识,鉴于之前没有接触过 GPU 编程.因此在这里特地学习一下 GPU 上面的编程.有志同道合的小伙伴 ...

  10. js 获取中文的拼音首字母

    es6 + 模块化封装 "use strict"; module.exports = { //参数,中文字符串 //返回值:拼音首字母串数组 makePy (str) { if ( ...