目录
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基本使用到此结束^_^