Struts2学习第二天

一,Action访问ServletAPI的三种方式:

方式1:通过让Action类去实现感知接口.
此时项目依赖:servlet-api.jar.

  • ServletRequestAware:感知HttpServletRequest对象;
    ServletResponseAware:感知HttpServletResponse对象;
    ServletSessionAware:感知HttpSession对象;
    问题,和ServletAPI藕合严重;
    一般的,我们不要,留给框架自己使用的.
    Struts2学习第二天方式2.使用ServletActionContext类,该类提供很多静态方法可以返回Servelet API对象.
    • 可以这样来理解,ServletActionContext就是Servlet API的工具类.
      使用的非常频繁,因为简单易用.
      static HttpServletRequest getRequest() :返回HttpServletRequest对象
      static HttpServletResponse getResponse() :返回HttpServletResponse对象
      static ServletContext getServletContext() :返回ServletContext对象.
      Struts2学习第二天方式3.使用ActionContext类,本身是Struts2对Servlet API的封装.
      • 什么是ActionContext: Action的环境对象,每一次请求都是一个新的Action对象,一个ActionContext对象封装了这一次请求的相关数据.
        ActionContext使用了ThreadLocal模式,所以说是线程安全的.
        创建ActionContext对象:
        ActionContext ctx = ActionContext.getContext();ActionContext的常用方法:
        此时把作用域对象全部使用Map来表示.
        Struts2学习第二天

二,Action获取请求参数三种方式:

第一种:Action本身作为Model对象,通过setter方法封装(属性注入)
Struts2学习第二天
第二种:创建独立Model对象,页面通过ognl表达式封装(属性注入)(jsp中格式:Model对象.属性名)
Struts2学习第二天jsp:
Struts2学习第二天
第三种:使用ModelDriven接口,对请求数据进行封装(模型驱动)
Struts2学习第二天
把参数封装到List集合中去:
Struts2学习第二天
Struts2学习第二天


三,Struts2的请求的执行步骤:

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创建。


四,常用拦截器与默认拦截器:

Struts2学习第二天
Struts2学习第二天


五,自定义拦截器:

创建一个拦截器类(继承与AbstractInterceptor)覆盖其抽象方法:intercpt方法
配置拦截器:
1,注册拦截器,中可设置参数,创建拦截器栈.
2,在Action中引用拦截器全局引用.
Struts2学习第二天


六,Struts2之国际化:

国际化配置属性:
Struts2学习第二天
命名格式:基本_语言_国家
Struts2学习第二天

使用struts-tags标签库通过key来取properties里面的valueStruts2学习第二天

  • 有时需要用到占位符来解决硬编码的问题:
    Struts2学习第二天
    ActionSpport中有getText方法来获取properties文件中的value值
    Struts2学习第二天