一、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中的国际化资源以及视图跳转的更多相关文章

  1. idea中springboot静态资源及页面跳转问题

    1,静态资源放在resources/static下,html页面放在resources/templates下 2,在html中引入静态资源时,不用带static(对于路径来说是透明的) 3, 配置ht ...

  2. Spring 中的国际化Message的简单例子(ApplicationContext) 不跟框架集成的版本

    首先,建立一个描述message的XML文件,名为messages.xml     <?xml version="1.0" encoding="UTF-8" ...

  3. Spring中Resource(资源)的获取

    1.通过Resource接口获取资源 Resource接口的实现类有: Resource接口继承了InputStreamSource 接口,InputStreamSource 接口中有一个方法:get ...

  4. Spring 中拦截器与过滤器的区别

    spring 中拦截器 与servlet 的filter 有相似之处.比如二者都是aop 编程思想的体现都能实现权限检查,日志记录等. 不同之处 使用范围不同 Filter 是Servlet 规定的. ...

  5. Spring官网阅读(十七)Spring中的数据校验

    文章目录 Java中的数据校验 Bean Validation(JSR 380) 使用示例 Spring对Bean Validation的支持 Spring中的Validator 接口定义 UML类图 ...

  6. Spring的国际化资源messageSource

    Spring中可以使用两个类加载资源文件:ReloadableResourceBundleMessageSource和ResourceBundleMessageSource. 可配置如下message ...

  7. Spring MVC资源绑定视图解析器

    ResourceBundleViewResolver使用属性文件中定义的视图bean来解析视图名称. 以下示例显示如何使用Spring Web MVC框架中的ResourceBundleViewRes ...

  8. 一个简单的示例在spring boot中实现国际化

    最近在网上找了一个有关账单管理的spring boot项目,其中有一部分是涉及显示国际化信息的,即将页面上的中英文进行转换.因为在这之前这部分内容没有接触过,所以在这记录下过程. 中文效果图如下所示: ...

  9. IOS中在自定义控件(非视图控制器)的视图跳转中 代理方法与代码块的比较

    //代码块与代替代理的设计方法 我就以在自定义视图中(非视图控制器,不能实现视图控制功能),通过代理和代码块两种方法分别实现视图的跳转,进行对比 首先自定义了一个视图,上面有一个已经注册了得BUtto ...

随机推荐

  1. 屏蔽NumberPicker点击可输入问题

    1.xml布局中添加属性:Android:descendantFocusability="blocksDescendants" 2.代码中设置:numberPicker.setDe ...

  2. 可移动磁盘显示0kb打不开怎么办

      移动硬盘.U盘打不开怎么办 为了方便共享,大多数人都购买了移动硬盘.那么如果有一天,发现移动硬盘打不开了,怎么办?下面为大家介绍移动硬盘打不开的解决方法. 未格式化故障 第一步:双击盘符出现未格式 ...

  3. ubuntu+let's encrypt生成永久免费https证书 ubuntu+tomcat+nginx+let's encrypt

    1. 下载let's encrypt $ sudo add-apt-repository ppa:certbot/certbot $ sudo apt-get update $ sudo apt-ge ...

  4. javascript 冒泡排序算法

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  5. 对于刚開始学习的人Xcode最经常使用的快捷键

    对于刚開始学习的人而言,好多人都是直接使用鼠标进行操作.差点儿非常少使用快捷键,从而再练习编程时比别人慢那么一点,今天就把刚開始学习的人最经常使用的几个快捷键给大家总结下,当然欢迎大家补充. (1)c ...

  6. LoadRunner lr_eval_string() 函数使用及LR中变量、参数的简单使用

    lr_eval_string() 函数的主要作用:返回脚本中的一个参数当前的值, 返回值类型:char 一般多用在调试脚本时输出参数的值.具体用法如下:lr_output_message(" ...

  7. java检测http请求的ip地址 Java问题通用解决代码

    以后再用到的话,至少能起个参考作用 java实现,struts2的Action中,依赖HttpServletRequest     package net.dookoo.web.action;   i ...

  8. PHP面试题及答案解析(4)—PHP核心技术

    1.写出一个能创建多级目录的PHP函数. <?php /** * 创建多级目录 * @param $path string 要创建的目录 * @param $mode int 创建目录的模式,在 ...

  9. ZAP介绍

    Zed Attack Proxy简写为ZAP,是一个简单易用的渗透测试工具,是发现Web应用中的漏洞的利器,更是渗透测试爱好者的好东西.ZAP下载地址:https://www.owasp.org/in ...

  10. Codeforces 34C-Page Numbers(set+vector+暴力乱搞)

    C. Page Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...