Struts2中的拦截器与过滤器学习

时间:2019-05-12 02:51:43下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《Struts2中的拦截器与过滤器学习》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《Struts2中的拦截器与过滤器学习》。

第一篇:Struts2中的拦截器与过滤器学习

拦截器是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法,比如动态代理就是拦截器的简单实现,过滤器是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者去除掉一些非法字符。

拦截器与过滤器的区别:

1、拦截器是基于java的反射机制的,而过滤器是基于函数回调

2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器

3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用

4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能

5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次

过滤器

也就是写一个自己的类,让这个类实现于Filter这个接口,这个接口里有三个方法。

init(),doFilter(),destroy();主要是对doFilter()进行操作,你可以在这个方法里写你想进行的操作.写完这些之后,就是在web.xml里的配置了

myFilter 包名+实现Filter接口的类 myFilter /*

里面设置了/*之后,也就是说在进行每一个操作时都会自动去执行自定义的filter里的doFilter方法里的代码.这样就可以进行相应的过滤操作了。拦截器

1、定义拦截器

a.方法一:实现Interceptor接口

public class MyInterceptor implements Interceptor { private String hello;//定义带参数的拦截器 public String getHello(){ return hello;} public void setHello(String hello){ this.hello = hello;} public void destroy(){ // TODO Auto-generated method stub System.out.println(“destroy”);} @Override public void init(){ //服务器启动时自动加载一次 System.out.println(“init”);System.out.println(“hello”);} @Override public String intercept(ActionInvocation arg0)throws Exception { System.out.println(“inercept”);String result=arg0.invoke();System.out.println(“finish”);return result;} } b.方法二:继承AbstractInterceptor类

public class MyInterceptor2 extends AbstractInterceptor { @Override public String intercept(ActionInvocation arg0)throws Exception { System.out.println(“intercept2”);String result=arg0.invoke();System.out.println(“finish2”);return result;} } c.方法三:继承MethodFilterInterceptor类,定义过滤方法的拦截器 public class MyInterceptor3 extends MethodFilterInterceptor { //过滤方法的拦截器 @Override protected String doIntercept(ActionInvocation arg0)throws Exception { arg0.addPreResultListener(new MyListener());//将监听器注册到里面

System.out.println(“myinterceptor3”);String result=arg0.invoke();System.out.println(“after myinterceptor3 ”);return result;} }

2、配置拦截器

一旦实现了上面的拦截器,就可以在所有需要实现控制的Action中复用上面的拦截器。为了使用该拦截器,首先在struts.xml文件中定义该拦截器,定义拦截器的配置片段如下:

world -->

3、应用拦截器

/success.jsp /register2.jsp

第二篇:Struts2核心拦截器---学习笔记

Struts2的核心——拦截器

在struts2中,拦截器(Interceptor)是其核心的组件,当我们访问一个action时,我们可以通过拦截器的配置,做一些需要的操作。

我们可以写我们自己的拦截器,但是要实现或继承struts2给我们提供的接口或类。

①.我们实现Interceptor接口,该接口是struts2提供的拦截器接口,位于com.opensymphony.xwork2.interceptor包下,其提供了类似与filter的一些方法,我们必须实现它的方法:destroy()、init()、intercept(ActionInvocation)。

public class MyInterceptor implements Interceptor {

public void destroy(){

System.out.println(“destroy”);} public void init(){ } public String intercept(ActionInvocation invocation)throws System.out.println(“init”);Exception {

System.out.println(“intercept”);

String resultString= invocation.invoke();System.out.println(“finish”);return resultString;}

②.我们可以继承AbstractInterceptor类,该类是一个抽象类,它位于com.opensymphony.xwork2.interceptor包下,它实现了Interceptor接口,并完成了对destroy()方法和init()方法的实现,但保留了抽象方法interceptor(),以供自定义的拦截器来重写其方法,完成特定的需求。

public class MyInterceptor1 extends AbstractInterceptor {

} @Override

public String intercept(ActionInvocation invocation)throws

System.out.println(“intercept1”);

String result=invocation.invoke();

System.out.println(“finish1”);Exception { return result;}

③.上面两个是对action进行的拦截,粒度比较粗,当然struts2也给我们提供了对action中方法的拦截。这时,我们自己写的类就要继承struts

2给我们提供的方法过滤类,该

于MethodFilterInterceptor com.opensymphony.xwork2.interceptor包下,但该类已经完成了对interceptor()方法的简单实现,而提供了一个doIntercept()方法。

public class MyInterceptor2 extends MethodFilterInterceptor { @Override

protected String doIntercept(ActionInvocation invocation)throws Exception {

System.out.println(“methodFilterInterceptor2”);String result=invocation.invoke();System.out.println(“finish2”);

return result;} }

写好了我们自己的拦截器类,还需要在struts.xml文件进行配置来告诉struts2框架,我们的拦截器要拦截的action、方法。

首先,我们要在package包下增加一个新的元素标签 ,在该标签下,我们就可以定义我们自己写的拦截器,如:

class=“com.test.interceptor.MyInterceptor”>

定义了一个name是myInterceptor的拦截器(即实现了Interceptor接口的那个拦截器),类似的,我们定义了上面我们已写的3个拦截器。

name=“myInterceptor”

class=“com.test.interceptor.MyInterceptor”>

请注意下面代码,我们定义了(拦截器栈),在struts2中还有拦截器栈,一个拦截器栈中可以包含多个拦截器,当我们要在某一个action上进行多个拦截时,我们可以将其放入一个拦截器栈中,这样在action中配置的时候,只需配置拦截器栈就可以了。

name=“myInterceptor”>

name=“myInterceptor1”>

defaultStack这个拦截器栈是struts2,提供的一个默认拦截器栈,其中实现了一些常用功能,如:struts2的检验框架,当我们在声明package时候会有extends属性,其值为struts-default,而defaultStack就定义在struts-default包类,进而就被我们的package所继承。

name=“defaultStack”>

在拦截器的配置中,我们可以为package配置一个默认的拦截器或拦截器栈,如果我们不指定,其值就为父包继承下来的defaultStack。

name=“myStack”>

/result.jsp

/login2.jsp /login2.jsp

/output.jsp

/success.jsp

/register4.jsp

/success.jsp /register2.jsp 我们在action中,对我们写的拦截器进行配置,这里要注意,我们在配置自己写的拦截器后,默认的拦截器,就不起作用了,如果还需要struts2默认的拦截器提供的功能,我们就要手动配置下了。另外,在拦截器中有

标签,可以对拦截器类中定义的属性赋值,这里是告诉拦截器,只拦截abc()方法。

abc

第三篇:struts2拦截器--将用户操作日志存入数据库

struts2拦截器--将用户操作日志存入数据库

1.建表,如下所示:

2.新建OperationLogModel.java,其具有上述属性。3.自动生成PO 4.在struts.xml中配置拦截器:

5.如下例子中的用户登录和修改密码,要在相应xml文件中加入,即:

index

changePasswordPre

6.在项目中新建文件夹log,在其下新建类LogInterceptor.java,如下: package com.bfw.crms.log;import java.util.Map;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.apache.commons.lang.StringUtils;import org.apache.log4j.Logger;import org.apache.struts2.ServletActionContext;import com.bfw.crms.action.BulletinAction;import com.bfw.crms.action.SystemAction;import com.bfw.crms.model.EmployeeModel;import com.bfw.crms.model.OperationLogModel;import com.bfw.crms.po.OperationLog;import com.bfw.crms.util.BeanUtil;import com.bfw.crms.util.DateTimeUtil;import com.ninetowns.framework.dao.ObjectDao;import com.opensymphony.xwork2.Action;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;@SuppressWarnings(“serial”)

public class LogInterceptor extends AbstractInterceptor{

private String logName;

private String logContent;

protected Logger log = Logger.getLogger(getClass());

protected HttpSession getSession()

{

return getRequest().getSession();

}

protected HttpServletRequest getRequest()

{

return ServletActionContext.getRequest();

}

public void init(){

}

private ObjectDao objectDao = null;

public ObjectDao getObjectDao()

{

return objectDao;

}

public void setObjectDao(ObjectDao objectDao)

{

this.objectDao = objectDao;

}

@Override

public String intercept(ActionInvocation ai)throws Exception

{

Object action= ai.getAction();

String method= ai.getProxy().getMethod();

try{

if(StringUtils.isBlank(method))method = “method”;

EmployeeModel sysUser(EmployeeModel)this.getSession().getAttribute(“employee”);

String userName = “";

if(sysUser!=null)userName = sysUser.getName();

=

String currentTime = DateTimeUtil.getDateTime();

String logContentHead = ”用户“+userName+currentTime;

ai.invoke();//执行被拦截action

if(action instanceof BulletinAction){

if(method.equals(”save“)){

logName = ”保存部门“;

logContent = logContentHead

+”保存部门:“+ai.getStack().findValue(”sysOrg.orgName“);

log.info(logContent);

addSysLog(logName,logContent);

}

if(method.equals(”delete“)){

logName = ”删除部门“;

logContent = logContentHead +”“+((String[])(ai.getStack().findValue(”flag_id“))).length+”条部门信息“;

log.info(logContent);

addSysLog(logName,logContent);

}

}

if(actioninstanceof SystemAction){

if(method.equals(”login“)){

logName = ”登录系统“;

logContent = logContentHead;

log.info(logContent);

addSysLog(logName,logContent);

}

if(method.equals(”changePassword“)){

logName = ”修改密码“;

logContent = logContentHead +”删除1条单位信息";

log.info(logContent);

addSysLog(logName,logContent);

}

}

}catch(Exception e){

e.printStackTrace();

}

return Action.SUCCESS;

}

/**

* 插入系统日志 model2po()

* @param logName

* @param logContent

*/

