什么是视图解析器?

springMVC用于处理视图最重要的两个接口是ViewResolver和View。

ViewResolver的主要作用是把一个逻辑上的视图名称解析成一个真的的视图,而SpringMVC中用于把View对象呈现给客户端的是View对象本身,而ViewResolver只是把逻辑视图名称解析为对象的View对象。

View接口的主要作用是用来处理视图,返给给客户端。

视图解析器的执行流程:

请求方法执行完成后,最终返回一个ModelAndView对象,对于那些返回String,View,ModelMap等类型SpingMVC最终会在内部给他们装配成一个ModelAndView对象,它包含了逻辑名和模型对象的视图。StringMVC借助视图解析器得到最终的视图对象,最终的视图可以是JSP,也可能是其他的文件形式的视图。对于最终采取那一种方式渲染处理器并不关心,处理器重点焦距在生产模型数据的工作上,从来实现了MVC充分的解耦。

视图:

视图的作用是渲染模型数据,将模型里面的数据以某种形式呈现给用户。为了实现视图模型和具体实现技术的解耦,Sping定义了一个View接口。视图对象由视图解析器负责实例化,由于视图是无状态的,所以它们不会有线程安全问题。

常用的视图实现类:

InternalResourceView:将JSP资源封装成一个视图,是springmvc默认使用的视图解析器。

JstlView:在JSP项目中引入jstl包springmvc会自动使用该解析器

MapingJackJsonView:将模型通过Jackson开源框架的ObjectMapper以Json方式输出。

AbstractExcelView:Excel文档视图的抽象类,该视图基于POI构造Excel文档

AbstractPdfVIew:PDF文档视图的抽象类,该视图基于iText构建Pdf文档

BeanNameViewResolver:将逻辑视图名解析为一个Bean,Bean的id等于逻辑视图名。

视图解析器的作用比较单一,将逻辑视图解析为一个具体的视图对象,所有的视图解析器必须实现ViewResolver接口。

JSP是最常用的视图技术,可以使用InternalResourceView作为视图解析器

项目中只要引入了JSTL标签则springmvc会自动把视图有InternalResourceView转换成JstlView,JstlView是它的子类。

每一个视图解析器都实现了Ordered接口并开发出一个order属性,可以通过它设置解析器的优先级,order越小优先级越高。Spring MVC会按视图解析器顺序的优先级对逻辑视图名进行解析,直到解析成功并返回视图对象,否则会抛出ServletException异常

自定义视图:

