视图解析器

跳转方式(设置返回值字符串内容)

①默认请求转发
forward:资源路径,forward可省略

②重定向
redirect:资源路径

自定义视图解析器

SpringMVC会提供默认的视图解析器:
可使用<bean>加载org.springframework.web.servlet.view.InternalResourceViewResolver
来自定义视图解析器,默认跳转方式为请求转发,用于简化代码开发

属性 作用
prefix 给控制器返回的地址加前缀
suffix 给控制器返回的地址添加后缀

Ps:如果希望不执行自定义解析器(如跳转到另一个控制器时),可在解析信息(return返回内容)前添加forward:或redirect:,即指定跳转方式

当方法返回值为void时

添加形参HttpServletResponse res,
①可使用res进行数据呈现
例:

Writer writer = res.getWriter();
writer.write("Test");
writer.close();

②也可使用res进行重定向跳转

res.sendRedirect("/test.jsp");

使用@ResponseBody(恒不跳转)

当方法之前有注解@RequestMapping,且的返回值不是void时,都被认为是需要跳转
此时使用@ResponseBody,有两个作用:
将返回值转换为json字符串,同时设置响应头为Application/json(默认修改编码为utf-8),
标识不会进行跳转,将json字符串以流的形式输出
例:

@RequestMapping(value="/demo8")@ResponseBodypublic Object demo8(User user) {user.setUser("张三");return user;}

页面显示:

Ps:JSON是javascript原生格式,返回值满足key-value(对象或map)才能转为json(才会设置相应的响应头)
若返回值不满足key-value,则相应头为text/html,直接输出内容,可能会有中文乱码
使用时需导包:jackson-annotations,jackson-core,jackson-databind

对于中文乱码的解决

如,设置为utf-8:

@RequestMapping(value="拦截路径", produces="text/html;charset=utf-8")

实质为:设置响应头中Content-Type的取值

拦截器

作用

跟过滤器比较类似,发送请求时被拦截器拦截,在控制器前后添加额外功能
拦截器和Filter的区别:
拦截器只能拦截Controller、Filter可以拦截任何请求

使用

①实现 HandlerInterceptor接口

常用方法 作用
perHandle
进入控制器之前
若返回值为false,则阻止进入控制器
可使用res.sendRedirect()进行跳转
一般用于判断条件是否可以进入
handler参数表示拦截的方法
postHandler
控制器执行完成,进入jsp之前
一般用于日志记录,敏感词语处理等
modelAndView参数可获取到要跳转的页面和传递的数据
afterCompletion
jsp执行完成后
一般用于处理一些异常(使用日志记录),出异常时(handler ==null)不会进入postHandler

②在SpringMVC配置文件中
<mvc:interceptors>子元素
第一种:拦截所有控制器
<bean class=“包.拦截器”/>
第二种:只拦截特定url

\<mvc:interceptor>\<mvc:mapping path="/url"/> \<bean class="包.拦截器"/>
\</mvc:interceptor>

Tips:在Tomcat控制器中,无法拦截jsp页面,可将jsp放于文件夹WEB-INF/下,对文件夹进行拦截

测试

拦截器代码:

package com.mfqh.interceptor;public class TestInterceptor implements HandlerInterceptor{ @Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {System.out.println("拦截一");System.out.println(handler.getClass());return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {System.out.println("拦截二");System.out.println(modelAndView.getViewName());modelAndView.getModel().put("key", "value");System.out.println(modelAndView.getModel().toString());    }@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("拦截三");}
}

JSP页面配置:

<%System.out.println("-----JSP页面-----"); %>

配置文件配置:

<!-- 拦截器 -->
<mvc:interceptors><mvc:interceptor><!-- 拦截指定URL --><mvc:mapping path="/demo1"/><mvc:mapping path="/demo2"/><bean class="com.mfqh.interceptor.TestInterceptor"></bean></mvc:interceptor>
</mvc:interceptors>

测试结果:

拦截器栈

①多个拦截器同时生效时,组成了拦截器栈
②顺序:先进后出(pr1–>pr2–>demo–>po2–>po1–>jsp–>af2–>af1)
执行顺序和配置文件中的配置顺序有关

