4、Struts2框架核心之拦截器&标签库
上接Struts2与页面间的数据交互(2)--OGNL表达式&ValueStack:https://blog.csdn.net/biggerchong/article/details/84573784
目录
4.1 什么是Struts2的拦截器?
Filter:
过滤器,过滤客户端向服务器发送的所有请求。
Interceptor:
拦截器,起到拦截客户端对Action的访问;Interceptor是更加细粒度的拦截Action中的具体方法。Interceptor是Struts2中的核心功能,Struts2就是依赖于Interceptor来实现其核心功能的。
Interceptor在Struts2中的执行流程:
客户端向服务器发送一个Action的请求,执行核心过滤器(doFilter方法);
在doFilter方法中调用executeAction()方法;
在executeAction()内部调用dispatcher.serviceAction()方法;
在dispatcher.serviceAction()内部创建一个Action代理,最终执行的是Action代理中的execute();
在execute()中调用ActionInvocation()的invoke()方法;
在invoke()中来执行一组拦截器(完成部分功能),再递归遍历其他拦截器;
当拦截器全部执行完毕,就会执行目标Action,根据Action的返回结果进行页面跳转。
以上整体示意图如下:
拦截器这里只有弄清了其真正原理才能得心应手来操作,这里先提供一个链接:https://blog.csdn.net/xwnxwn/article/details/7086567,之后等博主本人深入学习Struts2之后会附上详细解读Struts2框架的原理系列。
4.2 为什么使用Struts2的拦截器?
Struts2的拦截器是Struts2框架设计的核心所在,利用拦截器可以使我们更加方便的来控制访问权限,拦截器比过滤器更加的精确,能够允许我们直接过滤到指定的Action中的指定Method,使得权限管理更加合理高效且方便。
4.3 怎样使用Struts2的拦截器?
4.3.1 编写拦截器类
编写一个类实现Interceptor接口,或者继承AbstractInterceptor类,或者继承MethodFilterInterceptor类等;一般我们不使用Interceptor接口的方法,应为这种方法让我们必须实现Interceptor中的init等无关的方法。
拦截器myInterceptor:
拦截器myInteceptor2:
4.3.2 对拦截器进行配置
定义拦截器来配置
说明:当配置中有global-result时要放在interceptors之后,在action中添加拦截器时不要忘记struts2的默认拦截器defaultStack,一旦我们在action中使用自定义拦截器后struts2默认拦截器就失效了,需要手动配置一下。
定义拦截器栈来配置
拦截效果图:
4.4 Struts2的标签库
4.4.1 通用标签库(常用)
判断标签
<s:if>、<s:elseif>、<s:else>
<s:iterator>
其他常用的标签
- <s:property/>
- <s:debug/>
- <s:date /> ---在页面上进行日期格式化。
4.4.2 UI标签库(有争议)
传统表单标签:
UI表单标签:
从传统表单与UI表单的效果图对比可知,UI表单布局更加工整、用户体验也更佳,编写较为方便,但是业界对UI标签的评价不一,UI标签的最大优点是支持数据回显,这是因为UI标签能自动读取值栈中相应的数据回显,而传统表单则需要自己来手动回显。
如果您已经完成博主下的Struts2系列共4篇博客,恭喜您已经入门struts2框架了,接下来将会更新Struts2实战之J2EE网购整合,敬请期待!
----谢谢阅读! ----知飞翀