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

合集下载

struts2

struts2

1.strust2框架来历简介:WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的J2EE Web框架。

(同时也是一个成熟的基于Web的MVC框架)MVC:Model View Controller,model是模型,view是视图,controller是控制器,是一种框架模式。

随着WebWork框架的发展,衍生出了strust2框架,因此strust2框架是WebWork的升级,而不是一个全新的框架,因此稳点性、性能等方面都有很好的保证,而且也同时吸收了struts1框架和WebWork俩者的优点.所以strust2框架也是一个基于Web的MVC框架注意:strust2框架并不是struts1框架的延续或者升级,俩者有着很大的不同2.web项目中的三层架构(和MVC是俩个完全不同的架构)1.表示层(Struts2框架就是工作在这个地方)2.业务逻辑层(service层,处理业务逻辑,比如判断用户名是否存在、密码是否正确、权限是否拥有、账号是否被冻结、账号是否异常、用户积分是否到达操作要求等等,多为一些执行某一个操作条件的判断)3.数据访问层(dao层,专门处理和数据库进行交换的事情,jdbc/hibernate就在这里使用)在项目中,这些不同的分层的表现形式,其实就是在我们自己建的不同的package 中写上各自分层中所使用的java类.比如在项目中我们建了三个package,三个package中java类的作用分别为表示层的代码、业务逻辑层代码、数据访问层代码。

注意:可以理解为,MVC架构是这里说描述的三层架构的一部分,即:三层架构中的表示层可以使用mvc架构的框架来实现,例如使用struts2框架.3.使用struts2框架的好处(为什么要使用struts2框架)减少编程人员代码的编写,使代码更加简洁明了,缩短开发时间,增加开发效率.4.struts2框架引入到web项目中首先使用Eclipse/MyEclipse中建一个web项目.1.把struts2相关jar包引入到项目中。

struts的过滤器

struts的过滤器

配置web.xml,配置Struts2的过滤器配置web.xml,配置Struts2的过滤器,例如:<include…/>是<struts>标签的一个子标签,它可以把其他配置文件导入进来,从而实现Struts2的模块化。

它的“file”属性定义了要导入的文件的名称——该文件要和“struts.xml”一样有着相同的结构。

在大型项目开发中,可以将项目分解为多个小模块,每个模块独立开发和管理。

我们可以为每个模块提供一个配置文件,然后对其进行配置,然后在struts.xml中使用include元素包<include file="struts-chat.xml"/><include file="struts-hangman.xml"/><include file="struts-continuations.xml"/><include file="struts-tags.xml"/><include file="struts-validation.xml"/>含这些配置文件。

例如:当我们导入文件时,一定要注意导入的顺序。

因为从文件被导入的那个点开始,该文件中的信息才能被访问到,也就是说,如果要使用另外一个文件中所定义的标签,那么该文件就必须要在被引用之前就配置好。

Bean的两种配置方法1)框架的IoC容器创建bean的实例,然后将该实例注入到框架的内部对象中。

第一种做法可以称为对象注入,它通常要用到bean的type属性,告诉容器这个对象实现了哪个接口,如果自己创建了ObjectFactory,则可以在struts-default.xml中作如下配置:。

Struts2知识点总结

Struts2知识点总结

Struts2基础知识Struts2概述1.Struts2框架应用javaee三层结构中的web层框架。

2.Struts2框架在struts1和webwork基础之上发展的全新框架。

3.Struts2所解决的问题:在以往实现一个功能时,都需要写很多的servlet,从而造成后期维护上的不方便。

图解:4.现在比较稳定的Struts2版本struts-2.3.24-all.zip5.web层常见框架1.struts2.springMVCStruts2框架入门1.导入jar包1.在lib里面有jar包,但不能全部导入,因为里面含有一些spring包,是不能使用的,导入会导致程序不能运行。

2.到app目录里面复制案例的jar包是最好的方法。

2.创建action3.配置action类的访问路径1.创建struts2核心配置文件,该核心配置文件位置和名称是固定的,位置必须在src下面,名称为struts.xml 。

2.引入dtd约束,可以在案例文件中找到,复制在struts.xml文件中即可。

3.action的配置*注意访问路径:http://域名/端口号/项目名/action名.action注意:.action可以省略,但建议不要省略,为了兼容一些老版本的浏览器。

4.配置Struts2的过滤器,可以在案例中的web.xml文件中找到,复制粘贴即可。

Struts2执行过程图解:Struts2配置1.是一种常量标签2.修改Struts2的默认常量值1.常用方式在struts.xml中进行配置。

