Struts2框架里拦截器是主要做什么功能的

Struts2框架里拦截器是主要做什么功能的

本文目录

  • Struts2框架里拦截器是主要做什么功能
  • Struts2框架里拦截器是主要做什么功能
  • struts2为什么用拦截器有什么好处起什么作用
  • 比较区别一下:struts2拦截器 过滤器和spring拦截器
  • struts2拦截器的作用是什么
  • Struts2 拦截器
  • struts2拦截器作用
  • Struts2的拦截器怎么配
  • struts2拦截器工作原理

Struts2框架里拦截器是主要做什么功能的


Strrurs拦截器是可插拔式的拦截器:如果我们要使用某个拦截器,只需要在配置文件中应用该拦截器即可。
Struts拦截器由struts-default.xml,struts.xml等配置文件中进行管理
Struts2中已经默认启动了大量通用功能的拦截器(这些拦截器以name-class对的形式配置在struts-default.xml文件中),只要我们配置Action的package继承了struts-default包,这些拦截器就会起作用。
拦截器几乎完成了Sturts2框架70%的工作。
Sturts2几个常用内建拦截器的介绍
1)conversation:这是一个处理类型转换错误的拦截器,它负责将类型转换错误从ActionContext中取出,并转换成Action的FieldError错误。
2)Exception:这个拦截器负责处理异常,它将异常映射成结果。
3)fileUpload:这个拦截器主要用于文件上传,它负责解析表单中文件域的内容。
4)i18n:这是支持国际化的拦截器,它负责把所选的语言区域放入用户Session中。
5)params:这是最基本的一个拦截器,它负责解析HTTP请求中的参数,并将参数值设置成Action对应的属性值。
6)scope:这是范围转换拦截器,它可以将Action状态信息保存到HttpSession范围,或者保存到ServletContext范围内。
7)token:这个拦截器主要用于阻止重复提交,它检查传到Action中的token,从而防止多次提交。
只要我们定义的包继承了struts-default包,就可以直接使用这些拦截器。

Struts2框架里拦截器是主要做什么功能


Strrurs拦截器是可插拔式的拦截器:如果我们要使用某个拦截器,只需要在配置文件中应用该拦截器即可。
Struts拦截器由struts-default.xml,struts.xml等配置文件中进行管理。
Struts2中已经默认启动了大量通用功能的拦截器(这些拦截器以name-class对的形式配置在struts-default.xml文件中),只要我们配置Action的package继承了struts-default包,这些拦截器就会起作用。
拦截器几乎完成了Sturts2框架70%的工作。
Sturts2几个常用内建拦截器的介绍:
1)conversation:这是一个处理类型转换错误的拦截器,它负责将类型转换错误从ActionContext中取出,并转换成Action的FieldError错误。
2)Exception:这个拦截器负责处理异常,它将异常映射成结果。
3)fileUpload:这个拦截器主要用于文件上传,它负责解析表单中文件域的内容。
4)i18n:这是支持国际化的拦截器,它负责把所选的语言、区域放入用户Session中。
5)params:这是最基本的一个拦截器,它负责解析HTTP请求中的参数,并将参数值设置成Action对应的属性值。
6)scope:这是范围转换拦截器,它可以将Action状态信息保存到HttpSession范围,或者保存到ServletContext范围内。
7)token:这个拦截器主要用于阻止重复提交,它检查传到Action中的token,从而防止多次提交。
只要我们定义的包继承了struts-default包,就可以直接使用这些拦截器。

struts2为什么用拦截器有什么好处起什么作用


1、拦截器是struts2的核心,拦截器可以让你在Action和result被执行之前或之后进行一些处理。
2、好处:拦截器也可以让你将通用的代码模块化并作为可重用的类。Struts2中的很多特性都是由拦截器来完成的。
3、作用:可以构成拦截器栈,完成特定功能。比如日志记录、登录判断、权限检查等作用。

比较区别一下:struts2拦截器 过滤器和spring拦截器


原理都是一样的,责任链
设计模式

区别就是用的地方不一样,拦截的位置不一样。
过滤器是
web标准
,一般配置在web.xml中,在遇到符合规则的请求时处理。
struts2
拦截器
,是struts提供的,配置在struts.xml中,拦截struts的Action请求并处理,如果你的请求不符合struts要求未被struts处理,则拦截器同样不会触发。
spring跟struts一样,只是由
spring框架
提供,未被spring管理的对象方法是不会被拦截的。

struts2拦截器的作用是什么


拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略
拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。
拦截器栈(Interceptor Stack)类似于过滤器链。拦截器栈就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器栈的拦截器就会按其之前定义的顺序被调用。
也可以叫做拦截器链(Interceptor Stack),拦截器栈一词更明确的表名了连接器链的实现方式。
Struts2的拦截器和Filter类似。在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器,在执行完所有引用的拦截器的intercept方法后,会执行Action的execute方法。
当请求到达Struts 2的ServletDispatcher时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器

Struts2 拦截器


