Spring中的国际化资源以及视图跳转
一、SpringMVC对国际化的支持
SpringMVC进行资源国际化主要是通过ResourceBundleMessageSource实现的,xml如下配置:
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="i18n"></property>
</bean>
资源文件如下:
i18n.properties:
i18n.username=Username
i18n.password=Password
i18n_zh_CN.properties:
i18n.username=\u7528\u6237\u540D(用户名)
i18n.password=\u5BC6\u7801(密码)
i18n_en_US.properties:
i18n.username=Username
i18n.password=Password
测试页面如下
<!-- 加载的为i18n_zh_CN.properties 与语言无关 -->
<fmt:bundle basename="i18n_zh_CN" prefix="i18n.">
<fmt:message key="username"></fmt:message>
</fmt:bundle> <!-- 资源国际化 -->
<br><br>
<fmt:message key="i18n.username"></fmt:message>
<br><br> <fmt:message key="i18n.password" ></fmt:message>
<br><br>
这样的话,当SpringMVC检测到语言为en时,页面显示将为英文;当语言为zh时,页面显示将为中文。
二、SpringMVC处理转发和重定向
spring控制器返回最后一个ModelAndView时,其中的urName可以是一个视图名称,这样视图解析器负责解析后将响应流写回客户端。也可以通过return redirect/forward:url方式转到另一个控制器进行处理。
redirect代表重定向,若使用 return “redirect:/hello”; 浏览器的地址栏会变为*****/hello。
而forward表示转发,若SpringMVC处理函数使用 return “forward:/hello”;形式的语句,浏览器的地址栏不会变,但是有新的视图返回来。
1、redirect方式
return redirect:url相当于”response.sendRedirect()”。采用这种方式浏览器地址栏最后显示的路径是重定向后的新的路径。
具体流程如下:服务器端会首先发一个response给浏览器, 然后浏览器收到这个response后再发一个requeset给服务器, 然后服务器发新的response给浏览器。这时页面收到的request是一个新的从浏览器发来的请求。这种方式的结果是:
(1)在重定向前后有两个不同的request对象,重定向前后的两个控制器在request上的参数(request.getParameter())和request属性(request.getAttribute())不能共享;
(2)如果重定向前后的两个控制器都配置在spring 拦截器范围内,这样拦截器会拦截前后两个request,即会拦截两次;
(3)最后返回到浏览器后,因为地址栏显示的是重定向后的url,所以刷新页面时只会执行后面的url映射的控制器。
示例:
JSP 页面:
<a href="springmvc/testRedirect">Test Redirect</a>
控制器代码:
//方法所在的类被@RequestMapping("/springmvc")所修饰
@RequestMapping("/testRedirect")
public String testRedirect(){
System.out.println("testRedirect");
return "redirect:/index2.jsp";//这里的'/'表示相对于项目根目录
}
这样映射的页面将会在index2.jsp,并且url将是 项目根目录/index2.jsp。也就是说这会忽略在类上修饰的@RequestMapping。
若改为return "redirect:index2.jsp";,则url将是 项目根目录/springmvc/index2.jsp,这时类上修饰的@RequestMapping也会起作用。
2、forward方式:
return forward:url相当于request.getRequestDispatcher().forward(request,response),这种方式的外部特征是浏览器地址显示的路径是转发前的路径。工作方式如下:forward 发生在服务器内部,在前一个控制器处理完毕后,直接进入下一个控制器处理, 并将转发后的控制器的response发给浏览器。这种方式的结果是:
(1)转发前后是同一个request,后一个控制器可共享前一个控制器的参数与属性;
(2)因为是同一个request,拦截器只会拦截前一个url,如果前一个url在映射时未配置到拦截器拦截,则拦截后一个url,即只拦截一次;
(3)最后返回到浏览器后,因为地址栏显示的是转发前的url,所以刷新页面时会依次执行前后两个控制器。
示例:
index.jsp 页面
<a href="springmvc/testForward">Test Redirect</a>
控制器代码:
//方法所在的类被@RequestMapping("/springmvc")所修饰
@RequestMapping("/testForward")
public String testForward(){
System.out.println("testForward");
return "forward:/index2.jsp";
}
这样当我们点击浏览器链接,虽然页面URL没有变化,但是页面已经是index2.jsp的内容。
Spring中的国际化资源以及视图跳转的更多相关文章
- idea中springboot静态资源及页面跳转问题
1,静态资源放在resources/static下,html页面放在resources/templates下 2,在html中引入静态资源时,不用带static(对于路径来说是透明的) 3, 配置ht ...
- Spring 中的国际化Message的简单例子(ApplicationContext) 不跟框架集成的版本
首先,建立一个描述message的XML文件,名为messages.xml <?xml version="1.0" encoding="UTF-8" ...
- Spring中Resource(资源)的获取
1.通过Resource接口获取资源 Resource接口的实现类有: Resource接口继承了InputStreamSource 接口,InputStreamSource 接口中有一个方法:get ...
- Spring 中拦截器与过滤器的区别
spring 中拦截器 与servlet 的filter 有相似之处.比如二者都是aop 编程思想的体现都能实现权限检查,日志记录等. 不同之处 使用范围不同 Filter 是Servlet 规定的. ...
- Spring官网阅读(十七)Spring中的数据校验
文章目录 Java中的数据校验 Bean Validation(JSR 380) 使用示例 Spring对Bean Validation的支持 Spring中的Validator 接口定义 UML类图 ...
- Spring的国际化资源messageSource
Spring中可以使用两个类加载资源文件:ReloadableResourceBundleMessageSource和ResourceBundleMessageSource. 可配置如下message ...
- Spring MVC资源绑定视图解析器
ResourceBundleViewResolver使用属性文件中定义的视图bean来解析视图名称. 以下示例显示如何使用Spring Web MVC框架中的ResourceBundleViewRes ...
- 一个简单的示例在spring boot中实现国际化
最近在网上找了一个有关账单管理的spring boot项目,其中有一部分是涉及显示国际化信息的,即将页面上的中英文进行转换.因为在这之前这部分内容没有接触过,所以在这记录下过程. 中文效果图如下所示: ...
- IOS中在自定义控件(非视图控制器)的视图跳转中 代理方法与代码块的比较
//代码块与代替代理的设计方法 我就以在自定义视图中(非视图控制器,不能实现视图控制功能),通过代理和代码块两种方法分别实现视图的跳转,进行对比 首先自定义了一个视图,上面有一个已经注册了得BUtto ...
随机推荐
- 矩阵压缩写法 scipy spark.ml.linalg里都有,CRS,CCS
CRS 表示:Compressed Row Storage CCS 表示:Compressed Column Storage CRS的表示参考: https://blog.csdn.net/buptf ...
- Linux&Windows下批量修改文件后缀
Linux下从给定文件夹中找出小于1M的文件,并批量添加.gif后缀 先看一下文件夹下的目录的格式 ll -Sh -rw-rw-r-- 1 yangkun yangkun 17M May 10 15: ...
- shell中set命令
set命令作用主要是显示系统中已经存在的shell变量,以及设置shell变量的新变量值.set命令不能够定义新的shell变量.如果要定义新的变量,可以使用declare命令以变量名=值的格式进行定 ...
- RPC接口mock测试
转载:http://blog.csdn.net/ronghuanye/article/details/71124127 1 简介 Dubbo目前的应用已经越来越广泛.或者基于Dubbo二 ...
- ubuntu apt-get install xxx时一直报错E: Unable to locate package xxxxxxx
$ sudo add-apt-repository main $ sudo add-apt-repository universe $ sudo add-apt-repository restrict ...
- Laravel之视图和Blade模板引擎
一.视图 1.视图文件存放在resources/views目录2.视图载入及传参 return view('greeting', ['name' => 'James']); 还可以通过with ...
- JQuery修改对象的属性值
JQuery修改对象的属性值 用到的便是JQuery提供的attr方法,获取属性值的基本结构为:$(obj).attr("属性名"):修改属性值的结构为:$(obj).attr(& ...
- 非阻塞socket中read、write返回值
read返回值 >0 读取数据的长度 =0 接收到对端发送的FIN,表示对端的写端关闭. <0 如果errno=EINTR.收到信号并从信号处理函数返回时,慢系统调用会返回并设 ...
- WebService的缓存机制
分类: .NET ASP 2010-11-13 10:00 849人阅读 评论(0) 收藏 举报 webservicestring数据库nullapplicationweb服务 WebService的 ...
- StringUtils工具类详解
StringUtils判断字符串大概有四种方法: 下面是 StringUtils 判断是否为空的示例: 判断是否为空,但是要注意,空格不算空,这个最好能不用则不用. StringUtils.isEmp ...