spring多个视图解析器_在Spring中配置多个View解析器

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

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

快照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

spring多个视图解析器

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

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

相关文章

【技术解决方案】音视频同步策略分析并计算出当前音频播放的pts

音视频同步策略 1.参考时钟同步&#xff1a;音视频约定好经过周期音视频各自会seek到约定位置。 2.音频同步视频&#xff1a;视频是不能保证每秒是25帧的&#xff0c;存在精确度问题。 3.视频同步音频&#xff1a;音频使用正常速度播放&#xff0c;视频以音频为基准。音频需…

wxpython控件如何自动调整大小_wxpython:自动调整静态图像(staticbitmap)的大小以适应大小...

我的wxPython项目有一个框架,有多个嵌套的sizer.其中一个sizer包含一个wxStaticImage,其中一个位图是从文件中读取的.每次调整帧大小时,我都需要调整图像大小(增大/缩小),因此它适合它的sizer边界.(我想)我知道如何调整图像大小.我不知道的是如何&#xff1a;>如何获取图像容…

单选按钮:after_选择的按钮:将ToggleButtons用作单选按钮

单选按钮:after对于MQTT.fx&#xff0c;我想使用ToggleButtons例如选择MQTT消息或QoS级别的解码&#xff1a; 我发现在ToggleGroup的上下文中&#xff0c;ToggleButton在选择/取消选择方面的行为与RadioButtons不同&#xff1a;与RadioButtons不同&#xff0c;ToggleButtons仍…

【技术解决方案】Windows平台下摄像头采集方案

在Windows下对摄像头数据进行采集&#xff0c;有两种方法。一种使用DrectShow&#xff0c;另一种方法是使用WMF。我们可以通过将以上两种方法与FFmpeg中的avdevice来关联。使得他们成为一个整体。对于本机摄像头设备的枚举我推荐使用QT的多媒体库。 QCameraInfo curCameraInfo …

【技术解决方案】开发工具源码安装包大全

汇总下载链接 下载地址 QT下载以及安装 各版本QT下载地址 1.安装中根据不同的开发环境勾选相应的&#xff0c;如果使用VS编译请先安装VS和SDK然后再安装QT。 使用VS时CDB调试支持需要勾选 QTCreator断点调试需要下载SDK,Windows的SDK下载地址&#xff0c;只需要安装勾选如…

垃圾收集算法,垃圾收集器_确定活动的热点垃圾收集器

垃圾收集算法,垃圾收集器StackOverflow问题查找正在运行哪种类型的垃圾收集 器&#xff0c;jvm的默认垃圾收集器 &#xff0c; 如何通过查看gc日志来查看正在运行的垃圾收集器&#xff1f; &#xff0c;以及如何知道HotSpot jvm的当前GC策略&#xff1f; 以及博客文章如何以编程…

python哪个方向简单_现在学Python,哪个方向最简单?哪个方向最吃香 ?

“ 我想学Python&#xff0c;但是学完Python后都能干啥 &#xff1f;”“ 现在学Python&#xff0c;哪个方向最简单&#xff1f;哪个方向最吃香&#xff1f;”“ …… ”相信不少Python的初学者&#xff0c;都会遇到上面的这些问题。大家都知道Python很吃香&#xff0c;薪资高、…

树与堆的基本概念

当看到这里的时候&#xff0c;相信你的链表&#xff0c;队列&#xff0c;栈学的也差不多可以了&#xff0c;那么接下来让我们一起进入树的学习吧&#xff01; 一.树的概念以及一些知识记忆 树的定义&#xff1a; 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08…

动态数据交换 python_如何用 Python 和 Streamlit 做交互式数据分析产品?

「本文参与少数派 2019 年度征文 效率有心得」不用学前端编程&#xff0c;你就能用 Python 简单高效写出漂亮的交互式 Web 应用&#xff0c;将你的数据分析成果立即展示给团队和客户。痛点从我开始折腾数据分析工具的那一天&#xff0c;就没有想明白一件事儿 —— 为什么我打算…

【技术解决方案】GitHub本地仓库管理与远程仓库管理

本地仓库管理 设置用户名 git config --global user.name CnYiXiaoNaiHe 设置邮箱 git config --global user.email 1969118063qq.com 该设置在Github仓库主页显示谁提交了该文件 创建新文件夹&#xff0c;打开&#xff0c;然后执行 git init 把文件从工作区提交到暂存…

