欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

學(xué)習(xí)SpringMVC——國(guó)際化+上傳+下載詳解

 更新時(shí)間:2016年12月12日 10:19:54   作者:JackieZheng  
本篇文章主要介紹了學(xué)習(xí)SpringMVC——國(guó)際化+上傳+下載,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。

一個(gè)軟件,一個(gè)產(chǎn)品,都是一點(diǎn)點(diǎn)開(kāi)發(fā)并完善起來(lái)的,功能越來(lái)越多,性能越來(lái)越強(qiáng),用戶體驗(yàn)越來(lái)越好……這每個(gè)指標(biāo)的提高都需要切切實(shí)實(shí)的做點(diǎn)東西出來(lái),好比,你的這個(gè)產(chǎn)品做大了,用的人多了,不僅僅再是上海人用,北京人用,還有印度人用,法國(guó)人用等等,可以說(shuō)這個(gè)產(chǎn)品已經(jīng)走上了國(guó)際化的大舞臺(tái)。當(dāng)印度的哥們輸入url訪問(wèn)產(chǎn)品時(shí),界面上彈出“歡迎您,三哥”,估計(jì)哥們當(dāng)場(chǎng)就蒙圈了。而這個(gè)時(shí)候,國(guó)際化就應(yīng)運(yùn)而生了。

要做國(guó)際化這道菜,真的沒(méi)有想象中的那么復(fù)雜,反而很簡(jiǎn)單,不信你看——

1. 注入ResourceBundleMessageSource

在SpringMVC.xml添加用于國(guó)際化處理的beanResourceBundlMessageSource

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> 

  <property name="basename" value="i18n"></property> 

</bean> 

這里property中的name是與注入類中的屬性名一直的,這里的value決定了后面國(guó)際化文件的名稱,記得是i18n,馬上你就會(huì)看到它的用法。

 2. 創(chuàng)建國(guó)際化文件

總共需要?jiǎng)?chuàng)建三個(gè)國(guó)際化屬性文件

i18n.properties-默認(rèn)的國(guó)際化文件

i18n_en_US.properties-用于英文環(huán)境的國(guó)際化文件

i18n_zh_CN.properties-用于中文環(huán)境的國(guó)際化文件

注意:這里為什么文件的名稱都是i18n開(kāi)頭,因?yàn)樵诘谝稽c(diǎn)的springmvc.xml配置文件中,配置的value值就是i18n

對(duì)于i18n.properties和i18n_en_US.properties文件的內(nèi)容相同,如下

i18n.username=UserName

i18n.password=Password 

i18n_zh_CN.properties

i18n.username=\u7528\u6237\u540D

i18n.password=\u5BC6\u7801 

3.新建頁(yè)面

分別新建兩個(gè)頁(yè)面,一個(gè)是i18n.jsp,顯示用戶名,同時(shí)有跳轉(zhuǎn)到i18n2.jsp的超鏈接,另一個(gè)是i18n2.jsp,顯示密碼,同時(shí)有跳轉(zhuǎn)到i18n.jsp的超鏈接。

i18n.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

  pageEncoding="UTF-8"%>

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

  <fmt:message key="i18n.username"></fmt:message><br><br>

   

  <a href="i18n2">i18n2</a>

</body>

</html> 

i18n2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

  pageEncoding="UTF-8"%>

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

  <fmt:message key="i18n.password"></fmt:message><br><br>

   

  <a href="i18n">i18n</a>

</body>

</html> 

同時(shí),顯然我們需要在index.jsp中添加一個(gè)入口,鏈接到i18n.jsp頁(yè)面,如下

<a href="i18n">i18n</a> 

為了能夠直接點(diǎn)擊就鏈接過(guò)去,而不需要通過(guò)handler處理并跳轉(zhuǎn)到視圖的套路,我們需要在springmvc.xml中添加標(biāo)簽

<mvc:view-controller path="/i18n" view-name="i18n"/> 

