struts2总结(四)--异常处理和I18N

6 声明式异常处理

通过配置的方式捕获指定类型异常,有ExceptionMappingInterceptor拦截器将异常信息(ExceptionHolder:exceptionStack, exception)压入栈顶,然后通过OGNL表达式在页面中获取异常。

  1. 在Actoin中进行异常映射

    • 只对当前Action对应类型的异常起作用,在struts2配置文件Action内部节点使用exception-mapping来映射异常,当发生SQLException时,会返回“error”信息,并跳转到error.jsp页面:
      1
      2
      3
      4
      5
      6
      <action name="*-*" class="com.bbs.action.{1}Action" method="{2}">
      <result>/admin/{1}-{2}.jsp</result>
      <result name="input">/admin/{1}-{2}.jsp</result>
      <exception-mapping exception="java.sql.SQLException" result="error" />
      <result name="error">/error.jsp</result>
      </action>
  2. 在package中进行全局异常映射

    • 针对所有Action对应类型的异常都起作用,可以通过OGNL在页面中获取异常信息需。
    • GLOBAL级别的声明式异常配置必须配置在所有的Action之前,同时,global-result节点需要配置在global-exception-mappings之前。
    • 当捕获到一个异常对象时,如果同时存在Action和全局两种级别的映射信息,则优先使用Action级别。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      <package name="default" extends="struts-default">
      <global-results>
      <result name="globleException">/error.jsp</result>
      </global-results>
      <global-exception-mappings>
      <exception-mapping result="globleException" exception="java.lang.Exception"/>
      </global-exception-mappings>
      </package>
  3. 使用继承共用异常映射,多个package可以通过extends来公用异常映射:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <package name="admin" namespace="/admin" extends="default" >
    <action name="index">
    <result>/admin/index.html</result>
    </action>
    <action name="*-*" class="com.action.{1}Action" method="{2}">
    <result>/admin/{1}-{2}.jsp</result>
    <result name="input">/admin/{1}-{2}.jsp</result>
    <result name="error">/error.jsp</result>
    </action>
    </package>
  4. Struts2中异常处理由拦截器实现(观察struts-default.xml)

    • 实际上Struts2的大多数功能都由拦截器实现

7 I18N

  1. I18N原理
    国际化,international。我们将程序中硬编码的文本转移到外部的资源文件(.properties)中期 ,针对每一种语言环境,编写一个资源文件。指定当前程序所用的语言环境,Java中的国际化处理机制能够自动找到对应的资源文件并读取内容。创建了两个资源文件,一个为bbs_en_US.properties,bbs_zh_CN.properties,需要注意的 是编码问题,IDEA中将File-Editor-Code Style-File Encodings-Transparent native-to-ascii conversion勾选上,就可以将中文自动转换成ASCII编码。

    • ResourceBundle和Locale的概念
    • ResourceBundle:按语言查找顺序
    • Locale命令是将当前语言环境或全部公共语言环境的信息输出到标准输出上
    • 资源文件:在Action所在的包或者任意一个父包中定义package.properties和package_language_COUTRY.properties资源文件
  2. Struts的资源文件

    • Action – Package – App级
    • 一般只用APP
    • struts.xml custom.i18n
    • 动态语言切换
    • request_locale=en_US
  3. 了解的不多,以后可以查教程
    I18N

Donate comment here