2.其它两种方式1.在src下面创建struts.properties文件并修改。

2.在web.xml文件中进行修改。

3.Struts2最常用的常量struts.il8n.encoding=UTF-8,解决表单在通过post方式提交中文时,中文乱码的问题。

Struts2笔记(一)可使用全局页面。

1、配置方法:在package标签下配置2、注意:该标签只能在一个package标签中使用,如果有多个标签,需要重新定义。

struts2-2(拦截器)

struts2-2(拦截器)

17
18
• validation拦截器
– 调用验证框架进行数据验证
• workflow拦截器
– 调用Action类的validate(),执行编码验证
11
Struts 2默认拦截器栈
• struts-default.xml中定义一个defaultStack拦截器栈,并将其指 定为默认拦截器 • 只要在定义包的过程中继承struts-default包,那么defaultStac k将是默认的拦截器
• 8、Action执行完毕,ActionInvocation负责根据结果码字符 串在struts.xml的配置中找到对应的返回结果 • 9、拦截器被再次执行
• 10、过滤器被再次执行
4
Struts 2核心接口和类
• ActionMapper
– 根据请求的URI查找是否存在对应Action调用
• ActionMapping
10
Struts 2自带拦截器
• Params拦截器
– 负责将请求参数设置为Action属性
• servletConfig拦截器
– 将源于Servlet API的各种对象注入到Action
• fileUpload拦截器
– 对文件上传提供支持
• exception拦截器
– 捕获异常,并且将异常映射到用户自定义的错误页面
12
配置拦截器
<package name="packName" extends="struts-default" namespace="/manage"> <interceptors> <!-- 定义拦截器 --> <interceptor name="interceptorName" class="interceptorClass" /> <!-- 定义拦截器栈 --> <interceptor-stack name="interceptorStackName"> <!--指定引用的拦截器--> <interceptor-ref name="interceptorName|interceptorStackName" /> </interceptor-stack> </interceptors> <!--定义默认的拦截器引用--> <default-interceptor-ref name="interceptorName|interceptorStackName" /> <action name="actionName" class="actionClass"> <!—为Action指定拦截器引用--> <interceptor-ref name="interceptorName|interceptorStackName" /> <!--省略其他配置--> </action> </package>

Struts2的拦截器配置

Struts2的拦截器配置

拦截器实例
public class SimpleInterceptor extends AbstractInterceptor { private String name; public void setName(String name) { = name; } public String intercept(ActionInvocation invocation) throws Exception { LoginAction action = (LoginAction)invocation.getAction(); ......... String result = invocation.invoke(); ...... return result; } }
Struts 专题篇
第九章 Struts 2 的拦截器 主讲:陈宝峰
内容描述
● ● ● ● ● ●
拦截器概述 拦截器配置 使用拦截器的配置 使用默认拦截器的配置 拦截器实例 方法过滤
拦截器概述
● ●
拦截器是 Struts 2 中的重要组成部分 大量的内建拦截器完成了大部分的 Struts2 框架的工作
结束
使用默认拦截器的配置
<package name=” 包名” > <interceptors> <interceptor name=” 拦截器名 1” class=”......” /> ...... <interceptor-stack name=” 拦截器栈名 1”> <interceptor-ref name=” 拦截器名 1” /> ...... </interceptor-stack> </interceptors> <default-interceptor-ref name=” 拦截器名或拦截器栈名” /> <action ...... /> </package>

struts2拦截器拦截指定方法

struts2拦截器拦截指定方法

