`

velocity输出csv的一种做法

    博客分类:
  • java
阅读更多

 

使用spring mvc + velocity做项目时,输出csv文件做法是在controller自行调用httpResponse输出。

如果希望通过velocity输出csv内容,以下提供一种实现方式

 

 

1.新增ToCSVView,继承自VelocityView,重写rander方法,内容为设置http header与content type

public class ToCSVView extends VelocityView {
	
	/**
	 * Process the model map by merging it with the Velocity template.
	 * Output is directed to the servlet response.
	 * <p>This method can be overridden if custom behavior is needed.
	 */
	protected void renderMergedTemplateModel(
			Map model, HttpServletRequest request, HttpServletResponse response) throws Exception {

		exposeHelpers(model, request);

		Context velocityContext = createVelocityContext(model, request, response);
		exposeHelpers(velocityContext, request, response);
		exposeToolAttributes(velocityContext, request);

		
		doRender(velocityContext, response);
	
		//以下为我们自行的修改
		String fileName = "data.csv";
		
		response.setContentType("text/plain;charset=gbk");
		response.setHeader("Content-Disposition", "attachment;filename=\""
				+ fileName + "\"");

		// 确保IE识别本次为下载文件
		response.setHeader("Content-Transfer-Encoding", "binary");
		response.setHeader("Cache-Control",
				"must-revalidate, post-check=0, pre-check=0");
		response.setHeader("Pragma", "public");
	}
}

 

2.新增ToCSVViewResolver,继承自VelocityViewResolver,重写loadView方法,后缀是csv进行渲染。

public class ToCSVViewResolver extends org.springframework.web.servlet.view.velocity.VelocityViewResolver implements Ordered {
	public static final String VIEW_CSV = ".csv"; 
	
	/* (non-Javadoc)
	 * @see org.springframework.web.servlet.view.AbstractCachingViewResolver#loadView(java.lang.String, java.util.Locale)
	 */
	@Override
	protected View loadView(String viewName, Locale locale) throws Exception {
		if(viewName.endsWith(VIEW_CSV)) {
			AbstractUrlBasedView view = buildView(viewName);
			return (View) getApplicationContext().getAutowireCapableBeanFactory().initializeBean(view, viewName);
		}
		return null;
	}

 

3.ToCSVViewResolver重写buildView方法,使用我们的ToCSVView进行渲染,从而实现content-type和http头的修改

protected AbstractUrlBasedView buildView(String viewName) throws Exception {
		ToCSVView view = (ToCSVView) super.buildView(viewName);
		view.setVelocityFormatterAttribute(this.velocityFormatterAttribute);
		view.setDateToolAttribute(this.dateToolAttribute);
		view.setNumberToolAttribute(this.numberToolAttribute);
		if (this.toolboxConfigLocation != null) {
//			((VelocityToolboxView) view).setToolboxConfigLocation(this.toolboxConfigLocation);
		}
		return view;
	}

 

4.ToCSVViewResolver参数配置拷贝自velocity配置

<bean id="toCSVViewResolver" class="view.ToCSVViewResolver">
  <property name="prefix" value="/"></property>
  <property name="suffix" value=".vm"></property>
  <property name="exposeSpringMacroHelpers" value="true" />
  <property name="exposeRequestAttributes" value="true" />
  <property name="exposeSessionAttributes" value="true" />
  <property name="allowRequestOverride" value="true" />
  <property name="allowSessionOverride" value="true" />
  <property name="contentType" value="text/plain;charset=gbk" />
  <property name="order" value="5"></property>
 </bean>

 

5.检查dispatcher-servlet是否接收了csv后缀的请求,检查完毕就可以测试了~~写一个controller,页面为vm,打开后识别为下载文件

 

 test.vm文件

日期,数量
#foreach($info in $infoList)
$info.date,$info.count
#end

 

 

 

  

  • 大小: 12.4 KB
分享到:
评论

相关推荐

    Apache Velocity - Velocity User Guide

    VTL 是一种专为 Velocity 设计的轻量级脚本语言,旨在简化模板设计和动态内容生成过程。 #### 六、你好 Velocity 世界!(Hello Velocity World!) 这部分提供了一个简单的入门示例,类似于编程语言中的“Hello ...

    velocity-texen111

    Texen这个名字是“Template eXecution Environment”的缩写,它为Velocity提供了一种方便的方式来组织和执行模板,以创建复杂的文档或代码生成任务。 **Apache Velocity简介** Apache Velocity是一个开源的Java...

    Camel-CSV2SQL-Example:示例 Camel 单路由使用 Spring Java 配置,通过 JMS (ActiveMQ) 队列获取 CSV 文件,通过 Velocity 模板处理它,并将 SQL INSERT 语句输出到另一个 JMS 队列

    3. **JMS(ActiveMQ)**:JMS是一种消息传递标准,用于在分布式系统中异步通信。ActiveMQ是实现JMS的一个开源服务器,它提供了一个队列服务,用于存储和转发消息。在本例中,Camel会从一个ActiveMQ队列读取CSV文件,...

    CoDeSys Quickstart 2.0

    CoDeSys(Controlled Development System)是一种符合IEC 61131-3标准的编程语言,主要用于TwinLine TLC6XX系列伺服和步进驱动器。它允许开发者构建功能完备的可编程逻辑控制器(PLC),能够控制驱动器的工作模式、...

    【有限元分析】ansys-fluent 多空介质流体分析.rar

    【有限元分析】ansys-fluent 多空介质流体分析是针对复杂流体流动问题进行数值模拟的一种方法。在工程领域,如航空航天、汽车工业、环境工程等,经常需要解决涉及多孔介质的流体动力学问题。ansys-fluent作为一款...

    z_波浪;浮子;平均功率_源码

    CSV是一种常见的数据交换格式,用于存储表格数据。在这里,它们可能记录了浮子在不同波浪周期或状态下(例如,7秒周期和4秒周期的波浪)的速度变化,这对于分析浮子的动力响应和能量转化至关重要。 2. "z.m":这是一...

    CX5120+EL3054带台达ASAD-2伺服全闭环控制配置过程.docx

    在工业自动化领域,全闭环控制是一种高级的控制策略,它能够提供更精确的位置、速度和力矩控制。这里我们讨论的是使用倍福(Beckhoff)CX5120控制器结合EL3054模块来实现对台达(Delta)ASAD-2伺服驱动器的全闭环...

    大数据实战data.rar

    3. CSV(Comma-Separated Values)文件:这是一种通用的表格数据格式,使用逗号分隔各个字段。CSV文件在大数据分析中广泛使用,因为它们可以轻松导入到各种数据分析工具中,如Excel、Pandas库(Python)或Hadoop。 ...

    calc_velocity.rar_图形图像处理_matlab_

    在IT领域,尤其是在科学计算和数据分析中,MATLAB是一种广泛使用的高级编程语言。这个名为"calc_velocity.rar"的压缩包文件显然与使用MATLAB进行图形图像处理相关,特别是计算某个表面上的切线速度。让我们深入探讨...

    生成PDF报表.rar

    PDF是一种通用的文档格式,能够跨平台、跨设备保持一致的显示效果,常用于报告、发票、合同等文档的分享和存储。 在JSP(JavaServer Pages)环境中,生成PDF报表通常涉及到以下知识点: 1. **iText库**:这是一个...

    Struts2AndJasperReport实例

    Struts2 提供了一种组织和控制 web 应用程序的方式,通过拦截器来处理请求,实现了动作与视图的解耦,使得代码结构更加清晰。它支持多种视图技术,如 JSP、FreeMarker、Velocity 等,以及多种结果类型,如转发、...

    大数据处理技术教程+hadoop+docker

    - **MapReduce**:一种分布式计算模型,适合处理大规模数据集。 2. **Spark**:一个快速、通用的集群计算系统,用于大规模数据处理。 - 支持多种计算模式,如批处理、流处理和机器学习。 - 相较于MapReduce,...

    英士达机电E系列EtherCAT总线步进驱动器使用手册

    EtherCAT,全称为Ethernet for Control Automation Technology,是由Beckhoff Automation GmbH开发的一种高速实时以太网通信标准,现在由 EtherCAT Technology Group (ETG) 维护和推广。该技术适用于自动化控制领域...

    NVelocity模板引擎

    NVelocity作为一款强大的模板引擎,为.NET开发者提供了一种高效、灵活的方式去处理动态内容的生成。通过分离视图和逻辑,可以提升代码的可维护性和可扩展性,是构建现代应用程序的重要工具。了解并熟练掌握NVelocity...

    big-data-analytics

    大数据分析是当前IT领域的一个重要趋势,而MATLAB作为一种强大的数据分析工具,在处理大数据方面提供了丰富的功能和解决方案。通过利用MATLAB提供的各种工具和技术,用户可以在处理大数据时更加高效、灵活。无论是从...

    struts2 + jasper report

    Struts2是一个强大的MVC(Model-View-Controller)框架,它为Web应用程序提供了一种组织业务逻辑和控制层的方式。而JasperReport则是一个开源的报告生成工具,能够创建复杂的报表和图表,支持多种数据源,如数据库、...

    自定义mystruts

    在Java Web开发领域,Struts框架是MVC(Model-View-Controller)设计模式的一种实现,极大地简化了Web应用的构建。然而,有时我们需要根据项目需求对Struts进行定制,使其更符合我们的业务逻辑。本文将深入探讨如何...

    台达伺服A2系列使用手册

    - **支持通讯协议**:台达ASDA-A2系列伺服驱动器支持EtherCAT通讯协议,这是一种高性能的工业以太网通讯技术。 - **通讯速率**:最高可达100Mbps,确保了高速数据传输能力。 - **节点数量**:最大可支持125个节点,...

    Particle_Swarm_Opti​mization:对 pso 的讨论-matlab开发

    粒子群优化(Particle Swarm Optimization, PSO)是一种模拟自然界中鸟群或鱼群群体行为的全局优化算法。在 MATLAB 开发环境中,PSO 被广泛应用于解决多模态优化问题,例如在最大功率点跟踪(Maximum Power Point ...

    BigData_lab1

    6. **Spark入门**:Spark是另一种大数据处理框架,以其快速处理速度而闻名。实验可能包含Spark的简单应用,比如使用Java API创建SparkSession,加载数据,执行数据转换和操作。 7. **实时流处理**:如果实验深度较...

Global site tag (gtag.js) - Google Analytics