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

    ================Struts2的国际化================
    程序国际化:
      程序可以根据极其所在的国家、语言环境,自动显示当前国家、语言的内容
    国际化的本质是:查找、替换
    国际化的步骤:
      (1)为不同的国家、语言环境提供资源包;
      如果你的国际化语言资源包中有非西欧的字符,要使用native2ascli命令处理该文件;
      (2)在程序中输出的国际化的消息key;
    Struts2的国际化:
        (1).支持模块化加载;
        (2).Struts2支持自动加载国际化资源
      1.JSP页面的国际化:
        A.需要手动加载国际化消息:
        使用<s:i18n .../>;
        B.在页面使用<s:text .../>根据key来输出国际化消息:
        如果是表单标签,直接使用key来指定国际化消息的key;
      2.Action的国际化:
        A.自动加载国际化消息
        让国际化消息的baseName与Action的类名相同(Login_zh_CN.properties),而且放在同一个目录下
        B.在Action类中调用getText()(可传入参数,类似{1}替换(*)方法,必须为数组)方法来加载国际化消息;
      3.包范围的国际化:
        A.自动加载国际化消息
        让国际化消息的baseName与package(不是与包名相同),而且放在同该包的目录下面
        可以让该包下面的所有Action共享同一个国际化资源文件;
        B.在Action类中调用getText()方法来加载国际化消息;
      4.全局国际化资源文件:
        A.通过一个struts.custom.i18n.resources常量来加载国际化资源;
        B.全局国际化资源文件,即可被Action访问,也可以被JSP页面访问;

      /***************************************
      Action接口与ActionSupport实现类:
      ActionSupport实现 Action接口。
      而且增加了校验支持、国际化支持等功能;
      ***************************************/

    Struts2的异常处理:
      传统的web编程的异常模式:
      try
      {
      业务代码;
      }
      catch(XxxException xe)
      {
      Forward("/a.jsp");
      }
      ...

      对于Action的处理方法而言,处理结果可能出现如下情况:
        1.正常执行结束,会返回一个String类型的逻辑视图;
         对于String类型的逻辑试图,使用<result name="逻辑视图名">物理视图资源</result>
        2.遇到异常,返回一个异常对象:
         <exception-mapping exception="异常类" result="逻辑视图名"/>
      Struts2的异常配置的本质:
        为不同的异常类,“起一个”逻辑视图名;
      Struts设计的处理方法完全不需要处理任何异常,它可以声明抛出任意的异常;并显示异常提示;

    Java领域的MVC框架:
      - 主要实现控制器。(StrutsPrepareAndExecuteFiter + Action)
      - 提供大量标签库,可以简化View的开发。

    ==================OGNL表达式==================
        回顾JSP 2 EL - 做数据访问的工具,并不是编程语言,因此必然简单;
        EL提供了11个内置对象:
        pgeContext pageScope requestScope sessionScope applicationScope
        param paramValues header headerValues cookie initParam(获取Web应用的配置参数)

      OGNL
        既然要访问数据库,必然有个东西装数据:
          OGNL的装数据的东西叫"Stack Context(OGNL Context)"
          --可以理解它相当于一个Map
      1.它里面的每个对象,都应该有个名字,根据名字来访问:
          #对象名
        假如OGNL Context中有3个对象:foo、bar、test
          #bar.abc - 访问bar对象的getAbc()返回值;
          #test.xyz.abc.def - 访问test对象的getXyz().getAbc().getDef()
      2.OGNL Context中有个根(root)对象:
        如果我们要访问根(root)对象的属性,可以省略对象名
        假如OGNL Context中有3个对象:foo、bar、test,但bar是根对象
          abc.xyz.def - 访问bar.getAbc().getXyz().getDef()

      /******************context map******************

              |--application
              |--session
              |--value stack(root)
      context map--- |--action (the current action)
              |--request
              |--parameters
              |--attr (searches page, request, session, then application scopes)

      Stack Context(OGNL Context/Context Map/Action Context)

      ValueStack

      Stack Context中包含了ValueStack(根对象)

      ************************************************/
      3.OGNL可以直接创建List对象:{ele1,ele2,ele3,ele3 ....}
      4.OGNL可以直接创建Map对象:#{key1:value1,key2:value2,key3:value3...}
      5.OGNL还可以直接获取"子集合"
          person.cats.{?#this.age>2} - 获取person所养的猫中age大于2的所有猫;
          person.cats.{^#this.age>2} - 获取person所养的猫中age大于2的第一个猫;
          person.cats.{$#this.age>2} - 获取person所养的猫中age大于2的最后一个猫;
      6.OGNL还可以直接调用静态成员:
        - 需要将struts.ognl.allowStaticMethodAccess常量设置为true才可
          类名@静态Field
          类名@静态方法(参数值)

     OGNL标签库:

      【参见Struts2官方API】

      控制标签:
        if/elseif/else -模拟流程控制的分支
        iterator -模拟流程控制的迭代
        append/merge - 把两个或N个已有的集合合并成新的集合
        merge - 分割出集合
        sort - 对集合元素排序,需要指定一个Comparator
        subset - 截取子集合
      数据标签:
        set - 设置变量值:var指定变量名字,value指定变量值,scope指定范围
        bean - 创建一个Bean对象:var指定对象名(Stack Context中),name指定实现类
        debug - 帮助调试,可以让开发者观察ValueStack以及Stack Context中的数据
        i18n - 为指定页面加载国际化资源文件,name指定国际化资源包的baseName
        text - 输出国际化消息,也通过name指定国际化消息的key
        property - 输出表达式的值,通过value属性来指定表达式,
              如果没有指定value属性,将直接暑促ValueStack栈顶的元素
        action - 可以直接在页面上调用指定Action,
             可以直接把Action的处理结果包含到本页面中
          name和namespace确定调用哪个Action
          var:指定将被调用的Action放入Stack Context(官方文档是错误的)
         * executeResult:指定是否把被调Action的处理结果完全包含到当前页面中
         * ignoreContextParams:控制当前页面请求参数,是否传入被调的Action
            功能是比较有用的:假如进入到一个添加用户的页面:
            用户名: □□□□□□□
            密码: □□□□□□□
            性别: □□□□□□□ <s:action var="genders" "name=listGender"/>
            学历: -下拉列表- 来自于系统的数据库中的数据
            籍贯: -下拉列表-<s:action var="jiguans" name="listJiguans"/>
        date - 对日期进行格式化输出
          name:指定要格式化输出的日期
          format:格式化字符串
          nice:输出该日期与当前日期的时间差
        include - 用于包含指定的JSP页面
        param - 用于设置参数
        push - 把表达式的值放入ValueStack的栈顶(可以方便直接获取栈顶元素,因此性能更好)
          当我们的对象所在的对象图”很深“时,可以将该对象”推入“ValueStack的栈顶

  • 相关阅读:
    std::string构造函数
    shell命令-while语句
    shell命令-for语句
    shell命令-if语句
    softmax回归推导
    sigmod函数求导
    生成器面试题之一
    range和xrange的区别
    python里的input
    python中print和input的底层实现
  • 原文地址:https://www.cnblogs.com/otio/p/4093708.html
Copyright © 2011-2022 走看看