声明式异常处理

  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=\u4E2D\u6587)

注: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' 可以指定浏览器使用的语言,可以做几个链接来动态切换页面显示语言(调用不同语言的资源文件)

6.声明式异常处理、I18N的更多相关文章

  1. Struts2学习---拦截器+struts的工作流程+struts声明式异常处理

    这一节我们来看看拦截器,在讲这个之前我是准备先看struts的声明式异常处理的,但是我发现这个声明式异常处理就是由拦截器实现的,所以就将拦截器的内容放到了前面. 这一节的内容是这样的: 拦截器的介绍 ...

  2. struts的声明式异常处理

    情景 使用Struts封装的下载文件的功能 当下载文件找不到的时候,struts获取的InputStream为null 这个时候,就会报500错误 java.lang.IllegalArgumentE ...

  3. Struts2的声明式异常处理

    在struts2应用程序中你还在使用try catch语句来捕获异常么?如果是这样的,那你OUT啦!struts2支持声明式异常处理,可以再Action中直接抛出异常而交给struts2来 处理,当然 ...

  4. Struts2学习第八课 声明式异常处理

    异常处理:exception-mapping元素 exception-mapping元素:配置当前的action的声明式异常处理 exception-mapping元素有两个属性: --excepti ...

  5. 学习Struts框架系列(三):声明式异常处理

    在Struts1.X的版本中加入了对异常的处理Exception Handler,有了它我们可以不使用try/catch捕获异常,一旦出现了我们已经定义的异常,那么就会转到相应的页面,并且携带异常信息 ...

  6. Strut2_声明式异常处理

    Service 往外抛异常 public List<Category> list() throws SQLException{ Connection conn = DB.createCon ...

  7. Struts2声明式异常处理

    通过配置.xml文件的方式处理异常信息: 注意:配置.xml文件的同时还要抛出异常 标签:<exception-mapping></exception-mapping>和< ...

  8. [原创]java WEB学习笔记60:Struts2学习之路--Actioin-声明式异常处理

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  9. 9、 Struts2验证(声明式验证、自定义验证器)

    1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法.有效的. Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证: ...

随机推荐

  1. 003-tomcat配置文件-server、tomcat-users

    1.server.xml讲解 位于conf下 <?xml version="1.0" encoding="UTF-8"?> <!-- Serv ...

  2. 部署Hadoop-3.0-高性能集群

    一.Hadoop概述: Hadoop是一个由Apache基金会所开发的分布式系统基础架构.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储.Hadoop的框 ...

  3. vagrant虚拟机共享目录在windows宿主下的禁忌

    问题背景 宿主环境:Windows10 开发环境:vagrant(ubuntu) 操作目录:synced_folder (共享目录 ) 执行命令:npm install 错误信息: npm ERR! ...

  4. SQL server中获取语句执行时间

    在写代码的时候,有时候实现一个功能会有好多个方法,有时候会做一下方法的耗时对比,综合下时间复杂度与空间复杂度,写出最好的代码: 同样,在写一些SQL查询,SQL代码的时候,也希望能写出一个高效一点的查 ...

  5. SpringBoot: 1.创建第一个SpringBoot项目(转)

      一.新建项目 二.打开项目的pom文件,在里面添加maven依赖 1 <!--springboot项目依赖的父项目--> 2 <parent> 3 <groupId& ...

  6. Leetcode之70. Climbing Stairs Easy

    Leetcode 70 Climbing Stairs Easy https://leetcode.com/problems/climbing-stairs/ You are climbing a s ...

  7. Linux下ping: unknown host www.baidu.com的解决办法

    如果ping域名的时候出现ping:unknown host  xxx.xxx 但是ping IP地址的时候可以通的话 可知是dns服务器没有配置好, 查看一下配置文件/etc/resolv.conf ...

  8. Tensorflow之实现物体检测

    目录 项目背景 TensorFlow介绍 环境搭建 模型选用 Api使用说明 运行路由 小结 项目背景 产品看到竞品可以标记物体的功能,秉承一贯的他有我也要有,他没有我更要有的作风,丢过来一网站,说这 ...

  9. babel-plugin-equire - 一个按需加载 echarts 模块的 babel 插件

    参考链接:https://juejin.im/entry/5a1c1bc9f265da430d57bd3f?utm_medium=hao.caibaojian.com&utm_source=h ...

  10. Kafka如何保证百万级写入速度以及保证不丢失不重复消费

    一.如何保证百万级写入速度: 目录 1.页缓存技术 + 磁盘顺序写 2.零拷贝技术 3.最后的总结 “这篇文章来聊一下Kafka的一些架构设计原理,这也是互联网公司面试时非常高频的技术考点. Kafk ...