SpringMVC 之Resolver视图解析器笔记(六)
来源:互联网 发布:网络使人疏远 反方问题 编辑:程序博客网 时间:2024/05/17 04:36
Spring所支持的Resolver 非常多,但是我们最为常用的还是 InternalResourceViewResolver 。常规就是贴出一下InternalResourceViewResolver的常用配置:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/views/" p:suffix=".jsp" p:order="99"></bean>
这里我说一下其余的两个resolver
BeanNameViewResolver 这个resolver会找到相应的bean最为view这个非常有用,我们会使用这个resolver处理一些导出EXCEL和导出PDF的view,当然也有人使用这个来做JSON和XML View的视图解析,但是一般情况下我都是采用HttpMessageConvert做JSON和XML的输出。
CommonsMultipartResolver 这个用于文件上传之用。
其他还有什么国际化的、解析为URL文件的等等,这里就不再细说。下面我会做一个excel导出 和文件上传功能,来感受BeanNameViewResolver和CommonsMultipartResolver的作用。
EXCEL导出
Excel导出在SpringMVC非常简单,我们需要实现一个AbstractXlsxView的类,作为相应的View。然后通过BeanNameViewResolver 获得并使用这个View的输出进行响应。
编写一个导出用户数据excel的view
public class UserListExcelView extends AbstractXlsxView { protected void buildExcelDocument(Map<String, Object> map, Workbook workbook, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { httpServletResponse.setHeader(HttpHeaders.CONTENT_DISPOSITION, "inline;filename=" + new String("UserList.xlsx".getBytes(), "utf-8")); List<User> resultList = (List<User>) map.get("userList"); Sheet sheet = workbook.createSheet("UserList"); Row header = sheet.createRow(0); header.createCell(0).setCellValue("User id"); header.createCell(1).setCellValue("User name"); header.createCell(2).setCellValue("User Password"); int rowIndex = 1; for (User userItem : resultList) { Row rowItem = sheet.createRow(rowIndex++); rowItem.createCell(0).setCellValue(userItem.getUserId()); rowItem.createCell(1).setCellValue(userItem.getUsername()); rowItem.createCell(2).setCellValue(userItem.getPwd()); } }}
使用之前我们需要一些依赖包的支持,maven的dependence:
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --><dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.9</version></dependency>
然后将我们写的UserListExcelView 配置为springMVC的bean:
<bean id="userListEXCEL" class="com.maxfunner.view.UserListExcelView"/>
最后我们需要定义BeanNameViewResolver,如果我们同时定义了InternalResourceViewResolver的话,需要注意优先级的问题。优先级后面会说
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="10"/>
然后就在controller中编写一个处理方法:
@RequestMapping("/userListExport")public ModelAndView getUserList() { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("userListEXCEL"); modelAndView.addObject("userList", this.userService.getUserByIdRange(0, 30)); return modelAndView;}
这里可以看见我们在设置ViewName的时候,是设置的<bean id="userListEXCEL" class="com.maxfunner.view.UserListExcelView"/>这个bean的id。BeanNameViewResolver主要的目的就是找到相对于ViewName的Bean作为视图。
但是InternalResourceViewResolver也会解析viewName,这个就涉及都一个优先级的问题,如果InternalResourceViewResolver优先级比较高,那么InternalResourceViewResolver会直接去找userListEXCEL.jsp这个文件,然后就不会执行BeanNameViewResolver的解析。所以我们应该将BeanNameViewResolver的优先级调高,如果BeanNameViewResolver发现有ID为userListEXCEL的bean就直接处理解析,如果没有找到就将这个处理请求交由InternalResourceViewResolver。
刚刚XML配置中的Order属性就是优先级,数值越小越优先。由于我们定义了InternalResourceViewResolver,所以我们需要将InternalResourceViewResolver设置一个较大的值,然后BeanNameViewResolver设置为一个较小的值。
然后我们尝试访问/userListExport就会获得一份Excel。
需要提醒的是,在以前的版本中使用AbstractExcelView,但是已经被废弃了,现在是使用AbstractXlsxView这个接口。AbstractXlsxView导出的是xlsx文件后缀的excel文件。
顺便一提:如果想导出PDF的话 是实现AbstractPdfView 同理也是使用BeanNameViewResolver作为解析器。以下是需要实现PDF导出的依赖包的pom文件dependence:
<dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <version>2.1.7</version></dependency>
SpringMVC的文件上传
使用SpringMVC进行文件上传功能相对比较简单,使用CommonsMultipartResolver作为解析器,以下是相应的配置:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="utf-8"></property> <property name="maxUploadSize" value="10485760000"></property> <property name="uploadTempDir" value="upload/temp"></property> <property name="maxInMemorySize" value="40960"></property></bean>
还有一些依赖包:
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --><dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.2</version></dependency><!-- https://mvnrepository.com/artifact/commons-io/commons-io --><dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version></dependency>
最后就是相应的controller处理方法
@RequestMapping("/uploadFile.action")public ModelAndView updateFile(@RequestParam(value = "file",required = false) MultipartFile file, HttpSession session) throws IOException { ModelAndView modelAndView = new ModelAndView(); if (file == null || file.isEmpty()) { modelAndView.setViewName("redirect:/user/uploadFile.html"); } else { File targetFile = new File(session.getServletContext().getRealPath("/image"), file.getOriginalFilename()); if (!targetFile.getParentFile().exists() || !targetFile.getParentFile().isDirectory()) { targetFile.getParentFile().mkdirs(); } file.transferTo(targetFile); modelAndView.addObject("imagePath", targetFile.getName()); modelAndView.setViewName("showImage"); } return modelAndView;}
BeanNameViewResolver如果View的bean比较多会导致MVC的配置文件极度不简洁,所以我们可以使用一个单独的XML作为View的bean定义:
<bean class="org.springframework.web.servlet.view.XmlViewResolver" p:order="20" p:location="views.xml" />
XmlViewResolver是定义view的xml文件位置。需要注意的是views.xml 定义的bean都不会被MVC容器中的bean所使用,这写bean只提供给相应的解释器使用。
views.xml的配置如下,其实就一个份普通的Spring配置文件:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="userListEXCEL" class="com.maxfunner.view.UserListExcelView"/> </beans>
- SpringMVC 之Resolver视图解析器笔记(六)
- Springmvc视图解析器(一)resolver解析器和view视图 【Springmvc】
- SpringMVC之视图解析器(ViewResolver)
- SpringMVC之视图解析器(ViewResolver)
- springmvc之视图和视图解析器
- springmvc之视图和视图解析器
- (开发笔记)转载:SpringMVC介绍之视图解析器ViewResolver
- SpringMVC学习笔记 视图解析器
- SpringMVC介绍之视图解析器ViewResolver
- SpringMVC介绍之视图解析器ViewResolver
- SpringMVC介绍之视图解析器ViewResolver
- SpringMVC介绍之视图解析器ViewResolver
- SpringMVC介绍之视图解析器ViewResolver
- SpringMVC介绍之视图解析器ViewResolver
- SpringMVC介绍之视图解析器ViewResolver
- SpringMVC介绍之视图解析器ViewResolver
- SpringMVC介绍之视图解析器ViewResolver
- SpringMVC介绍之视图解析器ViewResolver
- zabbix监控系统-部署规划
- 使用account lock或者account unlock语句
- 使用MySQLAdmin工具查看QPS
- 使用ajax、servlet实现多文件的上传
- TortoiseSVN忽略文件或文件夹
- SpringMVC 之Resolver视图解析器笔记(六)
- sql语句的日期函数
- struts2接收参数的几种形式
- 高通camera如何匹配I2C总线
- CoIDE串口重定向printf
- 安卓TraceView性能优化工具
- HttpSecurityBeanDefinitionParser浅析
- urlrewrite.xml配置
- 水电费第三方