-
Struts2是一个基于MVC设计模式的WEB层框架。
-
在src下创建(提供)名称叫做struts.xml的配置文件(对action进行管理配置)
-
核心控制器:FilterDispatcher
FilterDispatcher是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的实现类。
配置前端控制器(核心过滤器)
- Struts2执行流程:当用户访问某一个Action的时候,先经过核心过滤器,在核心过滤器中执行一组拦截器(这组拦截器实现部分功能),执行目标Action,根据Action的返回值,进行页面跳转。
- Struts2的常见配置
1.Struts2配置文件加载顺序
2.pacage相关配置
package标签称为包,这个包与Java中的包的概念不一致。包为了更好管理action的配置。
package标签的属性
name:包的名称,只有在一个项目中不重名即可。
extends:继承哪个包,通常值为struts-default。
namespace :名称空间,与标签中的name属性共同决定访问路径。
名称空间有三种写法:
带名称的名称空间:namespace=”/aaa”
跟名称空间 :namespance=”/”
默认名称空间:namespace=””
abstract:抽象的,用于其他包的继承。值为"true"时可以被其他包继承
3.action相关配置
action标签配置Action类。
action标签的属性
name :与namespace共同决定访问路径
class :Action类的全路径
method :执行Action中的哪个方法的方法名,默认值execute
converter :用于设置类型转换器
4.常量的配置
在Struts2的框架中,提供了非常多的常量:(在default.properties)
在Struts2中修改一些常量的值:
修改常量的值,可以有三个位置进行修正
struts.xml中进行修改(###############)
struts.properties中进行修改
web.xml中进行修改
- action类的写法
1.Action类是POJO的类
POJO类:简单的java的类,没有继承任何类,也没有实现任何的接口。
2.Action类实现一个Action的接口
3.Action类继承ActionSupport类
- Action的访问
1.通过method设置
2.通过通配符的方式配置(######)
(这里的method={1}里的1指的是第一个*的值,假如action类方法名为product_update,则这里的xing就是update,就相当于method=“update”;)
- ACTION的常用配置:
- - Struts2的servlet的API的访问:
方式一:通过ActionContext
编写JSP
编写Action
注意:这种方式只能获得代表request、session、application的数据的Map集合,不能操作这些对象的本身的方法。
方式二:使用Servlet的API的原生方式(############)
编写jsp
编写Action:
注意:这种方式可以操作域对象的数据,同时也可以获得对象的方法。
方式三:接口注入(略)
-
Struts2的结果页面配置:
全局结果页面:全局结果页面指的是,在包中配置一次,其他的在这个包中的所有的action只要返回了这个值,都可以跳转到这个页面。
针对这个包下的所有的action的配置都有效。
-
局部结果页面
局部结果页面:局部结果页面指的是,只能在当前的action中的配置有效。
针对当前的action有效。
-
result标签的配置
result标签用于配置页面的跳转。在result标签上有两个属性:
name属性 :逻辑视图的名称。默认值:success
type属性 :页面跳转的类型。dispatcher :默认值,请求转发。(####Action转发JSP) redirect :重定向。(####Action重定向JSP) chain :转发。(Action转发Action) redirectAction :重定向。(Action重定向Action) stream :Struts2中提供文件下载的功能。
-
Struts2数据封装
属性驱动:提供属性set方法的方式(不常用)
属性驱动:页面中提供表达式方式
模型驱动:采用模型驱动方式(最常用)
模型驱动需要实现ModelDriven<>接口。execute方法内需要重写getModel方法,提供对象实例。
模型驱动方式最常用的方式:
缺点:只能同时向一个对象中封装数据。
使用第二种可以向多个对象中同时封装数据: -
Struts2的拦截器Interceptor
1.Filter:过滤器,过滤从客户端向服务器发送的请求。
2.Interceptor:拦截器,拦截是客户端对Action的访问。更细粒度化的拦截。(拦截Action中的具体的方法)。Struts2框架核心的功能都是依赖拦截器实现。 -
Struts2的执行流程
客户端向服务器发送一个Action的请求,执行核心过滤器(doFilter)方法。在这个方法中,调用executeAction()方法,在这个方法内部调用dispatcher.serviceAction();在这个方法内部创建一个Action代理,最终执行的是Action代理中的execute(),在代理中执行的execute方法中调用ActionInvocation的invoke方法。在这个方法内部递归执行一组拦截器(完成部分功能),如果没有下一个拦截器,就会执行目标Action,根据Action的返回的结果进行页面跳转。 -
编写拦截器类(编写一个类实现Interceptor接口或者继承AbstractInterceptor类。)
-
对拦截器进行配置
-
定义拦截器栈的方式配置拦截器