删除

private void addSysLog(String logName,String logContent){

OperationLogModel operationModel = new OperationLogModel();

OperationLog operationPO = new OperationLog();

operationModel.setOperation(logContent);

BeanUtil.model2po(operationModel, operationPO);

this.getObjectDao().saveObject(operationPO);

}

} OK

第四篇:经典文章学习——“过滤器理论”

经典文章学习——“过滤器理论”

本公众号将会陆续推出郝胖老师一系列经典专栏(原文),希望大家能从中受益。本期推出交易的理想模型系列。“过滤器理论”(2012.10.18)1—————上周笔者提示了中期风险,并没有明确提出反弹何时终结,本周走势先抑后扬,关键看周五走势能否放量突破2164,一旦突破2164,短期可看2234点。至于股票可以选择江泉实业、星湖科技等这种底部扎实,向上突破有河宽的股票少量参与。

2—————接下来继续理想模型系列,本系列一发不可收拾,既是给大家讲解技术分析,也是对自己多年交易经验的总结。今天讲的是交易中的“过滤器”,这是关于选择入场时机的理论。《新市场奇才》最先提出“过滤器理论”,他认为任何技术分析方法都是根据价格来的,所有交易方法对价格的过滤相当于不同颜色的玻璃对价格的过滤。加里.斯密斯则在此基础上提出“知觉过滤器”是各种情绪指标和技术指标,然而他没有公布自己所钟爱的指标。今天我将重点谈谈我所知道的那些“过滤器”。3—————技术分析者并非一介武夫,成功的技术分析大师多为具有哲学底蕴的艺术家,他们只是恰巧以交易谋生而已。索罗斯自创反身性理论,能够洞悉人性的偏执,尽管他自称为失败的哲学家;江恩大师博学多才,试图写出价格走势的数学原理,尽管他后来误入神秘时空的怪圈。“量价时空”是技术分析的基本要素,很多过滤器也均以此展开。最常用的防范假突的过滤器就是时间过滤器和价格过滤器,“突破关键点位2到3个百分点”、“2到3天不回到关键点一下”则认确突破的有效性。当然今天要说的并非这些简单的小技巧,而是一些交易大师的过滤器系统。