<mvc:view-controller path="/i18n2" view-name="i18n2"/> 

這樣就能實(shí)現(xiàn)直接在地址欄中直接訪問(wèn)到i18n.jsp和i18n2.jsp頁(yè)面了。

  

小坑:如果i18n.jsp和i18n2.jsp中的編碼方式采用默認(rèn)“ISO-8859-1”,就會(huì)出現(xiàn)頁(yè)面顯示亂碼

當(dāng)把編碼改為“UTF-8”后,就能夠正常顯示

以上是國(guó)際化這道菜的基礎(chǔ)做法,那么如果我還想做一道不用直接訪問(wèn)i18n.jsp,而是經(jīng)過(guò)handler處理后呈現(xiàn)的i18n.jsp,或者我還想做一道不用那么麻煩還要切換語(yǔ)言的國(guó)際化菜,有沒(méi)有可能,當(dāng)然,接著看——

1.  注釋之前在springmvc.xml添加對(duì)于i18n.jsp直接訪問(wèn)的標(biāo)簽

<!-- 

<mvc:view-controller path="/i18n" view-name="i18n"/> 

--> 

2. 在Hanlder處理類SpringMVCTest中添加處理接口

@Autowired

private ResourceBundleMessageSource messageSource;

@RequestMapping("/i18n")

public String testI18n(Locale locale){

  String val = messageSource.getMessage("i18n.username", null, locale);

  System.out.println(val);

  return "i18n";

} 

注意這里注入了國(guó)際化處理類ResourceBundleMessageSource,并使用其getMessage方法獲取國(guó)際化后的屬性值。

啟動(dòng)tomcat服務(wù)可以看到

那么如果根據(jù)自己的設(shè)定,在不同的語(yǔ)言環(huán)境中顯示相應(yīng)語(yǔ)言的信息呢

1.  配置SessionLocaleResolver和LocaleChangeInterceptor

<!-- 配置SessionLocaleResolver -->

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"></bean>

       

<!-- 配置LocaleChangeInterceptor -->

<mvc:interceptors>

  <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"></bean>

</mvc:interceptors> 

這里的LocaleChangeInterceptor主要用于將帶有l(wèi)ocale信息的請(qǐng)求解析為一個(gè)Locale對(duì)象,并得到一個(gè)LocaleResolver對(duì)象

之后這里的SessionLocalResolver就會(huì)將上面的LocalResolver對(duì)象轉(zhuǎn)化為Session的屬性,并從中取出這個(gè)屬性,也就是Locale對(duì)象,返回給應(yīng)用程序。

 2. 在index.jsp中添加超鏈接

<a href="i18n?locale=zh_CN">中文</a>

<br><br>

<a href="i18n?locale=en_US">英文</a> 

這樣,我們就可以看到結(jié)果

說(shuō)完國(guó)際化,再來(lái)說(shuō)說(shuō)SpringMVC對(duì)于json的支持。

在傳統(tǒng)的開(kāi)發(fā)過(guò)程中,我們的handler即controller層通常遵循需要轉(zhuǎn)向一個(gè)JSP視圖的套路;但是這樣的場(chǎng)景并不能滿足所有的要求,比如我們很多時(shí)候只需要返回?cái)?shù)據(jù)即可,而不是一個(gè)JSP頁(yè)面。那么這時(shí)候SPRING MVC3的@ResponseBody和@ResponseEntity就支持這樣的功能。Controller直接返回?cái)?shù)據(jù)(這里我們說(shuō)說(shuō)json數(shù)據(jù)),而不是直接指向具體的視圖。這里簡(jiǎn)單的分別舉一個(gè)上傳和下載的例子。

 1. 文件上傳

1.1 使用jquery在index.jsp實(shí)現(xiàn)ajax請(qǐng)求

<%@ page language="java" contentType="text/html; charset=UTF-8"

  pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<script type="text/javascript" src="scripts/jquery-1.9.1.min.js"></script>