@Componentpublic class MyView implements View { @Override public String getContentType() { return "text/html"; } @Override public void render(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception { response.getWriter().println("

Spring MVC Custom view

"); }}

我们需要将这个自定义的视图实现View接口然后重写接口中的两个方法。然后我们把这个类声明成Bean交给spring管理。在这里我们配置一个beanName解析器。

 

然后写一个请求,这个请求返回Bean的名字,默认是首字母小写以驼峰式展现。

@RequestMapping("myView") public String myView(){ System.out.println("myView load ..."); return "myView"; }

这样就可以完成我们的自定以视图。

关与重定向:

如果返回字符串中带有”redirect:“或"forward:",SpringMvc会将其做特殊的处理。

如果我们需要直接访问视图可以这样配置

REST章节

REST(Representational State Transfer):即(资源)表现层状态传递。

资源(Resources):网络上的一个实体,或者说网络上的一段信息。它可以是一段文本,一段歌曲,一张图片等等,可以用一个URL指向它,每个资源都有一个特定的,独一无二的URL,要访问这个资源,直接访问这个URI即可。

表现层(Representation):将资源呈现出来的形式。

状态转化(State Transfer):每发出一个请求,就代表客户端和服务器一次交互。HTTP协议是一个无状态的协议,即所有的状态都保存在服务器端。客户端想要操作服务器,必须通过某些手段,让服务器发生状态转化,而这种转化是建立在表现层之上的,所以就是表现层状态转化。

在我们的SpringMVC之中支持HTTP四种请求状态,REST规定的HTTP协议中四种表示操作方式的动词

GET请求:获取资源

POST请求:新建资源

PUT:更新资源

DELETE:删除资源

我们需要在WEB.xml中配置实现PUT,DELETE请求方式,大家都知道在我们传统的HTML中只有GET,POST两种请求方式。

HiddenHttpMethodFilter org.springframework.web.filter.HiddenHttpMethodFilter HiddenHttpMethodFilter/*

GET请求

GET请求:test RestGet请求@RequestMapping(value="/testRest/{id}

springmvc视图解析器_SpringMVC视图及REST风格相关推荐

  1. java 视图解析器_SpringMVC——视图和视图解析器

    请求处理方法执行完成后,最终返回一个 ModelAndView对象.对于那些返回 String,View 或 ModeMap 等类型的处理方法,Spring MVC 也会在内部将它们装配成一个Mode ...

  2. jsp springmvc 视图解析器_Springmvc中多视图解析器解析问题

    最近被问到过几次关于springmvc多视图解析器解析的问题:总结一下. 1.问题: 假设我有两个jsp: WEB-INF/html/a.jsp WEB-INF/report/b.jsp 且我配置了视 ...

  3. springmvc如何使用视图解析器_SpringMVC的工作原理

    SpringMVC的工作原理图: SpringMVC流程 1. 用户发送请求至前端控制器DispatcherServlet. 2. DispatcherServlet收到请求调用HandlerMapp ...

  4. jsp springmvc 视图解析器_SpringMVC学习笔记

    Springmvc springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合. springmvc是一个基于mvc的web框架. 基本概念和执行过程 ...

  5. springmvc如何使用视图解析器_SpringMVC工作原理

    SpringMVC工作原理图: SpringMVC流程 1. 用户发送请求至前端控制器DispatcherServlet. 2. DispatcherServlet收到请求调用HandlerMappi ...

  6. jsp springmvc 视图解析器_springMVC配置jsp/html视图解析器

    1.maven项目引入freemark相关jar包 freemaker是以个模板引擎,可以根据提供的数据和创建好的模板,去自动的创建html静态页面.所以在返回html视图时可以用这个引擎结合数据生成 ...

  7. jsp springmvc 视图解析器_SpringMVC工作原理

    SpringMVC的工作原理图: SpringMVC流程 1. 用户发送请求至前端控制器DispatcherServlet. 2. DispatcherServlet收到请求调用HandlerMapp ...

  8. springmvc如何使用视图解析器_SpringMVC相关面试题

    点击蓝字 关注我们 最近面试时,每家公司的必问题,今日作此分享,如有更好的解决方案或者存在错误,还请指正. Q1 什么是 SpringMvc? SpringMvc 是 spring 的一个模块,基于 ...

  9. Spring MVC 中自定义视图 @Component 及 配置 多个视图解析器 Excel视图

    首先我们建立一个自己的View实现View接口.要注意在类上面加上@Component的注解,因为看BeanNameViewResolver的源码知道,是直接从ioc容器里面拿的根据名字拿的视图,所以 ...

最新文章

  1. 微信小程序,是不是一盘可口的菜!
  2. Linux下磁盘I/O测试
  3. 架构师之路 — 分布式系统 — gRPC 谷歌远程过程调用
  4. eclipse——jsp字体设置
  5. element-ui中的中国省市区级联选择器
  6. 在cmd中配置安装mysql数据库密码_windows安装mysql数据库并修改密码
  7. 【python】 调用selenium中 ChromeDriver不匹配的问题
  8. dorehtml.php,帝国cms后台实现刷新多栏目内容页的方法详解
  9. android sqlite配置,60. (android开发)SQLite作为APP应用的配置打包
  10. js document 触发按键事件
  11. 导致无线网卡连接不上wifi的几种原因|为什么无线网卡连不上wifi?
  12. 世界上最著名的24句哲理
  13. PyCharm代码格式化插件
  14. 在前程无忧实习是怎样一个体验
  15. 传统量化金融时序模型(ARMA,ml-XGBoost,dl-LSTM)
  16. Python:time, strftime和strptime
  17. 黑苹果:仅适用ASUS Z390-H主板(败家之眼)
  18. 传统银行业务的数字化转型-中原银行大数据建设实践
  19. 历史最全DL相关书籍、课程、视频、论文、数据集、会议、框架和工具整理分享
  20. CSDN 4月付费专栏榜单

热门文章

  1. 多媒体技术复习汇总 收藏
  2. 如何查看jar包的版本号?
  3. cookie ? 利用cookie实现 显示上次访问时间?
  4. 垃圾回收算法与垃圾回收器
  5. js - 执行上下文和作用域以及闭包
  6. CSS中的px与物理像素、逻辑像素、1px边框问题
  7. 为Mac OS X添加用Firefox搜索服务
  8. 浅谈jQuery的选择器
  9. python-访问者模式
  10. JadClipse eclipse反编译插件