首先,你应该大概了解,struts2拦截器采用的设计模式是责任链模式,每个拦截器都要继承interceptor接口或者abstractInterceptor父类,并重写intercept方法,方法会传递一个参数invocation,是链路执行的句柄(可能比较抽象,如果你有些java基础查下责任链模式应该就明白invocation的大概用处了,如果没基础就记住这个参数吧)
invocation.getInvocationContext(),“Context“是上下文的意思就是这个“链执行的环境“,里面会保存有执行过程需要用到的一些信息(或者叫变量),而对于web应用来说request和session都会保存在上下文环境中,通过getSession()方法可以得到session对应的map对象(struts2吧session和request都封装成了map对象).

拿到的sessionMap就是这个session封装后的map对象,java中map是以key-value(键值对)的形式保存数据的工具类。

通过sessionMap的get方法,传入对应的key(键)来取得对应的value(值),你这程序中sessionMap.get(“loginuser“)就是取出key为loginuser的对应值

get方法是取值,只有键,没没值了!,set方法才是赋值,才会有键又有值
比如:sessionMap.set(“myname“,“张三“);

loginuser,不是随便起的,能够取得“值”的前提是你设置了这个值(其他程序,比如登录页面对应的处理程序使用set方法设置了loginuser的值,你这里get才能取到,你这个拦截器一定是用来检查用户是否已经登录的,如果loginuser对应的值被取出后是空值,说明没有登录,如果非空,说明session中保存着登录用户的信息

看你提问的内容,我还是奉劝你从基础开始吧,ssh的确是java著名的框架,但是不适合初学者,找点j2se的视频看看

struts2拦截器作用


拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。
拦截是AOP的一种实现策略。
拦截器是动态拦截Action调用的对象。
它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,
也可以在一个action执行前阻止其执行。
同时也是提供了一种可以提取action中可重用的部分的方式。
拦截器栈(Interceptor Stack)类似于过滤器链。
拦截器栈就是将拦截器按一定的顺序联结成一条链。
在访问被拦截的方法或字段时,拦截器栈的拦截器就会按其之前定义的顺序被调用。
也可以叫做拦截器链(Interceptor Stack),拦截器栈一词更明确的表名了连接器链的实现方式。
Struts2的拦截器和Filter类似。
在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器,
在执行完所有引用的拦截器的intercept方法后,
会执行Action的execute方法。
当请求到达Struts 2的ServletDispatcher时,Struts 2会查找配置文件,
并根据其配置实例化相对的拦截器对象,然后串成一个列表(list)
最后一个一个地调用列表中的拦截器。

Struts2的拦截器怎么配


1、自定义拦截器:
《interceptors》
《!-- 先定义拦截器 --》
《interceptor name=“myInterceptor“ class=“com.zzz.struts2.interceptor.MyInterceptor“》
《!-- 指定系统初始化给拦截器的参数 --》
《param name=“hello“》hello《/param》
《/interceptor》
《!-- 加到自己设置的拦截器栈里边去 --》
《interceptor-stack name=“myStack“》
《interceptor-ref name=“myInterceptor“》
《/interceptor-ref》
《interceptor-ref name=“defaultStack“》《/interceptor-ref》
《/interceptor-stack》
《/interceptors》
2、struts2中有一个系统默认的拦截器栈是 defaultStack,如果你手动引用自己的拦截器,系统默认的拦截器栈将不起作用;这样必需手动引入系统的拦截器栈
《interceptor-ref name=“defaultStack“》
《/interceptor-ref》
3、如果想改变系统默认的拦截器栈,可以这样配置:
《default-interceptor-ref name=“myStack“》
《/default-interceptor-ref》
其中myStack是自己定义的拦截器栈名字;
注:如果拦截器栈中有多个拦截器,在执行action之前的顺序跟配置拦截器的顺序一致,而在action之后执行的顺序是相反的;
4、上边的拦截器都要是针对整个action的,如果针对某个方法进行拦截可以去继承这个类:MethodFilterInterceptor。它需要要配置对哪个方法进行拦截。方法过滤拦截器最好不要配置到自己设置默认的拦截器栈里边,自己手动配置。
《interceptor-ref name=“myInterceptor3“》
《param name=“includeMethods“》execute《/param》
《param name=“excludeMethods“》execute《/param》
《/interceptor-ref》
《interceptor-ref name=“defaultStack“》《/interceptor-ref》
其中includeMethods ,excludeMethods是固定写法: includeMethods 包含拦截那些方法,多个方法需要用”,”隔开; excludeMehtods是排除拦截的那些方法.

struts2拦截器工作原理


Struts2拦截器原理:当请求到达Struts2时,Struts2查找配置文件,并根据配置实例化相对的拦截器对象,串成一个列表,最后一个一个调用列表中的拦截器。Struts2拦截器栈将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,按其之前定义顺序被调用。

Struts2拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。

扩展资料:

拦截器的自定义:

1、自定义一个实现Interceptor接口(或者继承自AbstractInterceptor)的类。

2、在struts.xml中注册Interceptor接口中定义的拦截器。

3、在需要使用的Action中引用struts.xml定义的拦截器,为了方便也可将拦截器定义为默认的拦截器,这样在不加特殊声明的情况下所有的Action都被这个拦截器拦截。

4、开发者自定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提取action中可重用部分的方式。

参考资料来源:百度百科-拦截器

参考资料来源:百度百科-Struts 2


免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部