Spring中的国际化资源以及视图跳转
2017-03-29 21:52
288 查看
一、SpringMVC对国际化的支持
SpringMVC进行资源国际化主要是通过ResourceBundleMessageSource实现的,xml如下配置:
资源文件如下:
i18n.properties:
这样的话,当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>
控制器代码:
若改为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>
这样当我们点击浏览器链接,虽然页面URL没有变化,但是页面已经是index2.jsp的内容。
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=Passwordi18n_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配置国际化的消息资源文件以及spring3.0注解表单验证
- Spring学习总结4(消息资源国际化)
- struts、spring国际化资源文件使用简介
- 【Spring】[bug]国际化资源文件找不到 NoSuchMessageException
- Maven配置Spring+SpringMVC+MyBatis(3.2.2)Pom 以及 IntelliJ IDEA 如何打开依赖视图
- MFC中打开资源视图的IDD_EXAMPLE_DIALOG以及属性框
- Spring笔记之八(国际化,资源文件的加载)
- spring视图国际化locale
- iOS开发UIViewCOntroller视图控制器之间跳转切换举例,以及视图控制器生命周期的简单说明
- 基于纯Java代码的Spring容器和Web容器零配置的思考和实现(2) - 静态资源、视图和消息器
- Java中读取属性文件以及做资源国际化
- spring常见国际化错误以及原因
- 【纠错】视图跳转的几个常见警告以及解决方案
- Spring多配置文件与国际化,使用资源文件
- Spring学习之使用标签来标记资源(@Component、@Repository、 @Service和@Controller)以及使用方式(包含如何在jsp中使用)
- apache 开启域名301跳转,资源跳转,以及开启Gzip.
- UIView中视图关系分析以及视图跳转动画的使用
- 关于点击UIScrollView跳转的问题,以及怎么在UITableView上展示滚动视图,九宫格,自定义Cell等
- SpringMVC ContentNegotiatingViewResolver -- 根据请求资源名选择视图
- Spring 国际化支持 消息传递 以及 AOP 面向方面编程