07点睛Spring MVC4.1-ContentNegotiatingViewResolver
转发地址:https://www.iteye.com/blog/wiselyman-2214965
7.1 ContentNegotiatingViewResolver
- ContentNegotiatingViewResolver支持在Spring MVC下输出不同的格式;
- ContentNegotiatingViewResolver是ViewResolver的一个实现;
- ContentNegotiatingViewResolver使用request的媒体类型,根据扩展名选择不同的view输出不同的格式;
- ContentNegotiatingViewResolver不是自己处理view,而是代理给不同的ViewResolver来处理不同的view;
- 本例演示根据扩展名获得不同的页面;
- jsp
- view:
WEB-INF/views/demoObj.jsp - viewResolver:
UrlBasedViewResolver或InternalResourceViewResolver
- view:
- pdf
- view:
PdfView - viewResolver:
PdfViewResolver
- view:
- json
- view:
MappingJackson2JsonView - viewResolver:
JsonViewResolver
- view:
- xml
- view:
MarshallingView - viewResolver:
XmlViewResolver
- view:
- xls
- view:
XlsView - viewResolver:
XlsViewResolver
- view:
7.2 示例
7.2.1 添加依赖
依赖
- json依赖
03点睛Spring MVC 4.1-REST已添加 - xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring-framework.version}</version>
</dependency><dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>4.2.1</version>
</dependency>- xls
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.10-beta2</version>
</dependency>- json依赖
7.2.2 定制view和viewResolve
7.2.2.1 pdf
7.2.2.1.1 view
package com.wisely.view; import java.awt.Color;
import java.util.Map; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.view.document.AbstractPdfView; import com.lowagie.text.Document;
import com.lowagie.text.Element;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;
import com.wisely.domain.DemoObj; public class PdfView extends AbstractPdfView { @Override
protected void buildPdfDocument(Map<String, Object> model,
Document document, PdfWriter writer, HttpServletRequest request,
HttpServletResponse response) throws Exception {
DemoObj demoObj = (DemoObj) model.get("demoObj"); PdfPTable table = new PdfPTable(2);
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
table.getDefaultCell().setVerticalAlignment(Element.ALIGN_MIDDLE);
table.getDefaultCell().setBackgroundColor(Color.lightGray); table.addCell("ID");
table.addCell("NAME"); table.addCell(demoObj.getId().toString());
table.addCell(demoObj.getName()); document.add(table);
} }
7.2.2.1.2 viewResolver
package com.wisely.viewresolver; import java.util.Locale; import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver; import com.wisely.view.PdfView; public class PdfViewResolver implements ViewResolver{ @Override
public View resolveViewName(String viewName, Locale locale)
throws Exception {
return new PdfView();
} }
7.2.2.2 xls
7.2.2.2.1 view
package com.wisely.view; import java.util.Map; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.springframework.web.servlet.view.document.AbstractExcelView; import com.wisely.domain.DemoObj; public class XlsView extends AbstractExcelView{ @Override
protected void buildExcelDocument(Map<String, Object> model,
HSSFWorkbook workbook, HttpServletRequest request,
HttpServletResponse response) throws Exception {
DemoObj demoObj = (DemoObj) model.get("demoObj"); Sheet sheet = workbook.createSheet("sheet1");
CellStyle style = workbook.createCellStyle();
style.setFillForegroundColor(IndexedColors.GREY_40_PERCENT.index);
style.setFillPattern(CellStyle.SOLID_FOREGROUND);
style.setAlignment(CellStyle.ALIGN_CENTER);
Row row = null;
Cell cell = null;
int rowCount = 0;
int colCount = 0; // 创建头部
row = sheet.createRow(rowCount++); cell = row.createCell(colCount++);
cell.setCellStyle(style);
cell.setCellValue("ID"); cell = row.createCell(colCount++);
cell.setCellStyle(style);
cell.setCellValue("NAME"); // 创建数据
row = sheet.createRow(rowCount++);
colCount = 0;
row.createCell(colCount++).setCellValue(demoObj.getId());
row.createCell(colCount++).setCellValue(demoObj.getName());
for (int i = 0; i < 3; i++)
sheet.autoSizeColumn(i, true); } }
7.2.2.2.2 viewResolver
package com.wisely.viewresolver; import java.util.Locale; import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver; import com.wisely.view.XlsView; public class XlsViewResolver implements ViewResolver{ @Override
public View resolveViewName(String viewName, Locale locale)
throws Exception {
return new XlsView();
} }
7.2.2.3 json
7.2.2.3.1 view
使用的是MappingJackson2JsonView
7.2.2.3.2 viewResolver
package com.wisely.viewresolver; import java.util.Locale; import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView; public class JsonViewResolver implements ViewResolver{ @Override
public View resolveViewName(String viewName, Locale locale)
throws Exception {
MappingJackson2JsonView view = new MappingJackson2JsonView();
view.setPrettyPrint(true);
return view;
} }
7.2.2.4 xml
7.2.2.4.1 DemoBean的额外配置
package com.wisely.domain; import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "demo")
public class DemoObj {
private Long id;
private String name; public DemoObj() {
super();
} public DemoObj(Long id, String name) {
super();
this.id = id;
this.name = name;
} public Long getId() {
return id;
} @XmlElement
public void setId(Long id) {
this.id = id;
} public String getName() {
return name;
} @XmlElement
public void setName(String name) {
this.name = name;
} }
7.2.2.4.2 view
使用的是MarshallingView
7.2.2.4.3 viewResolver
package com.wisely.viewresolver; import java.util.Locale; import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.view.xml.MarshallingView; import com.wisely.domain.DemoObj; public class XmlViewResolver implements ViewResolver { @Override
public View resolveViewName(String viewName, Locale locale)
throws Exception {
MarshallingView view = new MarshallingView();
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setClassesToBeBound(DemoObj.class);
marshaller.setPackagesToScan("com.wisely.domain");
view.setMarshaller(marshaller);
return view;
} }
7.2.2.5 jsp
7.2.2.5.1 view
WEB-INF/views/demoObj.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
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=UTF-8">
<title>Insert title here</title> </head>
<body>
id/name <br/>
${demoObj.id}/${demoObj.name}
</body>
</html>
7.2.2.5.2 viewResolver
UrlBasedViewResolver或InternalResourceViewResolver
7.2.3 配置resolver
package com.wisely; import java.util.ArrayList;
import java.util.List; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.web.accept.ContentNegotiationManager;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.ContentNegotiatingViewResolver;
import org.springframework.web.servlet.view.JstlView;
import org.springframework.web.servlet.view.UrlBasedViewResolver; import com.wisely.interceptors.DemoInteceptor;
import com.wisely.viewresolver.JsonViewResolver;
import com.wisely.viewresolver.PdfViewResolver;
import com.wisely.viewresolver.XlsViewResolver;
import com.wisely.viewresolver.XmlViewResolver; @Configuration
@ComponentScan("com.wisely")
@EnableWebMvc
public class DemoMVCConfig extends WebMvcConfigurerAdapter { //在此---jsp viewResolver
@Bean
public UrlBasedViewResolver viewResolver() {
UrlBasedViewResolver resolver = new UrlBasedViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
return resolver;
} // 注册自定义拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(demoInteceptor());
} // 自定义拦截器
@Bean
public DemoInteceptor demoInteceptor() {
return new DemoInteceptor();
} // 静态资源映射
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/js/**").addResourceLocations("/js/");
} // 文件上传设置
@Bean
public MultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setMaxUploadSize(1000000);
return multipartResolver;
} // 在此---配置ContentNegotiationManager,在无后缀名情况下默认为jsp view resolver
@Override
public void configureContentNegotiation(
ContentNegotiationConfigurer configurer) {
configurer.ignoreAcceptHeader(true).defaultContentType(
MediaType.TEXT_HTML);
} // 在此---配置ContentNegotiatingViewResolver,通过此代理到不同的viewResolover
@Bean
public ViewResolver contentNegotiatingViewResolver(
ContentNegotiationManager manager) { ContentNegotiatingViewResolver resolver = new ContentNegotiatingViewResolver();
resolver.setContentNegotiationManager(manager);
List<ViewResolver> resolvers = new ArrayList<ViewResolver>(); resolvers.add(xmlViewResolver());
resolvers.add(jsonViewResolver());
resolvers.add(viewResolver());// jsp view resolver
resolvers.add(pdfViewResolver());
resolvers.add(xlsViewResolver()); resolver.setViewResolvers(resolvers);
return resolver;
} //在此---xml viewResolver
@Bean
public ViewResolver xmlViewResolver() {
return new XmlViewResolver();
} //在此---json viewResolver
@Bean
public ViewResolver jsonViewResolver() {
return new JsonViewResolver();
}
//在此---pdf viewResolver
@Bean
public ViewResolver pdfViewResolver() {
return new PdfViewResolver();
}
//在此---excel viewResolver
@Bean
ViewResolver xlsViewResolver() {
return new XlsViewResolver();
} }
7.2.4 演示控制器
package com.wisely.web; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import com.wisely.domain.DemoObj; @Controller
public class ContentController {
@RequestMapping(value = "/getdemo",method = RequestMethod.GET)
public String getDemo(Model model){
DemoObj demoObj = new DemoObj(333l, "WYF");
model.addAttribute("demoObj",demoObj);
return "demoObj"; } }
7.2.5 结果
7.2.5.1 jsp

7.2.5.2 json

7.2.5.3 pdf

7.2.5.4 xml

7.2.5.5 xls

07点睛Spring MVC4.1-ContentNegotiatingViewResolver的更多相关文章
- 08点睛Spring MVC4.1-Spring MVC的配置(含自定义HttpMessageConverter)
8.1 配置 Spring MVC的配置是通过继承WebMvcConfigurerAdapter类并重载其方法实现的; 前几个教程已做了得配置包括 01点睛Spring MVC 4.1-搭建环境 配置 ...
- 09点睛Spring MVC4.1-异步请求处理(包含兼容浏览器的服务器端推送)
转发地址:https://www.iteye.com/blog/wiselyman-2215852 9.1 异步请求处理 Servlet 3开始支持异步请求处理 Spring MVC 3.2开始支持S ...
- 10点睛Spring MVC4.1-全局异常处理
10.1 全局异常处理 使用@ControllerAdvice注解来实现全局异常处理; 使用@ControllerAdvice的属性缩小处理范围 10.2 演示 演示控制器 package com.w ...
- Struts2、Spring MVC4 框架下的ajax统一异常处理
本文算是struts2 异常处理3板斧.spring mvc4:异常处理 后续篇章,普通页面出错后可以跳到统一的错误处理页面,但是ajax就不行了,ajax的本意就是不让当前页面发生跳转,仅局部刷新, ...
- spring mvc4:异常处理
前面学习过struts2的异常处理,今天来看下spring mvc4的异常处理: 一.Servlet配置文件修改 <bean id="exceptionResolver" c ...
- Spring Mvc4 新特性(一)
前言 Spring Framework的Web层,由spring-web,spring-webmvc,spring-websocket和spring-webmvc-portlet模块组成. 很多人刚学 ...
- 02点睛Spring MVC 4.1-@RequestMapping
转发地址:https://www.iteye.com/blog/wiselyman-2213907 2.1 @RequestMapping @RequestMapping是SpringMVC的核心注解 ...
- 07.深入浅出 Spring Boot - 数据访问之Mybatis(附代码下载)
MyBatis 在Spring Boot应用非常广,非常强大的一个半自动的ORM框架. 代码下载:https://github.com/Jackson0714/study-spring-boot.gi ...
- Spring MVC 之 ContentNegotiatingViewResolver
我们已经知道 对于 RequestMappingInfoHandlerMapping, 它在对带有后缀的http 请求进行匹配的时候,如果找不到精确的pattern, 那么就会 pattern+.* ...
随机推荐
- 特别的表格(overflow:hidden的一个小应用)
做多个li,对各个边的边框有不同的要求,三层盒子,第一层盒子放li,设置右边和下边的虚线边框,浮动,第二层盒子ul设置宽度使li排列,第三层盒子最大的盒子,使用overflow:hidden,宽度高度 ...
- GSS4 D - Can you answer these queries IV
//给你一个序列,有两种操作: //1.给定x和y,将区间[x,y]内的数开方 //2.询问区间和 // // 因为一个longlong类型的数最多开6次方就变成了1,所以对于1操作,我们暴力修改, ...
- 【转】浅析Linux中的零拷贝技术
本文探讨Linux中主要的几种零拷贝技术以及零拷贝技术适用的场景.为了迅速建立起零拷贝的概念,我们拿一个常用的场景进行引入: 引文## 在写一个服务端程序时(Web Server或者文件服务器),文件 ...
- P5385 [Cnoi2019]须臾幻境(LCT+主席树,思维题)
题目 P5385 [Cnoi2019]须臾幻境 做法 考虑一条边\((u,v)\)是否\([L,R]\)中的贡献:\([L,R]\)中第一条位于\(u,v\)链的边,则减少了一个联通块 实现:\(LC ...
- [学习笔记] 二叉查找树/BST
平衡树前传之BST 二叉查找树(\(BST\)),是一个类似于堆的数据结构, 并且,它也是平衡树的基础. 因此,让我们来了解一下二叉查找树吧. (其实本篇是作为放在平衡树前的前置知识的,但为了避免重复 ...
- svn部署-linux
Svn作用 Subversion是一个自由/开源的版本控制系统,一组文件存放在中心版本库,记录每一次文件和目录的修改,Subversion允许把数据恢复到早期版本,或是检查数据修改的历史,Subver ...
- UML图中时序图的基本用法
快速阅读 序列图主要用来更直观的表现各个对象交互的时间顺序,将体现的重点放在 以时间为参照,各个对象发送.接收消息,处理消息,返回消息的 时间流程顺序,也称为时序图. 里面用到的基本元素如下: 角色- ...
- HikariCP 连接最快的连接池
三点原因 1.字节码精简 2.自定义 FastList 代替ArrayList ;避免每次get()调用都要进行range check,避免调用remove()时的从头到尾的扫描: 3.优化代码和拦截 ...
- 第06组 Alpha冲刺(2/6)
队名:拾光组 组长博客链接 作业博客链接 团队项目情况 燃尽图(组内共享) 组长:宋奕 过去两天完成了哪些任务 主要完成了上传照片模块的信息采集 具体完成了采集用户上传的照片信息.分析图像数据.比对数 ...
- PHP如何解决网站大流量与高并发的问题(四)
动态语言的并发处理 相关概念 什么是进程.线程.协程 什么是多进程.多线程 同步阻塞模型 异步非阻塞模型 php并发编程实践 什么是进程.线程.协程 进程 进程是一个执行中的程序 进程的三态模型:多道 ...