国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

springMVC源碼分析--國際化實現(xiàn)Session和Cookie(二)

2019-11-06 06:18:53
字體:
供稿:網(wǎng)友

上一篇博客 sPRingMVC源碼分析--國際化LocaleResolver(一)中我們介紹了springMVC提供的國際化的解決方案,接下來我們根據(jù)springMVC提供的解決方案來簡單的實現(xiàn)一個多語言的支持。

一、基于session的國際化實現(xiàn)

基于Session的國際化實現(xiàn)其實說來也簡單,就是在Session中保存語言信息Locale,這樣springMVC會從我們提供的多語言配置文件中讀取相關(guān)語言的信息。

(1)首先我們需要配置springMVC的多語言配置,因為我們打算使用Session來實現(xiàn),所有對于localeResolver我們要配置其實現(xiàn)類SessionLocaleResolver,在springMVC的配置文件中添加如下配置:

[html] view plain copy print?在CODE上查看代碼片<span style="font-size:14px;"><bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/></span>  

(2)這里我們提供了一個多語言攔截器LanguageInterceptor,通過這個攔截器設(shè)置多語言信息,其實主要的代碼就是request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale),這樣springMVC會根據(jù)Locale的信息來獲得多語言。

[java] view%20plain copy print?<span style="font-size:14px;"> public class LanguageInterceptor implements HandlerInterceptor{        @Override      public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)              throws Exception {          String language = request.getParameter("language");          if (language != null&&language.equals("zh")) {              Locale locale = new Locale("zh", "CN");              request.getSession()                      .setAttribute(                              SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,                              locale);              request.setAttribute("language", language);          } else if (language != null&&language.equals("en")) {              Locale locale = new Locale("en", "US");              request.getSession()                      .setAttribute(                              SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,                              locale);              request.setAttribute("language", language);          } else {              request.getSession().setAttribute(                      SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,                      LocaleContextHolder.getLocale());              language = LocaleContextHolder.getLocale().getLanguage();              request.setAttribute("language", language);          }          return true;      }      @Override      public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,              ModelAndView modelAndView) throws Exception {      }      @Override      public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)              throws Exception {      }    }</span>  

在springMVC的配置文件中配置攔截器

[html] view%20plain copy print?<span style="font-size:14px;"><mvc:interceptors>      <!-- 國際化操作攔截器 如果采用基于(請求/Session/Cookie)則必需配置 -->      <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>      <bean class="com.tianjunwei.interceptor.LanguageInterceptor"></bean>  </mvc:interceptors></span>  在工程中添加多語言配置文件,在src/main/resources目錄下新建messages目錄,分別添加中英文的多語言配置文件message_en_US.properties和message_zh_CN.properties,文件中以key%20=%20value的形式保存多語言信息

運行結(jié)果圖:

二、基于Cookie的國際化實現(xiàn)

與上面類似,我們首先創(chuàng)建一個攔截器用來將多語言信息寫到Cookie中,這樣就可以通過cookie來切換多語言了。

[java] view plain copy print?在CODE上查看代碼片<span style="font-size:14px;"> public class LanguageCookieInterceptor implements HandlerInterceptor{        @Override      public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)              throws Exception {          String language = request.getParameter("language");          if (language != null&&language.equals("zh")) {              Locale locale = new Locale("zh", "CN");              (new CookieLocaleResolver()).setLocale (request, response, locale);              request.setAttribute("language", language);          } else if (language != null&&language.equals("en")) {              Locale locale = new Locale("en", "US");              (new CookieLocaleResolver()).setLocale (request, response, locale);              request.setAttribute("language", language);          } else {              (new CookieLocaleResolver()).setLocale (request, response,                      LocaleContextHolder.getLocale());              language = LocaleContextHolder.getLocale().getLanguage();              request.setAttribute("language", language);          }          return true;      }        @Override      public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,              ModelAndView modelAndView) throws Exception {                }        @Override      public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)              throws Exception {                }    }</span>  springMVC的配置文件如下:

[html] view%20plain copy print?派生到我的代碼片<span style="font-size:14px;"><mvc:interceptors>      <!-- 國際化操作攔截器 如果采用基于(請求/Session/Cookie)則必需配置 -->      <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>      <!-- <bean class="com.tianjunwei.interceptor.LanguageInterceptor"></bean> -->      <bean class="com.tianjunwei.interceptor.LanguageCookieInterceptor"></bean>  </mvc:interceptors>  <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"/></span>  這樣我們也可以實現(xiàn)通過Session實現(xiàn)的效果。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 台南市| 保德县| 普定县| 嘉义市| 江阴市| 宁德市| 兴海县| 兴国县| 鱼台县| 澎湖县| 钦州市| 蕉岭县| 罗田县| 高要市| 云和县| 柞水县| 荆州市| 达孜县| 青龙| 富裕县| 枣庄市| 安溪县| 禹城市| 通渭县| 青海省| 松江区| 辉南县| 本溪市| 朝阳市| 宁夏| 崇明县| 庆城县| 台前县| 集安市| 龙泉市| 郓城县| 油尖旺区| 乐清市| 宁武县| 怀安县| 乃东县|