國際化與檔案上傳
-
國際化(internationalization)
簡稱i18n,是一種讓軟體在開發階段就支援多種語言的技術 -
java.util.Locale
語言程式碼_國家程式碼
注:國家程式碼可省略
zh_CN -
ResourceBundle載入資原始檔(中英雙語)
i18n_zh_CN.properties
i18n_en_US.properties//test是屬性檔案的名字,不寫語言程式碼、國家程式碼,字尾名properties
String path = “i18n”;
ResourceBundle bundle = ResourceBundle.getBundle(path, Locale.CHINA);
String yhzhLabel = bundle.getString(“yhzh.label”); -
複合訊息
message=hello {0}, my name is {1}
java.text.MessageFormat.format(message, “zs”, “ls”);String message = bundle.getString(“message”);
-
springmvc實現動態國際化(中英雙語)
5.1 提供中英雙語資原始檔
例如:
i18n_en_US.properties
i18n_zh_CN.properties
5.2 通過ResourceBundleMessageSource載入資原始檔(basenames屬性)
i18n
注1:必須叫messageSource、必須叫messageSource、必須叫messageSource
注2:可在開發階段使用ReloadableResourceBundleMessageSource它能自動重新載入資原始檔
5.3 指定springmvc的語言區域解析器,由它來確定使用哪個語言
5.3.1 配置語言區域解析器
注1:必須叫localeResolver、必須叫localeResolver、必須叫localeResolver
5.3.2 語言解析器的型別
AcceptHeaderLocaleResolver/SessionLocleResolver/CookieLocaleResolver
各解析器的相關說明
AcceptHeaderLocaleResolver(基於作業系統)
Spring採用的預設區域解析器是AcceptHeaderLocaleResolver。它通過檢驗HTTP請求的accept-language頭部來解析區域。
這個頭部是由使用者的web瀏覽器根據底層作業系統的區域設定進行設定。請注意,這個區域解析器無法改變使用者的區域,
因為它無法修改使用者作業系統的區域設定
SessionLocaleResolver(基於會話)
它通過檢驗使用者會話中預置的屬性來解析區域。如果該會話屬性不存在,它會根據accept-language HTTP頭部確定預設區域
CookieLocaleResolver(基於Cookie)
這個區域解析器所採用的Cookie可以通過cookieName和cookieMaxAge屬性進行定製。
defaultLocale:預設的語言區域
cookieName:設定cookieName名稱
cookieMaxAge:設定cookieName有效時間,單位秒
cookiePath:設定cookie可見的地址,預設是“/”即對網站所有地址都是可見的,如果設為其它地址,則只有該地址或其後的地址才可見
5.4 配置國際化操作攔截器,如果採用基於(Session/Cookie)則必需配置
mvc:interceptors
</mvc:interceptors>
5.5 通過標籤輸出內容,而非直接輸出內容
5.5 springmvc的message標籤輸出
<%@ taglib prefix=“t” uri=“http://www.springframework.org/tags” %>
<t:message code=“title”/>
5.5 jstl的fmt標籤庫的標籤輸出
<%@ taglib prefix=“fmt” uri=“
<t:message code=“title”/>
注1:為什麼在index.jsp使用<t:message code="user_name"/>會報錯
原因是在web.xml中配置的DispatcherServlet的url-pattern為“/”,不會匹配訪問.jsp的url,
所以直接訪問首頁並不會經過DispatcherServlet,導致無法讀取到資原始檔
解決方案:首頁轉發到/WEB-INF/jsp/login.jsp即可
注2:切換語言的關鍵程式碼(系統必須使用SessionLocaleResolver解析器)
session.setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,Locale.CHINA)
5.6 後臺程式碼獲取國際化資訊
5.6.2 後臺通過springmvc的訊息機制顯示訊息
5.6.2 通過RequestContext獲得國際化的訊息
RequestContext requestContext = new RequestContext(request);
String errorMsg = requestContext.getMessage(“login.error.label”);
System.out.println(“errorMsg:” + errorMsg);
-
springmvc的檔案上傳
struts
1、二進位制儲存到資料庫
2、儲存到硬碟 d: /home/…
3、儲存到伺服器所在路徑
真實路徑與虛擬路徑
真是路徑:存在於你自己的電腦中
虛擬路徑:在開發者電腦是找不到File file String fileFileName String fileContentType 通過虛擬路徑獲取到真實伺服器路徑 request.getServletContext().getrealPath(虛擬路徑); fileutil.copyfile(file,new file(真實路徑));
6.1 新增檔案上傳相關依賴
commons-fileupload
commons-fileupload
1.3.3
6.2 配置檔案上傳解析器(CommonsMultipartResolver)
6.3 表單提交方式為method=“post” enctype=“multipart/form-data”
6.4 檔案項用spring提供的MultipartFile進行接收
6.5 IO流讀寫檔案
6.6 儲存檔案上傳記錄
注:springmvc檔案上傳關鍵程式碼
File targetFile = ....;
MultipartFile mf = ....;
String fileName = mf.getOriginalFilename();
mf.transferTo(targetFile);