import java.util.Map;import com.opensymphony.xwork2.Action;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;/**拦截指定方法*/public class MyFilterInterceptor extends MethodFilterInterceptor{private static final long serialVersionUID = 1L;private String name;public void setName(String name){ = name;}@Overrideprotected String doIntercept(ActionInvocation invocation) throws Exception { //取得请求相关的ActionContext实例ActionContext ctx = invocation.getInvocationContext();Map session = ctx.getSession();//取出名为user的Session属性String user = (String)session.get("user");//如果没有登陆,或者登陆所用的用户名不是scott,都返回重新登陆if (user != null && user.equals("scott") ){return invocation.invoke();}//没有登陆,将服务器提示设置成一个HttpServletRequest属性ctx.put("tip" , "您还没有登陆,请输入scott,tiger登陆系统");//直接返回login的逻辑视图return Action.LOGIN;}}2.struts.xml配置<package name="site" extends="struts-default" namespace="/site"><interceptors><!-- 定义了一个名为authority的拦截器--><interceptor name="authority" class="cn.zgcyx.filter.MyFilterInterceptor"/> <!--上面自定义的拦截器类--><interceptor-stack name="myDefault"><interceptor-ref name="authority"> <!-- 引用拦截器--><param name="includeMethods">getALL,getPart,listUser</param> <!-- 设置需要拦截的方法,多个以逗号隔开--></interceptor-ref><interceptor-ref name="defaultStack"></interceptor-ref></interceptor-stack></interceptors><default-interceptor-ref name="myDefault"></default-interceptor-ref><!-- 全局--><global-results><!-- 当返回login视图名时,转入/login.jsp页面--><result name="login">/login.jsp</result></global-results><action name="site" class="siteServiceAction"><!--省略跳转--></action></package>。

Struts2知识点详解

Struts 2的基本流程Struts 2框架由3个部分组成:核心控制器FilterDispatcher、业务控制器和用户实现的业务逻辑组件。

在这3个部分里,Struts 2框架提供了核心控制器FilterDispatcher,而用户需要实现业务控制器和业务逻辑组件。

2.核心控制器:FilterDispatcherFilterDispatcher是Struts 2框架的核心控制器,该控制器作为一个Filter运行在Web应用中,它负责拦截所有的用户请求,当用户请求到达时,该Filter会过滤用户请求。

如果用户请求以action结尾,该请求将被转入Struts 2框架处理。

Struts 2框架获得了*.action请求后,将根据*.action请求的前面部分决定调用哪个业务逻辑组件,例如,对于login.action请求,Struts 2调用名为login的Action来处理该请求。

Struts 2应用中的Action都被定义在struts.xml文件中,在该文件中定义Action时,定义了该Action的name属性和class属性,其中name属性决定了该Action处理哪个用户请求,而class属性决定了该Action的实现类。

Struts 2用于处理用户请求的Action实例,并不是用户实现的业务控制器,而是Action代理——因为用户实现的业务控制器并没有与Servlet API耦合,显然无法处理用户请求。

而Struts 2框架提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到Action中,并回调Action 的execute方法来处理用户请求。

显然,上面的处理过程是典型的AOP(面向切面编程)处理方式。

图3.19显示了这种处理模型。

图3.19 Struts 2的拦截器和Action从图3.19中可以看出,用户实现的Action类仅仅是Struts 2的Action代理的代理目标。

11_Struts 2 拦截器

Struts 2 拦截器
主要内容
拦截器概述 自定义拦截器 系统拦截器解读 拦截器原理
拦截器概述
拦截器(Intercepter)就是当一个Action被执行之前与执 行之后的一段代码。 许多框架(framework)的核心功能就是通过拦截器实现的 。比如Struts 2 中的数据校验,类型转换,文件上传, 国际化,数据重复提交等。 拦截器是可插拔的,需要时插入,不需要时拔出。 可以为每个Action配置拦截器,也可以根据业务需求编写 自己的拦截器。
拦截器思想
面向方面的编程(AOP) 把通用的功能从系统中提出来,单独处理,实现了软件的 重用。
课堂作业
使用拦截器权限验证 提示: invocation.getInvocationConte截器
实现com.opensymphony.xwork2.interceptor.Interceptor接口 映射拦截器 使用拦截器栈管理拦截器 使用默认拦截器
自定义拦截器
继承 com.opensymphony.xwork2.interceptor.AbstractInterc eptor抽象类实现拦截器
拦截器的参数
可以在定义拦截器时设置参数,也可以在拦截器栈中设置 参数。
系统拦截器与栈
在struts-default.xml 文件中列出了Struts 2中定义的 所有拦截器,与拦截器栈。 timer拦截器
拦截器与过滤器的区别
拦截器是基于JAVA反射机制的,而过滤器不是 过滤器依赖于servlet容器,而拦截器不依赖 拦截器只能对Action起作用,而过滤器则可以对几乎所有 请求 拦截器可以访问Action上下文,值栈中的对象,而过滤器 不能。

java开发框架面试题整理

Java开发框架面试Struts2热点面试题?1. 简述Struts2 的工作流程:①. 请求发送给StrutsPrepareAndExecuteFilter②. StrutsPrepareAndExecuteFilter 判定该请求是否是一个Struts2 请求③. 若该请求是一个Struts2 请求,则StrutsPrepareAndExecuteFilter 把请求的处理交给ActionProxy④. ActionProxy 创建一个ActionInvocation 的实例,并进行初始化⑤. ActionInvocation 实例在调用Action 的过程前后,涉及到相关拦截器(Intercepter)的调用。

⑥. Action 执行完毕,ActionInvocation 负责根据struts.xml 中的配置找到对应的返回结果。

调用结果的execute 方法,渲染结果。

⑦. 执行各个拦截器invocation.invoke() 之后的代码⑧. 把结果发送到客户端2. Struts2 拦截器和过滤器的区别:①、过滤器依赖于Servlet容器,而拦截器不依赖于Servlet容器。

②、Struts2 拦截器只能对Action 请求起作用,而过滤器则可以对几乎所有请求起作用。

③、拦截器可以访问Action 上下文(ActionContext)、值栈里的对象(ValueStack),而过滤器不能.④、在Action 的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。

3. 为什么要使用Struts2 & Struts2 的优点:①. 基于MVC 架构,框架结构清晰。

②. 使用OGNL: OGNL 可以快捷的访问值栈中的数据、调用值栈中对象的方法③. 拦截器: Struts2 的拦截器是一个Action 级别的AOP, Struts2 中的许多特性都是通过拦截器来实现的, 例如异常处理,文件上传,验证等。

java 过滤器、监听器 拦截器 原理个人总结

过滤器创建一个Filter 只需两个步骤:(1)创建Filter 处理类:(2)在web.xml 文件中配置Filter 。

创建Filter 必须实现javax.servlet.Filter 接口,在该接口中定义了三个方法。

• void init(FilterConfig config): 用于完成Filter 的初始化。

• void destroy(): 用于Filter 销毁前,完成某些资源的回收。

• void doFilter(ServletRequest request, ServletResponse response,FilterChain chain): 实现过滤功能,该方法就是对每个请求及响应增加的额外处理。

过滤器Filter也具有生命周期:init()->doFilter()->destroy(),由部署文件中的filter元素驱动。

在servlet2.4中,过滤器同样可以用于请求分派器,但须在web.xml中声明,<dispatcher>INCLUDE或FORWARD或REQUEST或ERROR</dispatcher>该元素位于filter-mapping中。

一、理解Struts2拦截器1. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现.2. 拦截器栈(Interceptor Stack)。

Struts2拦截器栈就是将拦截器按一定的顺序联结成一条链。

在访问被拦截的方法或字段时,Struts2拦截器链中的拦截器就会按其之前定义的顺序被调用。

二、实现Struts2拦截器原理Struts2拦截器的实现原理相对简单,当请求struts2的action时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表,最后一个一个地调用列表中的拦截器三、定义Struts2拦截器。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

拦截器是在面向切面编程的就是在你的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里的配置了<filter><filter-name>myFilter</filter-name><filter-class>包名+实现Filter接口的类</filter-class></filter><filter-mapping><filter-name>myFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>在<url-pattern>里面设置了/*之后,也就是说在进行每一个操作时都会自动去执行自定义的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 stubSystem.out.println("destroy");}@Overridepublic void init() {//服务器启动时自动加载一次System.out.println("init");System.out.println("hello");}@Overridepublic 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 {@Overridepublic 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 {//过滤方法的拦截器@Overrideprotected 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文件中定义该拦截器,定义拦截器的配置片段如下:<!--定义拦截器--><interceptors><!--定义带有参数的拦截器--><interceptor name="myinterceptor"><param name="hello">world</param></interceptor><interceptor name="myinterceptor2"></interceptor><interceptor name="myinterceptor3"></interceptor><!—-也可以定义拦截器栈--><interceptor-stack name="myStack"><!--<interceptor-refname="myinterceptor"></interceptor-ref><interceptor-refname="myinterceptor2"></interceptor-ref><!—-要将struts默认的拦截器加入进去--><interceptor-refname="defaultStack"></interceptor-ref>--></interceptor-stack></interceptors><!--也可以自定义应用默认拦截器栈,这样如果 action里面没有引入别的拦截器栈,则都会应用自定义的默认拦截器栈--><!--<default-interceptor-refname="myStack"></default-interceptor-ref>-->3、应用拦截器<action name="register" method="abc"><result name="success">/success.jsp</result><result name="input">/register2.jsp</result><!--<interceptor-ref name="myinterceptor"><param name="hello">welcome</param></interceptor-ref>--><!--如果在action里手工的加入拦截器,就不会加载默认的拦截器,所以需要手动导入默认拦截器栈--><interceptor-ref name="defaultStack"></interceptor-ref><!--也可以直接导入自定义的拦截器栈,如下所示--><!--<interceptor-ref name="myStack"></interceptor-ref>--><!--拦截方法abc,execute多个方法中间用逗号隔开,排除用excludeMethods--><!--<interceptor-ref name="myinterceptor3"><param name="includeMethods">abc,execute</param></interceptor-ref>--></action>。

相关文档
最新文档