一、过滤器
过滤器是Struts2控制器的最前端控制器,请求对象首先被过滤器过滤。Struts2的过滤器有三层次,参考工作原理图中与过滤器有关的部分,不再赘述。
二、拦截器
1.简单了解什么是拦截器?
- 拦截器是Struts2中第二个层次的控制器,他会在Action执行前后运行一些Action类需要的通用功能;
- 拦截器是使用AOP思想设计;
- API中提供了大量的拦截器类;当然,我们也可以自定义拦截功能,也就是自定义拦截器。
2.如何使用拦截器?
①定义拦截器
使用拦截器前,必须先在struts.xml文件中定义拦截器,使用标记<interceptor>定义。
②使用拦截器
定义拦截器之后就可以再Action中引用,通过标记<interceptor_ref>指定要使用的拦截器。
/index.jsp /success.jsp
3.拦截器栈的定义与使用
往往我们需要对多个拦截器一起使用,那么就可以定义一个拦截器栈,将需要使用的拦截器捆绑在一起,方便使用,也就是说拦截器栈是多个拦截器的集合。
先看下面的代码:
/index.jsp /success.jsp
上述定义了4个拦截器,还定义了一个拦截器栈,拦截器栈中引用了两个拦截器,如果下次需要同时访问这两个拦截器,就可以直接访问拦截器栈即可以了。
4.默认拦截器或拦截器栈的定义与使用
在一个项目的某个包中,我们可以定义默认的拦截器或拦截器栈,那么,该包下的Action在<interceptor-ref>没有指定情况下,都会被默认拦截器或拦截器栈拦截。但是,如果包中的某个Action指定了<interceptor-ref>,则默认的拦截器或拦截器栈失效,必须再次指定方可使用。
/index.jsp /success.jsp
/index.jsp /success.jsp
5.struts-default.xml中定义的拦截器栈
struts.xml中的Action都继承了struts-default.xml中的struts-default包,因此都默认继承struts-default包的默认拦截器栈。
三、Action
- Action是Struts2的第三层的控制器,需要自行开发;
- Action是Struts2应用中使用数量最多的控制器;
- Action实现的功能与Servlet非常类似,然而,Action不是Servlet,仅仅是一个普通的java类;
- Action的主要作用就是:封装请求参数,调用业务逻辑,执行业务操作,根据执行结果返回结果视图,实现页面导航,被称为"业务控制器"。