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 属 ...
随机推荐
- Java 给Word添加印章
一.概述 本文以Java程序代码展示如何给Word文档添加印章,这里添加的印章为.png格式的图片,添加印章即在Word中的指定位置添加印章图片. 基本思路:加载word文档,获取段落,在段落中插入图 ...
- <题解>[IOI2019]景点划分
题目传送门(luogu) 题目传送门(loj) 这个题对我来说可以算是超出了我的能力范围 被学长拿来教我做构造,构造题真简单,构造题真是人,构造题真能手切... 首先对于本题,必须要知道dfs树这东西 ...
- 【LeetCode】841. 钥匙和房间
841. 钥匙和房间 知识点:图:递归 题目描述 有 N 个房间,开始时你位于 0 号房间.每个房间有不同的号码:0,1,2,...,N-1,并且房间里可能有一些钥匙能使你进入下一个房间. 在形式上, ...
- Nexus Repository Manager 3 远程命令执行漏洞(CVE-2019-7238)
poc地址 https://github.com/magicming200/CVE-2019-7238_Nexus_RCE_Tool
- Vue学习笔记(三)条件渲染和循环渲染
目录 一.条件渲染 1. v-if 2. 与v-else配合使用 3. 与v-else-if配合使用 4. v-show的使用 5. 类型切换案例 二.列表渲染 1. 遍历数组 2. 遍历对象 获取v ...
- DL基础补全计划(五)---数值稳定性及参数初始化(梯度消失、梯度爆炸)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- Object.defineProperty 中 get set 用法
就是两个函数,只要搞清楚get.set的执行时机就可以了.执行时机如下代码: <!DOCTYPE html> <html lang="en"> <he ...
- Java面向对象09——super
Super main package oop.demon01.demon05; public class Application { public static void main( ...
- 关于修改.net core webapi中null默认返回的状态码。
在asp .net core webapi中,http请求的响应数据如果是null的话,我们知道状态码会返回204,即NoContent,为什么会出现这种情况呢? 因为在返回响应数据的时候,nul ...
- Python语言系列-02-基础数据类型
格式化输出 #!/usr/bin/env python3 # author:Alnk(李成果) # 百分号% 格式化输出 name = input('姓名:') age = input('年龄:') ...