一、struts2简介
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。也就是说,struts2可以实现代码的MVC分离,而传统的servlet在面对庞大的工程时解耦不是很好。在团队协作里面,struts2的配置文件是联系不同模块之间的关键,方便解耦。
不过,Struts2曾曝出2个高危安全漏洞,一个是使用缩写的导航参数前缀时的远程代码执行漏洞,另一个是使用缩写的重定向参数前缀时的开放式重定向漏洞。这些漏洞可使黑客取得网站服务器的“最高权限”,从而使企业服务器变成黑客手中的“肉鸡”。所以有观点认为SpringMVC将逐步吞并struts2,不过本人没有学习过SpringMVC,所以无法对以上观点做出评判。
二、struts2拦截器介绍
拦截器是面向切面编程的实例,它将多个模块的共同代码模块提取出来,灵活地插入各个模块之中,减少了系统的重复代码,确保业务对象的整洁。
面向切面编程(AOP)举例:一个工程当中多个类需要在执行之后打印日志信息,“打印日志信息”这一功能并不是某个特定模块独有的功能,如果在每个模块都加入这部分代码,就会导致代码重用性降低,所以就有了面向切面编程编程,将打印日志信息这部分代码提取出来,灵活的嵌入各个模块。
struts2拦截器体现了AOP思想,它可以在指定action的代码执行前后加入拦截器类的代码,不需要的时候,只需要在配置文件中删除拦截器,同时可以保留拦截器的代码。
三、拦截器的使用例子
此处使用struts2拦截器实现登录验证功能来介绍拦截器的使用。
功能描述:网站的某部分内容在用户没登录之前是不能访问的,最简单的做法就是在每个展现内容的action中加入几句判断用户是否登录的代码,但如果涉及的action比较多,开发者就不得不复制粘贴同样的代码到不同的类中,而修改的时候也需要到各个类修改,比较麻烦。
struts2拦截器将代码实现和AOP的配置分开来,配置信息集中在struts2.xml中,比较方便修改。此外代码只有一份,可以做到一次修改,造福全局。
流程如下(登录之后才能访问的网页放在WEB-INF下):
登录->action1->验证成功->跳转到页面1->点击某个按钮->调用action2->使用登录后才能用的页面2.
通常action1不用拦截器,因为本身是登录验证部分,而action2则需要,所以需要在“”使用登录后才能用的页面2”前添加拦截器,变为:
登录->action1->验证成功->跳转到页面1->点击某个按钮->调用action2->拦截器验证当前是否登录->使用登录后才能用的页面2.
代码:
1、配置web.xml,使用struts2
2、jsp页面
3、编写对应的action
4、编写拦截器
5、配置struts2.xml