jboss war包放哪_如何将JBoss HR Employee Rewards项目放入云端

jboss war包放哪我们一直在讨论为什么应用程序开发人员在App Dev Cloud Stack系列中不能再忽略其堆栈了。 我们从头到尾讨论了各个层次&#xff0c;但尚未为您提供除Red Hat Container Development Kit&#xff08;CDK&#xff09;之外的任何应用程序开发工具。 到目前为止&am…

hotspot 垃圾收集器_HotSpot增量Java垃圾收集器

hotspot 垃圾收集器在我最近的博客文章“ 确定活动的HotSpot垃圾收集器”中 &#xff0c;我描述了可用于确定HotSpot JVM &#xff08;Java进程&#xff09;正在使用的垃圾收集器&#xff08;当从命令行参数&#xff08;标志&#xff09;中变得不明显时&#xff09;的不同方法。…

python聚类分析成绩反思_机器学习python实践——二分K-means聚类

说这算法之前的话&#xff0c;前期的准备工作&#xff0c;请看我前面的博客。上一篇&#xff0c;我说到了K-means聚类算法&#xff0c;但是有很多的不足&#xff0c;有很多能够改进的地方&#xff0c;例如&#xff0c;怎样使得聚类效果达到全局最优(可能的最好结果)呢&#xff…

apache spark_如何将自定义数据源集成到Apache Spark中

apache spark如今&#xff0c;流数据是一个热门话题&#xff0c;而Apache Spark是出色的流框架。 在此博客文章中&#xff0c;我将向您展示如何将自定义数据源集成到Spark中。 Spark Streaming使我们能够从各种来源流式传输&#xff0c;同时使用相同的简洁API访问数据流&#…

python采用函数编程模式_浅谈Python 函数式编程

匿名函数lambda表达式什么是匿名函数&#xff1f;匿名函数&#xff0c;顾名思义就是没有名字的函数&#xff0c;在程序中不用使用 def 进行定义&#xff0c;可以直接使用 lambda 关键字编写简单的代码逻辑。lambda 本质上是一个函数对象&#xff0c;可以将其赋值给另一个变量&a…

【安卓开发 】Android初级开发(一)控件通用属性

控件通用属性 match_parent 是指和父容器宽高相等的值&#xff0c;其他的同理可证。 android:layout_marginTop"XXXXXXdp" 距离顶部的距离 Android TextView属性详解 该控件相关属性 Android EditText属性大全 相关属性查看地址 事件监听处理 package com.examp…

dynamodb java_使用Java将项目插入DynamoDB表

dynamodb java在上一篇文章中&#xff0c;我们学习了如何使用Java创建DynamoDB表。 下一步是将项目插入到先前创建的DynamoDB表中。 请记住&#xff0c;对于插入操作&#xff0c;最基本的步骤是指定主键。 对于表用户&#xff0c;主键是属性电子邮件。 您可以根据需要添加任意…

成都python数据分析师职业技能_数据分析师需要什么技能,数据分析行业都有什么职业?...

就目前而言&#xff0c;很多人看到了数据分析行业的光明前景&#xff0c;于是就想进入数据分析的行业中&#xff0c;但是&#xff0c;想成为一名合格的数据分析师&#xff0c;需要掌握很多的技能&#xff0c;那么一名合格的数据分析师需要掌握哪些技能呢&#xff1f;现在的数据…

【安卓开发 】Android初级开发(零)各种布局

线性布局的重要属性 (LinearLayout) 相关属性链接 layout_width 和 layout_height是布局器相对于外部构件的一个宽高距离。 layout_margin是指与外部控件的整个边缘距离。 padding是指与控件的内边距离 android:orientation 方向作用于整个布局中的所有控件 android:layo…

jboss fuse 教程_JBoss Fuse:使用JEXL的动态蓝图文件

jboss fuse 教程在本文中&#xff0c;我将展示如何在Apache Aries Blueprint xml文件中添加一些内联脚本。 我不一定会称其为最佳实践&#xff0c;但我一直有这样的想法&#xff1a;这种能力可能有用。 可能当我被迫使用xml来模拟命令式编程结构&#xff08;例如使用Apache An…