美文网首页
spring异常处理

spring异常处理

作者: itachi | 来源:发表于2017-02-06 17:34 被阅读66次

    中文乱码解决方案

    spring提供了一个CharacterEncodingFilter过滤器,可用于解决乱码问题,在使用时,需要注意下面几点问题:
    1、表单数据以post方式提交
    2、在web.xml中配置CharacterEncodingFilter过滤器
    3、页面编码和过滤器指定编码要保持一致

      <!--配置过滤,解决中文乱码问题-->
    
        <filter>
            <filter-name>encodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>encodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    

    验证登陆实例

    在登陆后才可以查看某些页面,否则会被转到登陆页面要求登陆

    先定义一个异常:该异常继承RunTimeException

    public class ApplicationException extends RuntimeException {
        public ApplicationException() {
            super();
        }
    
        public ApplicationException(String message) {
            super(message);
        }
    
        public ApplicationException(String message, Throwable cause) {
            super(message, cause);
        }
    }
    

    在服务层定义一个获得用户名的login方法:

        public Admin login(String adminCode,String password) {
            Admin admin=null;
    
                admin=adminDao.findByAdminCode(adminCode);
                if(admin==null){
                    throw new ApplicationException("账户不存在");
                }
                if(!admin.getPassword().equals(password)){
                    throw new ApplicationException("密码错误");
                }
               /* 异常的分类:系统异常(数据库,服务暂停,网络中断)发生之后,程序无法恢复,只能通知用户稍后重试
                        应用异常:用户的问题产生异常(输入错误的账号和密码,应提示进行正确的操作)*/
    
            return admin;
        }
    

    在控制层做登陆控制

    @RequestMapping("/login.do")
        public ModelAndView checkLogin(String adminCode, String password, HttpSession session){
    //        try {
                Admin admin=loginService.login(adminCode,password);
                session.setAttribute("admin",admin);
    /*        } catch (Exception e) {
                e.printStackTrace();
                if(e instanceof ApplicationException){
                    //应用异常,提示用户
                    Map<String,String> map=new HashMap<String,String>();
                    //用户名回显
                    map.put("adminCode",adminCode);
                    map.put("message",e.getMessage());
                    return new ModelAndView("login/login",map);
                }
                //系统异常,提示用户稍后尝试
                return new ModelAndView("error");
            }
            */
            //没有异常,重定向至首页
            return new ModelAndView(new RedirectView("toIndex.do"));
        }
    

    若spring的配置文件中有对于异常的统一配置处理可以进行如下处理:

        //转发至首页
        @RequestMapping("toIndex.do")
        public String toIndex(){
            return "login/index";
        }
    
        @ExceptionHandler
        public String execute (HttpServletRequest req,Exception e) throws Exception {
            //应用异常,提示用户
            if(e instanceof ApplicationException){
                //回显
                req.setAttribute("adminCode",req.getParameter("adminCode"));
                req.setAttribute("message",e.getMessage());
                return "/login/login";
            }else{
    //            系统异常交给Spring
                throw e;
            }
        }
    

    相关文章

      网友评论

          本文标题:spring异常处理

          本文链接:https://www.haomeiwen.com/subject/lpawbttx.html