基本过程
1.用户请求数据封装进request对象
2.所有请求都要经过核心过滤器。
3.filter调用动作映射类,确认是否要调用某个action类
4.返回确认信息
5.创建动作类的代理类
6.manager读取配置文件,确定执行方法
7.返回确认信息
8.执行动作类之前执行一系列拦截器
9.执行动作方法
10.根据返回类型结果视图
11.执行一系列拦截器的后处理
12.封装响应到response对象
-------------
核心接口和类
Action Mapper 根据请求的URI查找是否存在对应Action调用
ACtion Mapping 保存调用Action的映射信息,如namespace、name等
Action Proxy 再Xwork和真正的Action之间充当代理
Action Invocation 表示Action的执行状态,保存拦截器、Action实例。
Interceptor 再请求处理之前或者之后执行的Struts2组件
----------
什么是拦截器:
Struts2大多核心功能通过拦截器实现,每个拦截器完成某项功能
拦截器方法再Action执行之前或者执行之后执行
拦截器栈
·从结构上看:拦截器相当于多个拦截器的组合
·在功能上看:拦截器栈也是拦截器
拦截器与过滤器原理很相似
拦截器工作原理:拦截器的执行过程是一个递归的过程。
三阶段执行周期:
1、做一些Action执行前的预处理
2、将控制交给后续拦截器活返回结果字符串
3、做一些Action执行后的处理
------------
简单应用:继承AbstractInterceptor类,重写intercept()方法(括号中 ActionInvocation Invocation)
String result = invocation.invoke(); //invoke代表放行
//定义单个拦截器
<interceptors>
<interceptor name="""
class=""com.pb.interceptor.MyTimerInterceptor">
</interceptor>
</interceptors>
<interceptor-ref name=""></interceptor -ref> //引用拦截器
params拦截器
负责将请求参数设置为Action属性
ServletConfig拦截器
将源文件于Servlet API的各种对象注入到Action
fileUpload拦截器
对文件上传提供支持
exception拦截器
捕获异常,并且将异常映射到用户自定义的错误页面
validation拦截器
调用验证框架进行数据验证
workflow拦截器
调用Action类的validate(),执行数据验证
ServletRequestAware接口
获取Action的一种方式
文件上传:
Commons-FileUpload组件
apache开放源代码组织的一个子项目,此组建用来处理HTTp文件上传的子项目
特点:使用简单,可以方便嵌入到JSP文件中,编写少量代码即可完成文件的上传功能
能完全控制上传的内容
能对上传文件的大小、类型进行控制。
设置表单提交属性<from enctype="multipart/form-data" method="post">