zoukankan      html  css  js  c++  java
  • Struts2 学习笔记

    1)Strust2是以WebWork为核心,采用拦截器的机制对用户请求进行处理。

    2)Struts2框架结构:

    3)简单来看整个Struts2的处理过程可以简单的理解为

    •   用户的请求发送给对应的Action
    •   Action接收到请求,执行对应的函数,返回相应的字符串
    •   Action根据返回的字符串再Struts.xml中找到相应的跳转目录
    •   Action跳转到对应的显示视窗

    3)Strust2的控制器组件是Struts2整个框架的核心,由两部分组成:

    •     核心控制器SturtsPrepareAndExecuteFilter
    •     业务控制器Action

    4)核心控制器SturtsPrepareAndExecuteFilter实际上是一个Servlet过滤器,需再Web.xml中配置。
    5)Action是由用户定义的业务控制器,由三种实现方式:

    •     普通的POJO类,通常包含一个无参数的execute()方法,返回值为字符串类型
    •     继承ActionSupport类(含有一个execute()方法和Validate()方法)
    •     实现Action接口

    6)Struts2使Action不再与任何Servlet API耦合,该框架可以通过ActionContext类来访问Servlet API。

        ActionContext提供了读写Servlet API中

    •       HttpServletResquest
    •       HttpSession
    •       ServletContext

        中的数据的方法

      同时Struts框架还提供了能直接访问Servlet API的接口:

    •   ServletContextAware--->ServletContext
    •   ServletRequestAware---->ServletRequest
    •   ServletResponseAware--->ServletResponse

    7)Struts 2配置文件使用package来组织Action,Struts2配置文件中的包就是由多个Action,多个拦截器,过个拦截器的引用组成的集合。

      package含有name、extends、namespace、abstract三个属性

    •   关于继承(extends):定义包时通常应该继承struts-default包。
    •   关于抽象包(abstract=true):该包中不能包含Action定义。

      注意:struts.xml是从上往下解析的,所以父包应该再子包的前面定义,如果再同一个包中配置了两个name相同的Action,则后一个会覆盖前一个。

    •   关于命名空间(namespace):同一个命名空间不能由同名的Action,不同的命名空间可以由同名的Action,以解决同一个包下多个同名Action的问题。

         若没有指定命名空间(namespace="/"),则默认为默认的命名空间。

         配置命名空间后,Strust2会按如下的顺序搜索Action:

           指定的命名空间----->默认的命名空间-------->报错

    8)Struts方法的动态调度:

      使用动态方法调用的前提:

        struts.xml中配置<constant name="struts.enbale.DynamicMethodInvocation" value="true"/>

      actionName!methodName.action

    例如:

      <a href="product!edit.action?productID=1001"></a>

      表示调用productAction下的edit方法来处理请求,并传递一个参数,参数名为productID,值为1001

    9)通配符的使用

      假若声明如下action:

      <package name="product" extends="struts-default" namespace="/">

          <action name="*product" class="action.ProductAction" method="{1}">

            <result>/{1}.jsp</result>

          </action>

      </package>

      若用户的请求URL为delproduct.action,则匹配模式中的第1个*为del,因此调用的方法为该action下的del方法,返回的页面为del.jsp。

    10)根据result元素再struts.xml文件中的位置不同,可以将result分为

    •     局部result---->将元素作为<action>元素中的一员
    •     全局result---->将元素作为<global-results>元素中的一员

      如果一个Action包含了与全局result同名的局部result,则局部会覆盖全局。

      搜索顺序:指定Action局部——————>全局

    11)result中含有两个属性:name、type。name默认为success、type默认为dispacher。

      type常用的类型:

    •     dispatcher:用于整合JSP技术
    •     redirect:用于重定向到其他URL、与dispatcher的区别是转发和重定向的区别。redirect属于重定向。Action处理的结果会丢失。
    •     redirectAction:采用ActionMapperFactory提供的ActionMapper进行重定向,重定向到另一个Aciton

                    配置redirectAction类型需要actionName、namespace两个参数

    12)Struts依靠配置<exception-mapping>元素捕获异常:需指定两个属性:exception和result。

        例如:

      <action name="login" class="action.loginAction">
        <exception-mapping result="error" exception="java.lang.Exception"/>

        <result>/ok.jsp</result>
        <result name="error">/error.jsp</result>

      </action>

        则需要在login Action中throw 相关的Exception,则会跳转到error.jsp页面。

      异常映射也分全局和局部,分别是

        局部:<exception-mapping>元素作为<action>元素的子元素。

        全局:<exception-mapping>元素作为<global-exception-mapping>元素的子元素。

       同样,前者会覆盖同名的后者。

    作者:Rekent
    出处:http://www.cnblogs.com/rekent/
    本文版权归作者和博客园共有,欢迎转载、点赞,但未经作者同意必须保留此段申明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

  • 相关阅读:
    奇偶数排序
    买房子
    首字母大写
    学分绩点
    加减乘除
    最简真分数
    Hdu 1058 Humble Numbers
    Hdu 1032 The 3n + 1 problem
    Hdu 1040 As Easy As A+B
    Hdu 1025 Constructing Roads In JGShining's Kingdom
  • 原文地址:https://www.cnblogs.com/rekent/p/7009690.html
Copyright © 2011-2022 走看看