<script>

  $(function(){

    $("#testJson").click(function(){

      var url = this.href;

      var args = {};

      $.post(url, args, function(data){

        for(var i=0; i<data.length; i++){

          var id = data[i].id;

          var lastName = data[i].lastName;

          alert(id + ": " + lastName);

        }

      })

      return false;

    })

  })

</script>

</head>

<body>

<a href="emps">list all employees</a><br/><br/>

 

<a href="testJson" id="testJson">testJson</a>

</body>

</html> 

這里核心的就是用jquery寫的ajax請(qǐng)求

請(qǐng)求的url就是定義的href;

data為請(qǐng)求響應(yīng)后返回的數(shù)據(jù);

正常情況下,我們應(yīng)該請(qǐng)求到所有員工的信息,并且通過(guò)這里的遍歷得到每一個(gè)員工的所有信息如id、lastName等

1.2. 這里我們需要引入三個(gè)jar包

  1. jackson-annotation-2.1.5.jar
  2. jackso-core-2.1.5.jar
  3. jackso-databind-2.1.5.jar

這三個(gè)主要是用于后面在返回?cái)?shù)據(jù)的轉(zhuǎn)換中用到的。

 1.3. 在handler SpringMVCTest中添加接口

@ResponseBody

@RequestMapping("testJson")

public Collection<Employee> testJson(){

  return employeeDao.getAll();

} 

這里我的個(gè)人理解,就是將通過(guò)employeeDao查詢到的所有的員工信息,作為響應(yīng)返回給接口,并最終通過(guò)一系列處理得到一個(gè)json的數(shù)據(jù)形式,然后在前臺(tái)頁(yè)面中遍歷解析。而完成這一切就是歸功于注解@ResponseBody。

具體來(lái)說(shuō),是有內(nèi)部的一些converter來(lái)做這些轉(zhuǎn)換的,在接口方法中打斷點(diǎn),進(jìn)入調(diào)試

選擇DispatcherServlet,找到this->handleradapters->elementData,在這個(gè)數(shù)組中找到RequestMappingHandlerAdapter,點(diǎn)進(jìn)去找到messageConverters,便可以看到總共有7個(gè)converters

這里第7個(gè)MappingJackson2HttpMessageConverter就是我們添加了以上三個(gè)jar包后才加載進(jìn)來(lái)的converter。可以看出,這里有足夠過(guò)對(duì)于不同數(shù)據(jù)類型處理的轉(zhuǎn)換器。

  1.4 在index.jsp中添加鏈接

<form action="testFileUpload" method="POST" enctype="multipart/form-data">

  File: <input type="file" name="file"/>

  Desc: <input type="text" name="desc"/>

  <input type="submit" value="Submit"/>

</form><br/> 

最終的上傳結(jié)果如下

2. 文件下載

2.1 準(zhǔn)備下載源

在WebContent下新建files目錄,放入aaa.txt,作為下載源 

2.2 在index.jsp添加超鏈接作為下載入口

<a href="testResponseEntity" id="testJson">testResponseEntity</a><br/> 

2.3 在handler SpringMVCTest中添加接口

@RequestMapping("testResponseEntity")

public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException{

  byte[] body = null;

  ServletContext servletContext = session.getServletContext();

  InputStream in = servletContext.getResourceAsStream("/files/aaa.txt");

  body = new byte[in.available()];

  in.read(body);

     

  HttpHeaders headers = new HttpHeaders();

  headers.add("Content-Disposition", "attachment;filename=aaa.txt");

  HttpStatus statusCode = HttpStatus.OK;

  ResponseEntity<byte[]> response = new ResponseEntity<>(body, headers, statusCode);

  return response;

} 

啟動(dòng)tomcat,我們可以看到aaa.txt真的可以下載啦~~~

好了,到此為止,我們都干了啥

1. 支持國(guó)際化

2. 文件上傳

