zoukankan      html  css  js  c++  java
  • 6.声明式异常处理、I18N

    声明式异常处理

      1.在Action 中进行异常映射

      <exception-mapping result="error" exception="java.sql.SQLException" />

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

      2.在Package 中进行全局映射

      <global-results>

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

      </global-results>

      <global-exception-mappings>

        <exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>

      </global-exception-mappings>


      3.使用继承共同异常映射

      4.Struts2中异常处理由拦截器实现(观察struts-default.xml)

        a)注:实际上Struts2的大多数功能都由拦截器实现

      异常处理过程:

        1.当客户端发送请求,struts2的Filter会进行拦截,将符合要求的请求转给struts2 进行处理

        2.在这个请求交给相应的Action方法处理之前,会经过各种拦截器(如:exception,params)等 具体可以看 struts-default.xml 

        3.如:Action中的某个方法抛出了 Exception ,在调用方法之前会被拦截器拦截住,这里被异常拦截器拦截,

      (这个异常拦截器是怎么拦截的呢?异常拦截器会try catch抛出异常的方法,如果抓住了异常,就返回相应的result)

    /*filter 和 interceptor*/

    filter配置在web.xml中, /*任何url都会拦截*/,至于怎么处理由开发者决定,一般用户验证是否登录

    interceptor 配置在action中,只会对一个或者某几个action起作用,不会对url起作用,一般用于功能方面的验证,是否有某些权限的验证等

    1.I18N原理(国际化 中英文)

      a) ResourceBundle 和 Locale 的概念

      如:有两个文件 app_en_US.properties 和 app_zh_CN.properties

      使用 ResourceBundle rb1 = ResourceBundle.getBundle("app", Locale.US); 就能拿到 app_en_US.properties

      Locale.US 会自动去找 en_US,所以文件名必须写成 *_en_US.properties

      System.out.println(rb1.getString("welcome.msg"));


      使用 ResourceBundle rb2 = ResourceBundle.getBundle("app", Locale.CHINA); 就能拿到 app_zh_CN.properties

      System.out.println(rb2.getString("welcome.msg"));

      b) 资源文件(.properties)

      中文资源文件,会有中文乱码问题,在编写这个资源文件时,不能直接写中文,而是写中文对应的Unicode编码的字符 (如:welcome.msg=u4E2Du6587)


    注:myeclipse中一般是默认使用myeclipse properties editor打开properties文件,它会自动转码中文为unicode编码,

    即打出中文,会自动翻成Unicode编码,写入到资源文件

    但是,此时在文件中显示的就是unicode编码,不够直观,可以使用可以使用PropertiesEditor插件(需下载),

    使用PropertiesEditor插件的效果:在资源文件显示的是中文,但是里面的内容是对应的unicode编码,比myeclipse自带的要好一点

      c) native2ascii

      将非Unicode编码字符转化为Unicode编码的字符,即国际化 (在命令行输入中文,在命令行输出Unicode编码的字符)


    2.Struts的资源文件(在struts的I18N国际化)

      a) Action-Package-App级

      b) 一般只用App

      c) 动态语言切换(request_locale=en_US)

    注:常用的方式:

      1.使用App级的资源文件(即资源文件在src目录下)bbs2009_en_US.properties

      2.使用 PropertiesEditor插件 编写中文资源文件

      3.在struts.xml文件中添加 <constant name="struts.custom.i18n.resources" value="bbs2009"></constant>

      这句话的作用:找资源文件是,找bbs2009 开头的资源文件

      4.在JSP页面使用 <s:property value="getText('login.username')"/> 来显示资源文件的内容(login.username 是资源文件属性的Key)


    注:1.也可以使用 <s:text name="welcome.msg"> 来显示资源文件的内容

      2.welcome.msg=welcome:{0}              <s:text name="welcome.msg">

                        可以配合        <s:param value="username"></s:param>

                             </s:text> 

      来使用,取出来的username 会代替 {0} /*welcome.msg中的第一个参数*/

      3.在请求时加上 '?request_locale=en_US' 可以指定浏览器使用的语言,可以做几个链接来动态切换页面显示语言(调用不同语言的资源文件)

  • 相关阅读:
    tf导出pb文件,以及如何使用pb文件
    word2vec入门理解的博客整理
    简单的RNN和BP多层网络之间的区别
    图像中用到的信息论中的一些概念公式
    raw文件转mha文件
    mha格式的CT体数据转为jpg切片
    在MySQL的表中增加一列
    ES7学习笔记(二)ES的集群原理
    MySQL中的幻读,你真的理解吗?
    ES7学习笔记(一)Elasticsearch的安装与启动
  • 原文地址:https://www.cnblogs.com/xuzekun/p/7382597.html
Copyright © 2011-2022 走看看