SpringMVC 视图解析器及拦截器相关推荐

  1. SpringMVC视图解析器

    SpringMVC视图解析器 前言 在前一篇博客中讲了SpringMVC的Controller控制器,在这篇博客中将接着介绍一下SpringMVC视 图解析器.当我们对SpringMVC控制的资源发起 ...

  2. SpringMVC视图解析器(转)

    前言 在前一篇博客中讲了SpringMVC的Controller控制器,在这篇博客中将接着介绍一下SpringMVC视图解析器.当我们对SpringMVC控制的资源发起请求时,这些请求都会被Sprin ...

  3. SpringMVC中的过滤器和拦截器

    SpringMVC中的过滤器和拦截器 文章目录 SpringMVC中的过滤器和拦截器 一.过滤器 二.拦截器 三.小结 一.过滤器 ​ 过滤器Filter是通过实现java.servlet.filte ...

  4. 迟到的总结(五)--springmvc的系统学习之拦截器

    前序:本篇主要是讲拦截器的配置,以及配置中路径写法. 资源:尚学堂 邹波 springmvc框架视频 一.拦截器简介 使用拦截器时, (1)实现HandlerInterceptor (2)在sprin ...

  5. OkHttp 3.x 源码解析之Interceptor 拦截器

    拦截器 Java里的拦截器是动态拦截Action调用的对象.它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提 ...

  6. Struts2 拦截器: 拦截器与过滤器区别

    1.首先要明确什么是拦截器.什么是过滤器 1.1 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加 ...

  7. axios 最全 请求拦截器 响应拦截器 配置公共请求头 超时时间 以及get delete post put 四种请求传参方式

    axios 拦截器 请求拦截器 请求拦截器的作用是在请求发送前进行一些操作 例如在每个请求体里加上token,统一做了处理如果以后要改也非常容易 响应拦截器 响应拦截器的作用是在接收到响应后进行一些操 ...

  8. axios 请求拦截器响应拦截器

    一. 拦截器介绍 一般在使用axios时,会用到拦截器的功能,一般分为两种:请求拦截器.响应拦截器. 请求拦截器 在请求发送前进行必要操作处理,例如添加统一cookie.请求体加验证.设置请求头等,相 ...

  9. axios拦截器 config_axios拦截器

    页面发送http请求,很多情况我们要对请求和其响应进行特定的处理:如果请求数非常多,单独对每一个请求进行处理会变得非常麻烦,程序的优雅性也会大打折扣.好在强大的axios为开发者提供了这样一个API: ...

  10. axios拦截器 config_axios拦截器的实现

    拦截器设计与实现 #需求分析 我们希望能对请求的发送和响应做拦截,也就是在发送请求之前和接收到响应之后做一些额外逻辑. 我们希望设计的拦截器的使用方式如下: // 添加一个请求拦截器 axios.in ...

最新文章

  1. 为什么 Spring 框架如此流行?
  2. 算法1-排序LowB三人组
  3. Python A+B问题
  4. python 播放视频 ftp_利用Python快速搭建HTTPFTP服务器
  5. isulad代替docker_云原生时代的华为新“引擎”:iSula | Linux 中国
  6. 索引中丢失 IN 或 OUT 参数
  7. leetcode 551. 学生出勤记录 I(Java版)
  8. BIOS设置开机密码
  9. Flashdevelop 在Project 上增加 ComboBox
  10. java session 数量_java中使用session监听实现同帐号登录限制、登录人数限制
  11. 算法题目——二次函数三分求极值(HDU-3714)
  12. python语言原理_梯度下降算法的原理用Python语言实现,易于理解,python,更
  13. liunx 常用操作
  14. 一个key 在10w k/v 找到对应的. (B-tree), 这10w放进B-tree 会有多少层.
  15. 大学生html作业总结,总结 HTML标签作业
  16. struts2.0.14 包命名空间
  17. 拼多多36W+的后端面经
  18. 最强的ubuntu8.04安装配置手册
  19. 使用多个路由器有线桥接实现无线漫游
  20. 872. 叶子相似的树 / 剑指 Offer 33. 二叉搜索树的后序遍历序列 / 剑指 Offer 34. 二叉树中和为某一值的路径 / 剑指 Offer 35. 复杂链表的复制

热门文章

  1. 【nginx】【小记】泛解析大量域名的情况下 将不带www的域名,301到与之对应的www前缀的域名
  2. 【java】测试dubbo业务
  3. 记录一些我关注的人的博客
  4. react 渲染道具_在React中学习分解道具的基础
  5. telegram 机器人_我在周末构建了一个无服务器的Telegram机器人。 这是我学到的。...
  6. 您可能不知道可以使用Chrome开发者控制台执行的操作
  7. 10个Python面试常问的问题
  8. Python基础教程,流程控制语句详解
  9. 3月份Github上最热门的Python开源项目
  10. django的models常用字段、属性