4—————马丁.舒华兹被认为是当代的杰西.利佛莫尔,这个天才的操盘手在9年的失败交易生涯之后明白了交易的本质。在认识到自己短线交易的性格之后,他选择了以7个指标为组合的过滤器系统,其中“腾落线”也是史丹温斯坦常用的指标。当所有这些指标都健康时则入场交易,当其中一个与其它发生背离,则时刻警惕可能发生的不利情况,做好出场准备。你可能认为7个指标太多了,但据我了解还有用40个的。

5—————马丁的方法是由上而下,他更多是一个帽客,依靠手动计算每30分钟重新评估一次市场的短线趋势,他使用的指标大多是道琼斯工业平均指数、纽约证券交易所股价净变动、标普500等等宏观指数。与此不同,亚历山大·埃尔德的《以交易为生》(Trading for a living)则明确提出简单易行的“三层过滤网”交易系统,三重滤网的第一层是利用趋势跟踪指标来判断长期趋势。他最初设计的系统是用周线MACD柱来判断趋势,这个我不表态,因为我个人就是依靠“123”法则来判断趋势,Macd不是可靠的技术。三重滤网的第二层滤网——市场波浪,利用震荡指标来观察日线图。当周线趋势向上时,利用日线下跌来寻找买点;当周线趋势向下时,利用日线上涨来寻找放空点。三重滤网的第三层滤网——盘中突破,当周线趋势上升而日线震荡指标下降时,运用追踪型买进技术。当周线趋势下跌而日线振荡指标上升时运用追踪型卖出技术。说直白一点,他的思考来源于对周期与级别的思考,周线级别决定日线级别,日线级别决定30分钟级别。国内的朋友如果读过缠师的遗著,对此不会陌生,缠师的《市场哲学的数学原理》浓墨重彩地描写了如何通过级别来寻找安全买点。笔者在此提醒各位,没有一定的市场经验不要看,因为对市场的判断不是光靠技术就可以掌握的。

