1. 程式人生 > >國際化與檔案上傳

國際化與檔案上傳

  1. 國際化(internationalization)
    簡稱i18n,是一種讓軟體在開發階段就支援多種語言的技術

  2. java.util.Locale
    語言程式碼_國家程式碼
    注:國家程式碼可省略
    zh_CN

  3. 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”);

    src/main/resources *.properties *.xml
  4. 複合訊息
    message=hello {0}, my name is {1}
    java.text.MessageFormat.format(message, “zs”, “ls”);

    String message = bundle.getString(“message”);

  5. 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=“

http://java.sun.com/jsp/jstl/fmt” %>
<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);

  1. 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);