在Spring中配置多个View解析器

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.运行应用程序

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

快照1

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

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

modelAndView.setViewName("jsonView");

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

快照2

5.下载源代码

  • 下载源代码

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353988.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 知识体系

转载于:https://www.cnblogs.com/mamamia/p/8567570.html

android电视root权限获取,电视盒子/ 智能电视如何通过ADB获取ROOT权限?

如何通过adb获取root权限(安卓电视盒和智能电视通用)?Android 系统rom里面最主要的就3个文件&#xff1a;boot.img、system.img、userdata.img其中boot.img 存放着内核以及Android系统的配置信息&#xff0c;比如android系统各文件夹的读写权限&#xff0c;adb 的权限。所以如…

确定活动的热点垃圾收集器

StackOverflow问题查找正在运行哪种类型的垃圾收集 器&#xff0c;jvm的默认垃圾收集器 &#xff0c; 如何通过查看gc日志来查看正在运行的垃圾收集器&#xff1f; &#xff0c;以及如何知道HotSpot jvm的当前GC策略&#xff1f; 和博客文章如何以编程方式获取GC信息表明了人们…

app store 关键词

如何选取关键字&#xff0c;让你的应用关键词越来越多&#xff1f; 很多朋友在做应用商店优化的时候&#xff0c;都会遇到一个让人很头疼的问题&#xff1a;如何选取关键词&#xff1f;关键词的质量直接关系到App的自然下载量&#xff0c;所以&#xff0c;我们应该用科学的办法…

android 调用微信语音识别,Android 仿微信语音识别

参考于&#xff1a;Android模仿微信语音聊天功能&#xff0c;这代码跑起来有问题&#xff0c;自己改动了一下&#xff0c;基本上没什么大问题先贴下效果图1、三个布局文件activity_main.xmldialog_manger.xmlitem_layout2.自定义的类(1)DialogMangerpackage com.nickming.view;…

老罗android oat,入门ART虚拟机(5)——OAT文件

Android安全交流群&#xff1a;478084054先贴老罗的一张图&#xff1a;再摘一段老罗的描述&#xff1a;“作为Android私有的一种ELF文件&#xff0c;OAT文件包含有两个特殊的段oatdata和oatexec&#xff0c;前者包含有用来生成本地机器指令的dex文件内容&#xff0c;后者包含生…

Dajngo-Xadmin 修改菜单摆放排序

问题: Xadmin 默认是读取了所有被注册到 xadmin 的模型生成对应的菜单!这个是没问题的 ,但是xadmin又对菜单做了 "通过菜单名称" 排序.英文状态下我们的排列至少是 a-z排列的,但是一到中文就乱了,完全不符合我们的要求. 解决办法: 要到达按照我们 在 django 的 setti…

华为鸿蒙2.0什么核心,鸿蒙系统2.0:安卓最核心部分基本已去除,将带来全新的体验...

早些时候&#xff0c;华为在东莞举办的华为2020华为开发者大会如期召开&#xff0c;在大会上华为正式发布了鸿蒙系统2.0&#xff0c;并称将于明年应用到智能手机上&#xff0c;其中升级了EMUI 11的用户可以优先获得体验鸿蒙系统2.0的资格&#xff0c;瞬间将会议推向高潮。值得一…

Java 8:在2分钟内将智能流与数据库一起使用

快速流媒体 当Java 8最终问世时&#xff0c;我和一些大学开始了一个开源项目&#xff0c;以利用Java 8的流库使整个Java / DB问题进一步向前发展&#xff0c;以便将数据库表视为纯Java 8流。 速度诞生了&#xff01; 哇&#xff0c;现在我们可以做类型安全的数据库应用程序了&a…

MapReduce 详解

MapReduce的整个运行分为两个阶段&#xff1a; Map和Reduce Map阶段由一定数量的Map Task组成 输入格式的数据格式化&#xff1a;InputFormat 数日数据的处理:Mapper 数据分组&#xff1a;Partitioner 下面流程图&#xff1a; 1. Map task 首先从HDFS上Read文件&#xff0c;通过…

