spring多个视图解析器

1.简介

在Spring中,提供了View Resolver来使用模型中可用的数据来解析视图,而无需与JSP,Velocity或Thymeleaf等View技术紧密绑定。 Spring可以根据需要轻松灵活地配置一个或多个View Resolver

2. Spring MVC应用程序流程

在继续理解多个View Resolver如何达到目的之前,让我们快速回顾一下Spring MVC应用程序流程 。

  1. 传入的请求通过web.xml调度程序servlet到达控制器
  2. 控制器与应用程序层进行交互并准备模型
  3. 控制器返回ModelAndView ,以及模型和视图名称。
  4. ViewResolver提供了视图名称和实际视图之间的映射。
  5. View界面解决了对各种View技术的视图请求。
  6. 然后将视图与模型数据一起呈现到浏览器中。

3.实施

让我们从pom依赖关系开始。

pom.xml

<!-- Spring 3 dependencies -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version>
</dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version>
</dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version>
</dependency><!-- Jackson JSON Mapper -->
<dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-asl</artifactId><version>${jackson.version}</version>
</dependency><!-- JSTL Dependency -->
<dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>${jstl.version}</version>
</dependency>

web.xml的更改不多。

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><display-name>MultipleViewResolversExample</display-name><servlet><servlet-name>mvc-dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>mvc-dispatcher</servlet-name><url-pattern>/API/*</url-pattern></servlet-mapping></web-app>

这是mvc-dispatcher-servlet,其中定义了多个视图解析器

mvc-dispatcher-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"><mvc:annotation-driven /><context:component-scan base-package="com.jcombat.controller" /><!-- Bean View Resolver --><bean class="org.springframework.web.servlet.view.BeanNameViewResolver"><property name="order" value="0" /></bean><!-- JSP View Resolver --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix"><value>/WEB-INF/</value></property><property name="suffix"><value>.jsp</value></property><property name="order" value="1" /></bean><bean name="jsonView"class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" /></beans>

请注意,配置的两个视图解析器是InternalResourceViewResolverBeanNameViewResolver 。 我们还使用View Resolver的order属性设置了优先级。 因此, BeanNameViewResolver具有更高的优先级。 这意味着,当返回ModelAndView对象时, BeanNameViewResolver会使用返回的视图名称检查可用的bean视图。 如果找到匹配的bean视图,则将其呈现。 如果不是,则进入下一个View Resolver,即InternalResourceViewResolver ,并类似地检查ModelAndView返回的具有视图名称的JSP。 如果找到,则呈现视图。 但是,如果没有,并且层次结构中没有更多视图解析器,则会引发适当的异常。

继续实现,我们拥有与最近使用的相同的Employee实体类。

Employee.java

package com.jcombat.bean;public class Employee {private String empId;private String name;public String getEmpId() {return empId;}public void setEmpId(String empId) {this.empId = empId;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

现在让我们写下EmployeeController

EmployeeController.java

package com.jcombat.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;import com.jcombat.bean.Employee;@Controller
@RequestMapping(value = "/Employee")
public class EmployeeController {@RequestMapping(value = "/{name}/{empId}", method = RequestMethod.GET)public ModelAndView process(@PathVariable("name") String name,@PathVariable("empId") String empId) {ModelAndView modelAndView = new ModelAndView();Employee employee = new Employee();employee.setEmpId(empId);employee.setName(name);modelAndView.setViewName("employeeDetails");modelAndView.addObject("employee", employee);return modelAndView;}
}

现在,我们确保具有视图名称– employeeDetails的JSP存在。

employeeDetails.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Via JSP View Resolver</title></head><body><!-- Retrieve the model data through JSTL --><p>${employee.empId}</p><p>${employee.name}</p></body>
</html>

4.运行应用程序

当我们运行该应用程序时,将看到以下内容。

注意,我们没有名称为employeeDetails的任何bean视图,而是与实际的JSP视图文件employeeDetails.jsp匹配。 因此,视图被解析为JSP。

现在,让我们将视图名称返回为jsonView ,在controller方法中修改以下语句。

modelAndView.setViewName("jsonView");

BeanNameViewResolver的优先级更高,这次将找到名称为jsonView的bean视图,并且不再呈现JSP视图,而是使用相同的URI返回JSON

5.下载源代码

  • 下载源代码

翻译自: https://www.javacodegeeks.com/2016/03/configure-multiple-view-resolvers-spring.html

spring多个视图解析器

spring多个视图解析器_在Spring中配置多个View解析器相关推荐

  1. 在Spring中配置多个View解析器

    1.简介 在Spring中,提供了View Resolver来使用模型中可用的数据来解析视图,而无需与JSP,Velocity或Thymeleaf等View技术紧密绑定. Spring可以根据需要轻松 ...

  2. spring默认缓存管理器_使用Spring的缓存管理器缓存Web内容

    spring默认缓存管理器 在这篇文章中,我想向大家展示如何使用Spring的CacheManager,@ Cacheable和JMX批注来缓存和管理Web内容的缓存的基础知识. 想象一下一个网上商店 ...

  3. Java中apple导入那个包_在Java中,由Java编泽器自动导入而无需在程序中用import导入的包是()。A.java.appletB.java.awtC.j...

    在Java中,由Java编泽器自动导入而无需在程序中用import导入的包是().A.java.appletB.java.awtC.j 更多相关问题 问卷星是一个专业.无限制的免费在线问卷调查.测评. ...

  4. 怎么把python解释器配置在pycharm中_在PyCharm中配置项目(三):配置Python解释器...

    PyCharm是一种Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具.此外,该IDE提供了一些高级功能,以用于Django框架下的专业Web开发. PyCha ...

  5. 网页mp3提取器_用Python写一个酷狗音乐下载器!

    [这就是标题] 距离上一次发推送差不多有一个月了ヽ(ー_ー)ノ 做了一个小的酷狗音乐下载器,公众号内回复704就可以收到下载链接. 长下面这样. 双击打开,会提示让输入你要搜索的歌曲. 这里输入去流浪 ...

  6. python elementtree 命名空间_用Python中的命名空间通过‘ElementTree’解析XML

    莫回无 注对于Python的ElementTree标准库来说,这是一个有用的答案,而不需要使用硬编码的命名空间.要从XML数据中提取命名空间的前缀和URI,可以使用ElementTree.iterpa ...

  7. python 找到装饰器_[译] 12步轻松搞定python装饰器

    呵呵!作为一名教python的老师,我发现学生们基本上一开始很难搞定python的装饰器,也许因为装饰器确实很难懂.搞定装饰器需要你了解一些函数式编程的概念,当然还有理解在python中定义和调用函数 ...

  8. 如何听节拍器_钢琴练习中节拍器的使用

    钢琴练习中节拍器的使用 刘晶姝 [摘 要] 节拍器是一种可以设定每分钟发出有规律的特定节拍的机械,一般节拍 器可以分为机械式和电子式两种.机械节拍器有个带有刻度的钟摆,刻度一般从每 分钟 40 拍到 ...

  9. java 函数 微秒_在Java中以微秒为单位解析时间

    我在解析2013-01-09 09:15:03.000000格式的Java时间字符串时遇到问题. 在我的数据中,最后三个数字始终为0(表示输入字符串仅具有毫秒精度),因此我将此格式传递给SimpleD ...

最新文章

  1. dedecms--数据库
  2. python映射类型-python 基础学习 — 映射类型:字典
  3. 没有会员wps合并多个sheet_WPS「合并文档」功能,如何“唰”一下把多个文档合并到一起?...
  4. 一位同学想通过用计算机编程解决韩信点兵,高中信息技术《算法与程序设计模块》练习题...
  5. .NET平台下Web树形结构程序设计
  6. Golang使用pkg-config自动获取头文件和链接库的方法
  7. 孙悟空!登上 Nature !
  8. 算法与数据结构题目汇总
  9. oracle硬解析和软解析
  10. linux内核分析与应用 -- 并发(下)
  11. java用php退出清除session_PHP学习笔记:删除与销毁session
  12. Matlab数理统计工具箱
  13. a += 1、a = a + 1、a++区别
  14. APP行业基准营销数据怎么获取?快用这两个免费应用数据工具
  15. 经典文献阅读之--PON
  16. python cannot concatenate_python相关报错及解决方式
  17. 建立Baseline之repo,manifest
  18. Linux 知:文件系统
  19. 博士生们都在干什么?
  20. java设计文档怎么写,斩获offer

热门文章

  1. Loj#6503-「雅礼集训 2018 Day4」Magic【分治NTT】
  2. P4201-[NOI2008]设计路线【结论,树形dp】
  3. YbtOJ#943-平方约数【莫比乌斯反演,平衡规划】
  4. jzoj1082-合并果子【堆,贪心】
  5. 牛客练习赛 58——树链剖分
  6. 【二分】防具布置/秦腾与教学评估(ybtoj 二分-1-2/jzoj 1253/luogu 4403)
  7. 纪中培训总结(2019年9月4~13日)
  8. 2014 ACM/ICPC Asia Regional Xi'an Online
  9. HashMap jdk1.7源码阅读与解析
  10. JVM调优总结(2):基本垃圾回收算法