6—————笔者曾经根据史丹.温斯坦和威廉.欧尼尔共同钟爱的相对强度指标设计出“五级买卖点”理论,并根据它来就行交易。直到我以期货交易为主才慢慢放弃这些市场跟踪指标,因为期货要求更加主动和积极,根据价格走势直观判断即可。当然在文章的结尾我依然没有透露自己的过滤器,因为我深深知道,交易没有圣杯,它是不确定性的游戏。当你在心理上把它变为确定性,并且试图通过学习来避免发生错误的时候,你已经犯了一个最大的错误。切记法家集大成者韩非子所言“人主之患,莫与信人;信与人,则制与人。”在此希望各位寻找适合自己性格的过滤器。

第五篇:struts2配置文件中参数的传递

struts2配置文件中参数的传递

在Action中我们经常会从这个Action跳转到另一个Action中,如果只是简单的跳转那么很容易,只需在struts配置文件中添加一个result,如:/manager/managerInfo/account.jsp.result有一个type属性,这里的type默认是dispatcher,但这种情况下action之间是不能发送请求的,这时我们就要用到redirect、redirect-action、chain,当要请求一个action时,可设定type的值为以上三个中的一个(他们的区别请参见blog.sina.com.cn/s/blog_56b7aaa10100eqs4.html),如:/manager/managerInfo/account.action.如果想在请求的过程中添加参数可以像超链接传值一样在最后用“xx?xx=xx”的形式来传递参数.如:/manager/ managerInfo/account.action?参数名=参数值,如果这里的参数值不是一个固定值可以用“${参数值}”这种形式,需要注意的是这里的“参数值”在相应的Action中一定要提供get/set方法,否则将无法获得参数值,当然这里也同样可以取一个对象的某个属性值即:${对象名.属性名},假如我想取得一个帐户的帐号:/manager/managerInfo/account.action?account.accountNO=${account.accountNO}.如果想传递多个参数用“&”符号来连接吗?NO,因为用“&”会在XML语法检查中报错,所以将“&”用“&”来替换就行了!如:/manager/managerInfo/account.action?account.accountNO=${account.accountNO}&account.balance=${account.balance}.注:当使用type=“redirectAction”时,result中的.action(上面红色标注的地方)可要可不要,但是当你要传递参数里,而且参数中含有中文字符时一定不要加.action,否则你的参数值是无法传递的,这是自己后来才发现的,大家有兴趣的可以去试试...

下载Struts2中的拦截器与过滤器学习word格式文档
下载Struts2中的拦截器与过滤器学习.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    struts2根据struts2完全学习手册 自己总结

    一、struts2简介 1 struts2的配置文件: (1)struts.xml 配置示例: HelloWorld /example (2)struts.properties配置文件 # # $Id: struts.properties 722328 2008-......

    struts2核心工作流程与原理(推荐阅读)

    struts2核心工作流程与原理 收藏 这是Struts2官方站点提供的Struts 2 的整体结构。 一个请求在Struts2框架中的处理大概分为以下几个步骤: 1. 客户端提起一个(HttpServletR......

    Struts2国际化与乱码不同的方法处理

    Struts2国际化 开发工具:MyEclipse 首先当然是建项目啦~ 我来说明一下文件的用处:Messages_en.properties 是存放的是英文属性的 Messages_zh.properties 是存放的是中文属性......

    CAD高梯度磁过滤器使用报告(中粤CAD-219)5篇

    CAD高梯度磁过滤器使用报告 随着市场对轧制钢板的需求与日俱增,对其质量要求不断提高,进而对轧机用乳化液的要求也越来越高,对乳化液的铁粉含量的控制要求越来越精确,这就对净化......

    学习中的苦与乐

    学习中的苦与乐 同学们常说:“学生时代是人生最痛苦的阶段。”确实在理。清晨闻鸡起舞,迎着晨风操练,伴着晨曦诵读的是学生;晚上,更深夜静,挑灯苦战的也是学生。 伴随着一年年的升......

    《在QC中学习与成长》

    在QC中学习与成长 5月31日,当我二次站在中国航天科技集团第九研究院2010~2011年度QC成果发表会颁奖台上代表公司二项QC成果领取一等奖和二等奖时,之前大家完成QC报告的种种艰......

    学习中的成功与失败

    学习中的成功与失败 成功对于企业家来说财富;成功对于医生来说是救死扶伤;而对我来说成绩好就是成功。 刚升入这个陌生的学校时,我就面临了一场考试,由于基础知识不牢,我的成绩有......

    学习中的苦与乐

    学习中的苦与乐 1.众所周知,学习是一个磨练的过程,就必然是一个痛苦的过程,只有在痛苦中探索,在探索中前行,才能在前行中收获成功的喜悦。中学生的学习目标往小了说是为了扩充知......