SSM第四天

  今天学习内容:

    1.异常处理器

      配置步骤:

      a)定义异常

      b)定义异常处理器,实现HandExceptionResolver接口,返回ModelAndView

      判断异常类型:

    if(ex instanceof CustomException){
            customException = (CustomException)ex;
        }else{
            //如果抛出的不是系统自定义异常则重新构造一个未知错误异常。
            customException = new CustomException("未知错误,请与系统管理 员联系!");
        }
        
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("message", customException.getMessage());
        modelAndView.setViewName("error");

      c)SpringMVC.xml配置全局异常处理器

<!-- 异常处理器 -->
    <bean id="handlerExceptionResolver" class="cn.itcast.ssm.controller.exceptionResolver.CustomExceptionResolver"/>

 

        2.拦截器

       配置步骤:

        a)定义拦截器,实现HandelerInterceptor接口,实现方法 (pre.post.after..)

        以下是用户登录判断

if(request.getRequestURI().indexOf("login.action")>=0){
            return true;
        }
        HttpSession session = request.getSession();
        //如果用户已登录也放行
        if(session.getAttribute("user")!=null){
            return true;
        }
        //用户没有登录挑战到登录页面
        request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
        
        return false;

        b)配置全局拦截器

 

<!--拦截器 -->
<mvc:interceptors>
    <!--多个拦截器,顺序执行 -->
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <bean class="cn.itcast.springmvc.filter.HandlerInterceptor1"></bean>
    </mvc:interceptor>
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <bean class="cn.itcast.springmvc.filter.HandlerInterceptor2"></bean>
    </mvc:interceptor>
</mvc:interceptors>

 

      问题与总结:

      1.底层mapper方法传入的参数有多个时需要用包装对象封装

        例如今天,登陆username和password需要传入mapper用UserForm封装

       在Controller中得到的是username和password,那么就要创建封装对象UserForm,再传入Service实现类

      2.依旧是昨天的问题,redirect和forward,里面的值是/xx/xx.action,即映射地址

      3.el表达式 内容全在{}内,这块掌握不熟练,写的是{username}!=null,导致无法显示登陆信息

      正确应为:{username!=null}

      4.因为教材的建表有缺陷不适合登陆系统,有重复的username,所以用到查询条件后加limit 1

      表示只得到1个user,可以解决返回多个对象list.limit前面不接where

      5.还有提交username乱码问题,提交method改为post。因为没仔细看get,post。这方面需要了解。

      6.还有一个拦截器会拦截登陆跳转页面的问题今天没有解决,以后实战用拦截器做登陆的时候高度重视

      

        

 

 

    

 

posted @ 2017-08-08 18:46  evan333  阅读(100)  评论(0)    收藏  举报