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=\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的更多相关文章
- Struts2学习---拦截器+struts的工作流程+struts声明式异常处理
这一节我们来看看拦截器,在讲这个之前我是准备先看struts的声明式异常处理的,但是我发现这个声明式异常处理就是由拦截器实现的,所以就将拦截器的内容放到了前面. 这一节的内容是这样的: 拦截器的介绍 ...
- struts的声明式异常处理
情景 使用Struts封装的下载文件的功能 当下载文件找不到的时候,struts获取的InputStream为null 这个时候,就会报500错误 java.lang.IllegalArgumentE ...
- Struts2的声明式异常处理
在struts2应用程序中你还在使用try catch语句来捕获异常么?如果是这样的,那你OUT啦!struts2支持声明式异常处理,可以再Action中直接抛出异常而交给struts2来 处理,当然 ...
- Struts2学习第八课 声明式异常处理
异常处理:exception-mapping元素 exception-mapping元素:配置当前的action的声明式异常处理 exception-mapping元素有两个属性: --excepti ...
- 学习Struts框架系列(三):声明式异常处理
在Struts1.X的版本中加入了对异常的处理Exception Handler,有了它我们可以不使用try/catch捕获异常,一旦出现了我们已经定义的异常,那么就会转到相应的页面,并且携带异常信息 ...
- Strut2_声明式异常处理
Service 往外抛异常 public List<Category> list() throws SQLException{ Connection conn = DB.createCon ...
- Struts2声明式异常处理
通过配置.xml文件的方式处理异常信息: 注意:配置.xml文件的同时还要抛出异常 标签:<exception-mapping></exception-mapping>和< ...
- [原创]java WEB学习笔记60:Struts2学习之路--Actioin-声明式异常处理
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- 9、 Struts2验证(声明式验证、自定义验证器)
1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法.有效的. Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证: ...
随机推荐
- H5和原生APP之间的区别
最近项目中因各种客观因素,移动端都是默认用的纯H5 APP,感受最深的就是各种坑啊,好大的坑啊.产品上线后,带着各种坑后的总结原因方发现很多人都说纯H5 APP一次编写就能支持android和IOS两 ...
- Module ngx_http_rewrite_module
http://nginx.org/en/docs/http/ngx_http_rewrite_module.html Directives break if return ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_5-03 feign结合hystrix断路器开发实战上
笔记 3.Feign结合Hystrix断路器开发实战<上> 简介:讲解SpringCloud整合断路器的使用,用户服务异常情况 1.加入依赖 注意:网上新旧版本问 ...
- Linux(centos)安装vim
当在Linux环境下使用vim提示: vim command not found时,说明系统还没有安装vim. 安装步骤: 1.检查是否已安装 查看一下你本机已经存在的包,确认一下你的VIM是否已经安 ...
- C# 保留两位“有效数字”,而不是两位“小数”
1.问题描述: 最近在处理软件结果显示时,发现如果利用 Math.Round(Number,N) 取N为小数时,有的结果不能显示完全 比如:15.3245 和 0.00106 两个数字,如果 N=2 ...
- 【图像处理】DVR H.264视频编码基本知识
视频编码技术基本是由ISO/IEC制定的MPEG-x和ITU-T制定的H.26x两大系列视频编码国际标准的推出.从H.261视频编码建议,到 H.262/3.MPEG-1/2/4等都有一个共同的不断追 ...
- C#常用处理数据类型转换、数据源转换、数制转换、编码转换相关的扩展
public static class ConvertExtensions { #region 数据类型转换扩展方法 /// <summary> /// object 转换成string ...
- sops的配置过程
0.demo关键 1.关键信息,不能用5.1.6版本的,还有很多坑 蓝鲸版本: 标准运维:bk_sops_V3.1.39.tar 2.简单理解: 标准运维实际上调用作业平台job的API去执行 要跑通 ...
- WebContent下新建目录放入jsp,跳转servlet页面出错解决
为方便分类jsp文件,于是在web-content下新建了一级目录,将jsp文件放入其中,结果原本跳转的servlet出现404错误: 解决如下: 在用eclipse创建的servle会自动生成一个注 ...
- git 命令 查看历史提交 git log
怎么理解git commit 命令 git commit 相当于 我们虚拟机快照操作,每次执行commit命令 相当于对本地仓库做一次快照,保存了当时仓库的状态, git commit -m 加上的& ...