SpringMVC拦截器功能 ,全局异常功能,返回jason数据功能

一、拦截器功能

1)声明一个类,并且实现HandlerInterceptor,重写里面的方法
在这里插入图片描述
解释一下重写的这三个方法
1.程序先执行preHandle()方法,如果该方法的返回值为true,则程序会继续向下执行处理器中的方法,否则将不再向下执行

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		return false;
	}

2.在业务处理器(即控制器Controller类)处理完请求后,会执行postHandle()方法,然后通过DispatcherServlet向客户端返回响应

public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {}

3.在DispatcherServlet处理完请求后,才会执行afterCompletion()方法

public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {}

2)配置拦截器,在spring mvc的配置文件加上

<mvc:interceptors>  
			   <!--  使用bean定义一个Interceptor,直接定义在mvc:interceptors根下面的Interceptor将拦截所有的请求   -->
				<!-- <bean class="xxxx"/> --> /需要修改   
				<mvc:interceptor>  
					<!-- 进行拦截:/**表示拦截所有controller -->
					<!-- 进行拦截:/*是会分层级的 -->
					<mvc:mapping path="/**" />
				   <!-- 不进行拦截 -->
					<mvc:exclude-mapping path="/index.html"/>
				<!-- 自定义的拦截器的类 -->
					<bean class="xxxx"/> //需要修改 
				</mvc:interceptor>  
			</mvc:interceptors>   

在上面的 中写上前面定义的那个拦截器的类的路径
在这里插入图片描述
填写上一下不进行拦截的页面
在这里插入图片描述
3.编写登录拦截器首先思路是如果登录的对象为空则拦截,不给他过,也就是第一个重写的方法的返回值为false(首先获取session作用域,然后获取对象,判断对象是否为空)
在这里插入图片描述
如果登陆成功后那controller层会放到session作用域里面,然后我们在这里判断这个作用于里面有没有这个对象就行了

4.定义一个LoginController.java文件,在里面编写登录的逻辑,如果登录成功后就塞进对象里面,然后再将对象塞进session作用域里面,并且进行跳转
在这里插入图片描述
解释一下这里的跳转后重定向的路径,如果在redirect重定向过去的路径上面加上斜杠/,如果添加斜杠,默认没有工程名称,然后就要在url前面加上项目名称,在参数列表里面加多一个request作用域参数,然后再利用作用域获取项目路径httpServletRequest.getContextPath()
在这里插入图片描述
在这里插入图片描述ok,完工

二、全局异常

在我们页面遇到异常的时候,它会跳到异常页面,而在客户浏览的时候我们不可能给客户呈现出这些异常的页面,所以当我们遇到异常页面的时候需要跳转到404页面

1)声明一个类,并且实现HandlerExceptionResolver
2)把这个类放到spring 容器里面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、Springmvc返回json

作用:和前端做交互的时候ajax请求的时候,返回页面的,有时候是要返回json数据,也就是在1.操作数据库增删改给用户提示信息 2.前后端分离,使用json返回数据

1)添加项目依赖

<!-- 支持json转换 -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.8.6</version>
		</dependency>
		<dependency>
			<groupId>commons-beanutils</groupId>
			<artifactId>commons-beanutils</artifactId>
			<version>1.9.2</version>
		</dependency>
		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-mapper-asl</artifactId>
			<version>1.9.13</version>
		</dependency>
		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-core-asl</artifactId>
			<version>1.9.13</version>
		</dependency>

2)在方法上添加@ResponseBody
添加上这个注解以后return “list” 这类等就不是返回页面了,而是返回字符串了
如果我们要返回字符串内容,并不是返回页面,那么就在方法上面添加@ResponseBody的注解即可
在这里插入图片描述
在前面制作的拦截器上面加上特权让他通过,不拦截
在这里插入图片描述

四,最后总结

*spring mvc 处理流程
1.用户发送请求至 前端控制器DispatcherServlet。
2.前端控制器DispatcherServlet收到请求后调用处理器映射器HandlerMapping。
3.处理器映射器HandlerMapping根据请求的Url找到具体的处理器,生成处理器对象Handler及处理器拦截器HandlerIntercepter(如果有则生成)一并返回给前端控制器DispatcherServlet。
4.前端控制器DispatcherServlet通过处理器适配器HandlerAdapter调用处理器Controller。
5.执行处理器(Controller,也叫后端控制器)
6.处理器Controller执行完后返回ModelAnView。
7.处理器映射器HandlerAdapter将处理器Controller执行返回的结果ModelAndView返回给前端控制器DispatcherServlet。
8.前端控制器DispatcherServlet将ModelAnView传给视图解析器ViewResolver。
9.视图解析器ViewResolver解析后返回具体的视图View。
10.前端控制器DispatcherServlet对视图View进行渲染视图(即:将模型数据填充至视图中)
11.前端控制器DispatcherServlet响应用户。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值