3. 文件下載

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java 堆內(nèi)存溢出原因分析

    Java 堆內(nèi)存溢出原因分析

    這篇文章主要介紹了Java 堆內(nèi)存溢出原因分析,任何使用過(guò)基于 Java 的企業(yè)級(jí)后端應(yīng)用的軟件開(kāi)發(fā)者都會(huì)遇到過(guò)這種報(bào)錯(cuò),java.lang.OutOfMemoryError:Java heap space。,需要的朋友可以參考下
    2019-06-06
  • java 多線程死鎖詳解及簡(jiǎn)單實(shí)例

    java 多線程死鎖詳解及簡(jiǎn)單實(shí)例

    這篇文章主要介紹了java 多線程死鎖詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • 詳解Java中如何定義和訪問(wèn)靜態(tài)字段和方法

    詳解Java中如何定義和訪問(wèn)靜態(tài)字段和方法

    在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,我們通常使用類來(lái)創(chuàng)建對(duì)象,類中有許多成員變量和方法,它們是直接屬于對(duì)象實(shí)例的,與之對(duì)應(yīng)的還有一類成員,那就是靜態(tài)成員,本文就來(lái)和大家聊聊Java是如何定義訪問(wèn)靜態(tài)成員的吧
    2023-05-05
  • 詳解Java中Period類的使用方法

    詳解Java中Period類的使用方法

    Period類通過(guò)年、月、日相結(jié)合來(lái)描述一個(gè)時(shí)間量,最高精度是天。本文將通過(guò)示例詳細(xì)為大家講講Period類的使用,需要的可以參考一下
    2022-05-05
  • SpringBoot + openFeign實(shí)現(xiàn)遠(yuǎn)程接口調(diào)用的過(guò)程

    SpringBoot + openFeign實(shí)現(xiàn)遠(yuǎn)程接口調(diào)用的過(guò)程

    現(xiàn)在的微服務(wù)項(xiàng)目不少都使用的是springboot+spring cloud構(gòu)建的項(xiàng)目,微服務(wù)之間的調(diào)用都離不開(kāi)feign來(lái)進(jìn)行遠(yuǎn)程調(diào)用,這篇文章主要介紹了SpringBoot + openFeign實(shí)現(xiàn)遠(yuǎn)程接口調(diào)用,需要的朋友可以參考下
    2022-11-11
  • spring?boot?使用?@Scheduled?注解和?TaskScheduler?接口實(shí)現(xiàn)定時(shí)任務(wù)

    spring?boot?使用?@Scheduled?注解和?TaskScheduler?接口實(shí)現(xiàn)定時(shí)任務(wù)

    這篇文章主要介紹了spring?boot?使用?@Scheduled?注解和?TaskScheduler?接口實(shí)現(xiàn)定時(shí)任務(wù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • springboot配置mysql數(shù)據(jù)庫(kù)spring.datasource.url報(bào)錯(cuò)的解決

    springboot配置mysql數(shù)據(jù)庫(kù)spring.datasource.url報(bào)錯(cuò)的解決

    這篇文章主要介紹了springboot配置mysql數(shù)據(jù)庫(kù)spring.datasource.url報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 初識(shí)Spring Boot框架之Spring Boot的自動(dòng)配置

    初識(shí)Spring Boot框架之Spring Boot的自動(dòng)配置

    本篇文章主要介紹了初識(shí)Spring Boot框架之Spring Boot的自動(dòng)配置,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-04-04
  • Java編程技巧:if-else優(yōu)化實(shí)踐總結(jié)歸納

    Java編程技巧:if-else優(yōu)化實(shí)踐總結(jié)歸納

    這篇文章主要介紹了Java中避免過(guò)多if-else的幾種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2021-06-06
  • Java對(duì)文件的隨機(jī)讀寫以及壓縮處理操作

    Java對(duì)文件的隨機(jī)讀寫以及壓縮處理操作

    這篇文章主要介紹了Java對(duì)文件的隨機(jī)讀寫以及壓縮處理操作,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10

最新評(píng)論