SpringMVC笔记(3)
一、SpringMVC 拦截器
1.1 快速入门
步骤
创建拦截器类实现HandlerInterceptor接口
public class MyInterceptor01 implements HandlerInterceptor { /**
* 在目标方法执行之前
* @param request
* @param response
* @param handler
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle..."); //true则放行
return true;
} /**
* 在目标方法执行之后,视图对象返回之前
* @param request
* @param response
* @param handler
* @param modelAndView
* @throws Exception
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle..");
} /**
* 在流程都执行完毕后执行
* @param request
* @param response
* @param handler
* @param ex
* @throws Exception
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCom...");
}
}
配置拦截器
<!-- 拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截路径-->
<mvc:mapping path="/**"/>
<!-- 拦截器的依赖注入-->
<bean class="interceptor.MyInterceptor01"></bean>
</mvc:interceptor>
</mvc:interceptors>
测试拦截器的拦截效果
preHandle...
目标函数执行。。
postHandle..
afterCom...
1.2 用户登录权限控制
步骤
编写登录验证拦截器
/**
* 登录拦截
* @author 郜宇博
*/
public class PrivilegeInterceptor implements HandlerInterceptor { @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//判断用户是否登录
// 判断session中是否存在user对象
HttpSession session = request.getSession();
//获取user对象
User user = (User) session.getAttribute("user");
//判断是否存在
if(user == null){
//无用户
//重定向到登录界面
response.sendRedirect(request.getContextPath()+"/login.jsp");
return false;
}
//放行
return true;
}
}
配置拦截器(spring-mvc.xml中)
<!-- 配置登录权限拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截目标-->
<mvc:mapping path="/**"/>
<!-- 放行目标-->
<mvc:exclude-mapping path="/user/login"/>
<bean class="springTest.interceptor.PrivilegeInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
</beans>
二、SpringMVC异常处理
2.1 异常处理的思路
系统中异常包括两类:预期异常和运行时异常****RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试等手段减少运行时异常的发生。
系统的Dao、Service、Controller出现都通过throws Exception向上抛出,最后由SpringMVC前端控制器交由异常处理器进行异常处理,如下图:

