SpringMVC---全局异常与拦截器

目录

1.定义全局异常处理

        1.1定义全局异常类

 2.拦截器

        2.1 如何定义拦截器 

                2.1.1 自定义一个拦截器类

                2.1.2 在配置文件中声明拦截器

                2.1.3 登录页面

                2.1.4 控制层方法


1.定义全局异常处理

一旦后台出现异常时,网页会显示很丑的异常信息。 为了可以显示好看,我们定义一个统一的异常处理类。

异常的结构:

​ Throwable: 异常的根类。

​         Error: 错误。这个错误程序员无法解决。

​         Exception:异常。

​                 编译异常:

​                 运行时异常: RuntimeException: 只会在运行的时候出现。

        1.1定义全局异常类

                异常类里面可以有很多方法分别拦截不同的错误,但不能出现拦截重复错误的情况,否则系统将会不知道按照哪一个方法执行导致出错。   下面代码是捕捉所有Exception异常

@ControllerAdvice
public class MyHandler {

    @ExceptionHandler(Exception.class) 
    public String handlerException(){
        return "error";
    }
}

        错误页面:

<body>
这是一个错误页面...
</body>

        在控制层加入一个错误进行测试:        

 结果:

       自动跳转到错误页面 

 2.拦截器

        在javaweb的学习中,我们学习到了一个过滤器

        过滤器:拦截器所有的资源.[jsp,servlet,css,js,img]

        拦截器: 只会拦截springmvc的控制层接口路径。

       流程:

        2.1 如何定义拦截器 

                例子:登录拦截器

                2.1.1 自定义一个拦截器类

public class MyInterceptor implements HandlerInterceptor {
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        Object uname = session.getAttribute("uname");
        if(uname != null){
            return true;
        }else {
            response.sendRedirect(request.getContextPath()+"/login.jsp");
            return false;
        }
    }
}

                2.1.2 在配置文件中声明拦截器

<!--声明拦截器-->
    <!-- <mvc:interceptors>
         <mvc:interceptor>
             <mvc:mapping path="拦截器的路径"/>
             <mvc:exclude-mapping path="不拦截的路径"/>
             <bean class="自定义拦截器的全路径"/>
         </mvc:interceptor>
     </mvc:interceptors>-->

    <mvc:interceptors>
        <mvc:interceptor>
            <!--/*: 一层路径 /hello
                /**: 多层路径
            -->
            <mvc:mapping path="/**"/>
            <mvc:exclude-mapping path="/login/login"/>
            //访问 my/hello01 可以不被拦截器拦截
            <mvc:exclude-mapping path="/my/hello01"/>
            <bean class="com.cys.Interceptor.MyInterceptor"/>
        </mvc:interceptor>
</mvc:interceptors>

                2.1.3 登录页面

<body>
<form action="login/login" method="post">
    账号:<input type="text" name="uname"><br>
    密码:<input type="password" name="upassword"><br>
    <button>提交</button>
</form>
</body>

                2.1.4 控制层方法

@Controller
@RequestMapping("/login")
public class MyController04 {
    @RequestMapping("/login")
    public String denglu(HttpSession session,String uname,String upassword){
        if("cys".equals(uname) && "123".equals(upassword)){
            session.setAttribute("uname",uname);
            return "index02";
        }else {
            return "forward:../login.jsp";//不想经过视图解析器。
        }
    }
}

测试:

 

SpringMVC基本使用到此结束^_^

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值