zoukankan      html  css  js  c++  java
  • Spring MVC基础知识整理➣国际化和异常处理

    概述

       Spring框架为WEB项目提供了国际化以及异常处理机制。所谓的国际化也就是不同国籍,显示不同国籍的语言与符号。异常处理,也就是能够捕获WEB项目下的所有异常信息,并能处理记录这些异常信息机制。

    国际化

      Spring对国际化的语言采用配置的方式存储到配置文件中,在springservletconfig.xml文件,添加下面语句:

    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <!-- 国际化信息所在的文件名 -->                     
        <property name="basename" value="messages" />   
        <!-- 如果在国际化资源文件中找不到对应代码的信息,就用这个代码作为名称  -->               
        <property name="useCodeAsDefaultMessage" value="true" />           
    </bean>

      Spring MVC国际化的方式,可以基于Session,也可以基于Cookie,这里主要基于Session完成国际化,在springservletconfig.xml添加下面拦截器配置

      <mvc:interceptors>  
            <!-- 国际化操作拦截器 如果采用基于(请求/Session/Cookie)则必需配置 --> 
            <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />  
        </mvc:interceptors>  
        <!-- 基于session国际化-->
        <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />

        <!-- 基于Cookie国际化
        <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" />-->

      在当前目录下添加如下文件,messages.properties、messages_zh_CN.properties、messages_en_US.properties三个文件,其中messages.properties、messages_zh_CN.properties;

    messages_en_US.properties:

    umoney=money
    udate=date

    messages_zh_CN.properties:

    umoney=余额
    udate=日期

    Controller代码如下:

        @RequestMapping("/cuser")
        public String ShowUser(HttpServletRequest request, HttpServletResponse response,Model model,
                  @RequestParam(value="langType", defaultValue="zh") String langType) { UserInfo Usermodel=new UserInfo(); SessionLang(request, langType); //CookieLang(request,response,langType); RequestContext Rq=new RequestContext(request); model.addAttribute("udate",Rq.getMessage("udate")); model.addAttribute("umoney",Rq.getMessage("umoney")); return "Fuser/cuser"; } /** * @Title: SessionLang * @Description: 基于session的国际化 * @param @param request * @param @param langType 设定文件 * @return void 返回类型 * @throws */ public void SessionLang(HttpServletRequest request,String langType) { if(langType.equals("zh")){ Locale locale = new Locale("zh", "CN"); request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale); } else if(langType.equals("en")){ Locale locale = new Locale("en", "US"); request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale); } else request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,LocaleContextHolder.getLocale()); } /** * @Title: CookieLang * @Description: 基于Cookie的国际化 * @param @param request * @param @param response * @param @param langType 设定文件 * @return void 返回类型 * @throws */ public void CookieLang(HttpServletRequest request,HttpServletResponse response,String langType) { Locale locale =null; if(langType.equals("zh")){ locale = new Locale("zh", "CN"); } else if(langType.equals("en")){ locale = new Locale("en", "US"); } else { locale=LocaleContextHolder.getLocale(); } (new CookieLocaleResolver()).setLocale (request, response, locale); }

    前台JSP页面

    <%@taglib prefix="spring" uri="http://www.springframework.org/tags" %>
    
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <a href="cuser?langType=zh">中文</a> | <a href="cuser?langType=en">英文</a><br/>
    
        下面展示的是后台获取的国际化信息:<br/>
        ${umoney}<br/>
        ${udate}<br/>    
    </body>
    </html>

    异常处理

      MVC Spring异常处理的方式有2种,一种是写个Class继承HandlerExceptionResolver,在配置文件中,添加Bean配置,另外一种方式,可以通过定义基类控制器,编写异常处理的公用方法,子类继承基类Controller即可。代码配置如下

    编写基类Controller:

    package justin.com.controllers;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.springframework.web.bind.annotation.ExceptionHandler;
    
    public abstract  class BaseController {
    
        @ExceptionHandler
        public String exception(HttpServletRequest request,Exception ex)
        {
            request.setAttribute("exceptionMessage", ex.getMessage());
            
            return "error";
        }
    }

    子类继承BaseController

    package justin.com.controllers;
    import javax.servlet.http.HttpServletRequest;
    import org.apache.catalina.connector.Request;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.servlet.ModelAndView;
    
    
    @Controller
    @RequestMapping("/helloworld")
    public class HelloWorldController extends BaseController {
    
        @RequestMapping(value={"/*","/say"},method=RequestMethod.GET)
        public ModelAndView China() throws SQLException
        {
            
            ModelAndView modelAndView = new ModelAndView();  
            modelAndView.addObject("message", "Hello World!");  
            modelAndView.setViewName("HelloWorld/CIndex");  
            int Result=10/0;
            return modelAndView;
        }
    }

    当打开该页面,页面自动跳转到错误Controller中,完成数据的异常捕获与显示。

      

  • 相关阅读:
    CLR Via CSharp读书笔记(6):类型和成员基础
    Maven 环境快速搭建二(eclipse+maven2+jetty)
    Struts2架构图
    Struts2 不依赖Spring 的测试方式
    最全的Eclipse使用快捷键
    ts2+Spring的UnitTest编写(使用StrutsTestCase的子类StrutsSpringTestCase)
    分析Vector、ArrayList、Hashtable、HashMap数据结分享一下
    Struts2与Velocity模板
    maven环境快速搭建
    转】Java集合框架学习笔记
  • 原文地址:https://www.cnblogs.com/xibei666/p/6653944.html
Copyright © 2011-2022 走看看