2.2 异常处理的两种方式
2.2.1简单异常处理器:
使用SpringMVC提供的SimpleMappingExceptionResolver
1. 配置异常处理器
2. 编写异常页面
<!-- 配置简单异常处理器-->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!-- 默认错误视图-->
<property name="defaultErrorView" value="error.jsp"></property>
<!-- 单独异常配置-->
<property name="exceptionMappings">
<map>
<!-- 类转换异常-->
<entry key="java.lang.ClassCastException" value="error1.jsp"></entry>
</map>
</property>
</bean>
2.2.2异常处理接口:
实现Spring的HandelerExceptionResolver
- 实现异常处理接口
public class MyExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
ModelAndView modelAndView = new ModelAndView();
//e异常是否是ClassCastException的实例
if(e instanceof ClassCastException){
//设置模型和视图
modelAndView.addObject("error","类转换异常");
}
else if (e instanceof DataAccessException){
//设置模型和视图
modelAndView.addObject("error","数据访问异常");
}
modelAndView.setViewName("error.jsp");
return modelAndView;
}
}
- 配置
<!-- 配置自定义异常-->
<bean class="springTest.ExceptionTest.MyExceptionResolver"/>
SpringMVC笔记(3)的更多相关文章
- SpringMVC笔记——SSM框架搭建简单实例
落叶枫桥 博客园 首页 新随笔 联系 订阅 管理 SpringMVC笔记——SSM框架搭建简单实例 简介 Spring+SpringMVC+MyBatis框架(SSM)是比较热门的中小型企业级项目开发 ...
- SpringMvc 笔记
整理出来是 SpringMvc 笔记 方便以后查询 框架太多了 不经常使用 忘记的可能性很大 自己整理一套笔记 一看就明白了 1 对比 原始请求响应流程 1 发送请求 --> 2 控制层 --& ...
- 初学者的springmvc笔记02
springmvc笔记 springmvc拦截器,spring类型转换,spring实现文件上传/下载 1.SpringMVC标准配置 导入jar包:core contaner 在web.xml文件中 ...
- SpringMVC笔记
Struts1是采用单例模式的,在并发访问中出来资源混乱,于是出现Struts2被设计为多例的解决并发产生的 数据混乱由于Struts2引入了值栈,拦截器,OGNL等,,,是访问速度下降在原生的JSP ...
- 框架SpringMVC笔记系列 二 传值
主题:SpringMVC(第一节中再回顾复习一次) 学习资料参考网址: 1.http://www.icoolxue.com 2.http://haohaoxuexi.iteye.com/blog/13 ...
- 框架SpringMVC笔记系列 一 基础
主题:SpringMVC 学习资料参考网址: 1.http://www.icoolxue.com 2.http://aokunsang.iteye.com/blog/1279322 1.SpringM ...
- 传智springMVC笔记
springmvc 第一天 springmvc的基础知识 课程安排: 第一天:springmvc的基础知识 什么是springmvc? springmvc框架原理(掌握) 前端控制器.处理器映射器.处 ...
- springmvc笔记(来自慕课网)
1.准备工作:springmvc相关的jar包. 2.这里我们先用eclipse来操作. 首先看一个接口编程,后面的所有知识点都是通过这个接口编程引出的. OneInterface.java pack ...
- springmvc笔记(基本配置,核心文件,路径,参数,文件上传,json整合)
首先导入jar包 大家注意一下我的springmvc,jackson,common-up的jar包版本.其他版本有可能出现不兼容. src文件: webroot目录: web.xml <?xml ...
- SpringMvc笔记-对RESTFUL风格的配置
1.@RequestMapping注解可以使用如下参数: 1,params:例如params={'username',"age!=100"}表示需要usernmame并且age 属 ...
随机推荐
- odoo14开发之脚本自动生成代码
通过解析excel,自动生成odoo代码实现 一.首先做一个字段配置的excel模板 第二步.读取excel里面的模板,并写入到txt文件里 逻辑代码: # -*- coding: utf-8 -*- ...
- mysql采坑笔记
mysqld --initialize-insecure // 初始化数据 mysql -u root -p // 登录 navicat for mysql 1251错误解决方法 ALTER USER ...
- DC-3靶机
仅供个人娱乐 靶机信息 下载地址:http://www.five86.com/downloads/DC-3.zip 一.主机扫描 arp-scan -l nmap -A -p 1-65535 -sV ...
- 零基础涂鸦智能面板SDK开发记录(一)
前言 本人基础背景:在学校学了点JS,在blbl上看过几节node.js视频,现在是一名Android开发工程师,因公司需要学习涂鸦面板SDK开发.说真的除了官方的一些文档外,我真的找不到其他的资料. ...
- 升级到Spring 5.3.x之后,GC次数急剧增加,我TM人傻了
最近我们项目升级到了 Spring Boot 2.4.6 + Spring Cloud 2020.0.x,通过我的另一系列即可看出:Spring Cloud 升级之路.但是升级后,我们发现 Young ...
- C++11 noexcept 关键字用法学习
最近学习和写了一个 mint 的板子 ,其中用到了 noexcept 关键字,对这个关键字不太熟悉,便学习一下刘毅学长的文章. C++98 中的异常规范(Exception Specification ...
- Golang中如何正确的使用sarama包操作Kafka?
Golang中如何正确的使用sarama包操作Kafka? 一.背景 在一些业务系统中,模块之间通过引入Kafka解藕,拿IM举例(图来源): 用户A给B发送消息,msg_gateway收到消息后,投 ...
- 花1个月时间准备 面试华为,薪资和定级都谈好了却被拒,HR竟说......
说在前面,千万不要频繁跳槽. 本来华为很想去的,面试前花了一个月的时间准备,面试过程挺顺利的,也拒绝了其他的所有面试邀请,而我拒绝其他面试邀请的底气,则是之前面试过程中的良好表现,薪资和定级都谈好了. ...
- Linux部署达梦数据库(完全版)
环境准备 数据库下载去http://www.dameng.com 1.下载好达梦数据库iso上传(通过xftp)到你自己存在的目录(/opt) 2.将你上传的iso文件挂载到其它的目录下面(mount ...
- jvm调优命令
JDK监控和故障jps,jstat,jmap,jhat,jstack.jinfo jps ,JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程. jstat ...