springmvc学习(五)
这次主要是记录一下 springmvc 关于异常处理 和 拦截的回顾
- 关于springmvc 异常处理:springmvc 提供了 HandlerExceptionResolver 异常处理解析接口 实现该接口
@RequestMapping(value = "exceptionMethod")
public void exceptionMethod() throws MyExcption {
try {
System.out.println(1 / 0);
} catch (Exception e) {
throw new MyExcption("除数不能为零");
}
}public class MyHandlerException implements HandlerExceptionResolver { @Override
public ModelAndView resolveException(HttpServletRequest req, HttpServletResponse res, Object parm, Exception ext) {
String msg = "访问异常";
ModelAndView mv = new ModelAndView();
mv.addObject("result", msg);
mv.setViewName("hello");
return mv;
}所有的异常 都会经过该异常处理解析,不过不管是何种异常 返回的都是 同一样的页面 提示 ,为了有更好的 错误信息反馈 我们可以修改一下 创建一个自定义的异常:
public class MyHandlerException implements HandlerExceptionResolver { @Override
public ModelAndView resolveException(HttpServletRequest req, HttpServletResponse res, Object parm, Exception ext) {
String msg = "访问异常";
if (ext instanceof MyExcption) {
msg = ((MyExcption) ext).getMsg();
}
ModelAndView mv = new ModelAndView();
mv.addObject("result", msg);
mv.setViewName("exception");
return mv;
}public class MyExcption extends Exception {
public String msg; public String getMsg() {
return msg;
} public void setMsg(String msg) {
this.msg = msg;
} public MyExcption() {
} public MyExcption(String msg) {
this.msg = msg;
}
}这样 就会根据自定义提示的异常 返回相应的 错误页面提示
- 拦截器:springmvc 同样也提供了一个 处理请求拦截的处理器接口HandlerInterceptor 实现该接口:
public class MyInterceptor implements HandlerInterceptor { @Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
} @Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception { } @Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
return true;
}先经过 preHandle 方法 过滤 请求,比如权限验证 是否登录,返回true的时候 表示 放行,在返回modeAndView的时候 执行 postHadnle 最后在执行afterComoletion方法 在springmvc.xml中配置拦截器
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<mvc:exclude-mapping path="/login/**" />
<bean class="com.springmvc.interceptor.MyInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>exclude-mapping 表示 不需要拦截的路径(有兴趣的可以去看一下 多个拦截器的时候 请求是如何执行的 以及springmVC Restful )
springmvc 面试的时候 遇到过:谈一下 springmvc 如何执行一个请求的,记住springmvc 的 三大组件(处理器映射器,处理器适配器,视图解析器) 自然而然的就清楚了 springmvc 的执行流程 理解记忆总比 死记硬背的好
springmvc学习(五)的更多相关文章
- (转)SpringMVC学习(五)——SpringMVC的参数绑定
http://blog.csdn.net/yerenyuan_pku/article/details/72511611 SpringMVC中的参数绑定还是蛮重要的,所以单独开一篇文章来讲解.本文所有案 ...
- springMVC 学习 五 参数传递(包括restful风格)
(一)SpringMVC Controller接受参数的方式 (1) 前端传递的参数,在springMVC的controller中使用基本数据类型或者String 类型进行接受 在前端有一个form表 ...
- springMVC学习五(转发和乱码)
摘录http://www.cnblogs.com/xdp-gacl/p/3798347.html http://www.cnblogs.com/xdp-gacl/p/3798347.html 四个很重 ...
- (转)SpringMVC学习(六)——SpringMVC高级参数绑定与@RequestMapping注解
http://blog.csdn.net/yerenyuan_pku/article/details/72511749 高级参数绑定 现在进入SpringMVC高级参数绑定的学习,本文所有案例代码的编 ...
- SpringMvc学习心得(五)控制器产生与构建
SpringMvc学习心得(五)控制器产生与构建 标签: springspring mvc框架 2016-03-22 15:29 140人阅读 评论(0) 收藏 举报 分类: Spring(4) ...
- 史上最全的SpringMVC学习笔记
SpringMVC学习笔记---- 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于Spring ...
- SpringMVC学习笔记之二(SpringMVC高级参数绑定)
一.高级参数绑定 1.1 绑定数组 需求:在商品列表页面选中多个商品,然后删除. 需求分析:功能要求商品列表页面中的每个商品前有一个checkbok,选中多个商品后点击删除按钮把商品id传递给Cont ...
- springmvc学习总结(二) -- maven+springmvc+spring+mybatis+mysql详细搭建整合过程讲解
@_@ 写在最前 之前分享过下面这几篇: mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(上)(附demo和搭建过程遇到的问题解决方法) myba ...
- (转)SpringMVC学习(一)——SpringMVC介绍与入门
http://blog.csdn.net/yerenyuan_pku/article/details/72231272 SpringMVC介绍 SpringMVC是什么? SpringMVC和Stru ...
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
SpringMVC学习系列-后记 解决GET请求时中文乱码的问题 之前项目中的web.xml中的编码设置: <filter> <filter-name>CharacterEnc ...
随机推荐
- C++学习(一)之Visual Studio安装以及首次使用
一.安装Visual Studio 首先下载Visual Studio 链接: http://pan.baidu.com/s/1pLhJt0Z 密码:uqyc 将.ios文件解压得到以下文件: 点击v ...
- dijksta 模板
#include<bits/stdc++.h> using namespace std; #define INF 0x3f3f3f3f ]; ]; ][]; void dijkstra(i ...
- LeetCode - Find Duplicate Subtrees
Given a binary tree, return all duplicate subtrees. For each kind of duplicate subtrees, you only ne ...
- 【BZOJ4720】【NOIP2016】换教室
我当年真是naive…… 原题: 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节 课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节 ...
- vue全家桶+Koa2开发笔记(2)--koa2
1. 安装koa脚手架的时候 执行命令 koa2 -e koa-learn 注意要使用-e的方式,才会生成ejs的模板 2. async await的使用方法:存在的意义:提高promise的可读性 ...
- 文件I/0缓冲
设置stdio流缓冲模式 #include<stdio.h> int setvbuf(FILE *stream,char *buf,int mode,size_t size) int se ...
- Generic Realtime Intermediary Protocol
转自:https://pushpin.org/docs/protocols/grip/ Introduction The Generic Realtime Intermediary Protocol ...
- MySQL中or与in
and和or mysql允许多个where子句,用and和or可以使用多个子句.and比or有更高的优先级.任何时候使用and和or都应使用圆括号操作符来明确的分组操作. in 圆括号在where子句 ...
- java 打印图形
打印菱形 package study.stage2; /** * Created by Sandy.Liu on 2017/7/27. */public class Diamond { public ...
- MySQL事务描述
并发事务处理引起的数据问题 更新丢失(Lost Update):当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,由于每个事务都不知道其他事务的存在,就会发生丢失更新问题--最后的更新覆盖了 ...