早期访问中具有NetBeans的Oracle公共云Java服务

谁期望发生这种情况&#xff1a;Oracle正在开发公共云产品&#xff0c;并且即将开始正式启动的迹象已经出现。 在正式宣布之后将近一年&#xff0c;我被邀请加入所谓的“抢先体验”计划&#xff0c;以试驾新服务并提供反馈。 多亏负责产品的经理Reza Shafii &#xff0c;我才可…

HTML5调整图像垂直边距,77.通过vspace和hspace属性可以分别调整图像的垂直边距和水平边距。()()...

具有东方建筑特色、&#xff0e;通图像规模宏大、气势雄伟的古代建筑群是( )属性水平完成规定的大作业分别Which of the following parks are the urban parks of New York?调整的垂Which of the following countries have once occupied New York city in the 17th century?…

Javac可以编译,Java显示找不到或无法加载主类

运行时候加入完整包名。转载于:https://www.cnblogs.com/theWinter/p/8594354.html

台式计算机欢迎界面下不去,Win7系统开机不显示欢迎界面的方法

现在办公人员做事情都讲究效率&#xff0c;甚至连电脑开机都不放过&#xff0c;win7系统加快开机速度的方法有很多种&#xff0c;开机不显示欢迎界面便是其中之一。有些用户觉得开机显示欢迎界面是非常浪费时间的一件事&#xff0c;想要删除电脑中的欢迎界面。但是很多电脑白不…

CompressedOops:Java压缩参考简介

在本文中&#xff0c;我们将向您介绍一种称为Compressed oops的JVM优化。 压缩oop的概念是由32位和64位体系结构之间的差异引起的。 因此&#xff0c;我们将对64位体系结构进行简短的回顾&#xff0c;然后再深入探讨压缩oop的主题。 最后&#xff0c;我们将通过一个简单的示例看…

NYOJ90 整数划分(经典递归和dp)

整数划分 时间限制&#xff1a;3000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;3描述将正整数n表示成一系列正整数之和&#xff1a;nn1n2…nk&#xff0c; 其中n1≥n2≥…≥nk≥1&#xff0c;k≥1。 正整数n的这种表示称为正整数n的划分。求正整数n的不 同划分个数。…

昆士兰科技大学计算机专业,昆士兰科技大学QUT计算机科学Computer Science专业排名第101-125位(2021年THE世界大学商科排名)...

2021年THE泰晤士高等教育计算机科学Computer Science专业世界大学排名公布&#xff0c;昆士兰科技大学QUT计算机科学世界排名第101-125位&#xff0c;昆士兰科技大学QUT计算机科学专业实力怎么样呢&#xff1f;下面美英港新留学介绍昆士兰科技大学QUT计算机科学专业培养计划&am…

计算机休眠下睡眠的不同点是什么,电脑的关机选项里,休眠和睡眠有什么具体的区别呢?...

电脑的关机选项里&#xff0c;休眠和睡眠有什么具体的区别呢&#xff1f;以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;电脑的关机选项里&#xff0c;休眠和睡眠有什么具体的区别呢&#x…

开发一个智能问答机器人(优化篇)

上一篇介绍了整个问答机器人的技术架构和特定&#xff0c;本篇着重说下 如何让机器人&#xff08;看起来&#xff09;更智能 输入联想 使用jquery.autosuggest.js实现的输入联想&#xff0c;在输入2个字后&#xff0c;在5000个问答中基于全文检索&#xff0c;检索10条记录&…

java中的单例模型

参考网址:http://www.runoob.com/design-pattern/singleton-pattern.html 1.目的:保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。(比如世界只有一个月亮,党只有一个主席) 2. 优点&#xff1a; 1、在内存里只有一个实例&#xff0c;减少了内存的开销&#x…