Struts2学习第二天
一,Action访问ServletAPI的三种方式:
方式1:通过让Action类去实现感知接口.
此时项目依赖:servlet-api.jar.
- ServletRequestAware:感知HttpServletRequest对象;
ServletResponseAware:感知HttpServletResponse对象;
ServletSessionAware:感知HttpSession对象;
问题,和ServletAPI藕合严重;
一般的,我们不要,留给框架自己使用的.方式2.使用ServletActionContext类,该类提供很多静态方法可以返回Servelet API对象.
- 可以这样来理解,ServletActionContext就是Servlet API的工具类.
使用的非常频繁,因为简单易用.
static HttpServletRequest getRequest() :返回HttpServletRequest对象
static HttpServletResponse getResponse() :返回HttpServletResponse对象
static ServletContext getServletContext() :返回ServletContext对象.方式3.使用ActionContext类,本身是Struts2对Servlet API的封装.
- 什么是ActionContext: Action的环境对象,每一次请求都是一个新的Action对象,一个ActionContext对象封装了这一次请求的相关数据.
ActionContext使用了ThreadLocal模式,所以说是线程安全的.
创建ActionContext对象:
ActionContext ctx = ActionContext.getContext();ActionContext的常用方法:
此时把作用域对象全部使用Map来表示.
- 什么是ActionContext: Action的环境对象,每一次请求都是一个新的Action对象,一个ActionContext对象封装了这一次请求的相关数据.
- 可以这样来理解,ServletActionContext就是Servlet API的工具类.
二,Action获取请求参数三种方式:
第一种:Action本身作为Model对象,通过setter方法封装(属性注入)
第二种:创建独立Model对象,页面通过ognl表达式封装(属性注入)(jsp中格式:Model对象.属性名)jsp:
第三种:使用ModelDriven接口,对请求数据进行封装(模型驱动)
把参数封装到List集合中去:
三,Struts2的请求的执行步骤:
①.客户端发送请求;
②.该请求经过一系列的过滤器(Filter):其中可选过滤器ActionContextCleanUp,帮助Struts2和其他框架集成。例如:SiteMesh, Plugin。
③.接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper,来决定该请求是否需要调用某个Action。
④.若ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy。
⑤.ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类。
⑥.ActionProxy创建一个ActionInvocation的实例。
⑦.ActionInvocation实例调用Action的前后,涉及到相关拦截器(Intercepter)的调用。
⑧.一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果是一个JSP或其他页面(也可以是其他的Action链)。
JSP页面展现可使用Struts2框架中的标签(该过程会涉及ActionMapper)。
在上述过程中所有的对象(Action、Interceptors、Results等)都由xwork容器中的ObjectFactory创建。
四,常用拦截器与默认拦截器:
五,自定义拦截器:
创建一个拦截器类(继承与AbstractInterceptor)覆盖其抽象方法:intercpt方法
配置拦截器:
1,注册拦截器,中可设置参数,创建拦截器栈.
2,在Action中引用拦截器全局引用.
六,Struts2之国际化:
国际化配置属性:
命名格式:基本_语言_国家
使用struts-tags标签库通过key来取properties里面的value值
- 有时需要用到占位符来解决硬编码的问题:
在ActionSpport中有getText方法来获取properties文件中的value值