xml文件生成与下载
写在前面:
最近要做一个新的功能,点击按钮,可以根据数据生成对应的xml文件并保存。下面记录一下在做的过程的一些疑惑与问题(我就是太笨了,一些很简单的知识都不知道,不过通过这次跟蛋蛋的交流,解决了我的很多疑惑~~~啊哈哈哈。。。)
思考(做的过程中的疑惑):
1.如何将实体类转成xml格式的文件?
经查阅资料,生成xml格式的文件有很多种方法,dom、jdom、dom4j等,这里我采用的是jdom,具体的生成xml格式的过程可以看后面的代码部分。
2.点击按钮可以生成xml文件,这个是可以做到的,但是在浏览器页面上却没有弹出提示框让用户选择文件的保存路径,那么这个弹出框是从哪里来的呢?
原来这个下载弹出框,是需要我们在程序中设置的,就是需要我们设置response的响应头信息,设置之后,浏览器就会知道要弹出下载框。
3.这个功能跟文件下载功能有什么区别?
没有区别,生成xml文件,并保存,就是一个文件下载的功能
4.什么是文件下载?
文件下载的本质就是内容的输出。内容从哪里来?那么既然说是内容的输出,那这内容从何而来?大概有两种方式,第一,读取其他文件的内容;第二,在程序中,创建出一个内容,例如,一个字符串。如何输出?都说是输出,那肯定就是用OutputStream输出流来输出了。具体输出到哪儿?这里的输出并不是直接输出到文件里,而是把内容写到response响应里面,然后交给浏览器去做将内容写入到文件里的操作。
5.什么是服务器内存?服务器磁盘?
服务器内存是内存,磁盘是磁盘,两者不可混淆,但是要明白一点,文件下载,首先是要将内容保存到服务器内存中,然后才是从内存中写入到磁盘中。
6.使用ajax请求进行文件下载可以吗?
不可以的,因为ajax是异步的js,而js是不支持往磁盘里写东西的,所以响应流中的内容无法被写入到磁盘中,也就无法实现下载。故这里采用
window.location.href
来发送请求。但是使用ajax请求发送请求是可以接收到响应的内容的。
好啦,在弄清楚了这些疑惑后,下面就开始具体的代码实现过程喽~
前台jsp:
<%--Created by IntelliJ IDEA.User: ElevenDate: 2018/1/3Time: 10:07To change this template use File | Settings | File Templates. --%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <%@ page contentType="text/html;charset=UTF-8" language="java" %><%String scheme = request.getScheme();String serverName = request.getServerName();String contextPath = request.getContextPath();int port = request.getServerPort();//网站的访问跟路径String baseURL = scheme + "://" + serverName + ":" + port+ contextPath;request.setAttribute("baseURL", baseURL); %><html> <head><title>生成xml文件</title><script type="text/javascript">function createXML(){//发送请求到服务器//!!!!对于文件的下载 不能使用ajax请求 因为ajax请求无法实现文件的下载 window.location.href = '${baseURL}/createXML';}</script> </head> <body>点击按钮生成xml文件:<button id="btnClick" onclick="createXML();">生成xml文件</button> </body> </html>
后台action:
/*** Description:com.ims.action* Author: Eleven* Date: 2018/1/2 9:56*/ @Controller("FileAction") public class FileAction extends BaseAction {/*** 文件下载的过程大致分为三大步:* 1.设置response响应头,告知浏览器是文件下载,并弹出那个文件保存的框框* 2.获取输出的内容,并将要输出的内容转为byte[]格式* 3.输出,将内容写到响应中*/public void createXML(){//准备数据Demo d = new Demo();d.setDemoId(11);d.setDemoName("凤姐");Demo d2 = new Demo();d2.setDemoId(22);d2.setDemoName("小花");Demo d3 = new Demo();d3.setDemoId(33);d3.setDemoName("狗子");List<Demo> list = new ArrayList<Demo>();list.add(d);list.add(d2);list.add(d3);//1.设置文件下载的response响应格式String fileName = "demo"; //文件名String fileType = "xml"; //文件类型HttpServletResponse response = ServletActionContext.getResponse();response.setHeader("Content-Disposition", "attachment;filename=" + fileName + "." + fileType);response.setContentType("multipart/form-data");//2.将数据转为xml格式的字符串Element root = new Element("Demo-list");Document document = new Document(root);for(Demo demo:list){Element element = new Element("Demo");element.addContent(new Element("demoId").setText(String.valueOf(demo.getDemoId())));element.addContent(new Element("demoName").setText(demo.getDemoName()));root.addContent(element);}Format format = Format.getPrettyFormat(); //使xml文件 缩进效果XMLOutputter xmlout = new XMLOutputter(format);String result = xmlout.outputString(document);System.out.println("转为xml格式的数据:"+result);try {//3.将内容转为byte[]格式byte[] data = result.getBytes("UTF-8");//4.将内容写入响应流 OutputStream out = response.getOutputStream();out.write(data);out.flush();out.close();} catch (IOException e) {e.printStackTrace();}}}
对于将实体类对象生成xml格式的字符串,这里用到了jdom的工具包,故需要导入jdom-jar包。
sturts.xml配置:
<action name="createXML" class="FileAction" method="createXML"> </action>
好啦,完成了上面的步骤,xml文件的生成与下载就完成了,运行截图:
附:
1.为什么大多数程序都要像下面的代码这样边读边写?
outputStream = new FileOutputStream(file); byte[] temp = new byte[1024]; int size = -1; while ((size = inputStream.read(temp)) != -1) { // 每次读取1KB,直至读完outputStream.write(temp, 0, size); }
为了减少服务器的内存,所以我们经常看见上面这段程序,此程序就是在边读边写(从一个文件中读取内容,然后将内容写到一个文件中),每次读取1kb,每次写1kb。
转载于:https://www.cnblogs.com/eleven258/p/8183119.html
xml文件生成与下载相关推荐
- (C++)将数据库文件导出XML文件以及解析XML文件生成数据库文件的处理方法
将数据库文件导出XML文件以及解析XML文件生成数据库文件的处理方法 思路:将数据库所有要导出的信息通过sql语句得到,存储到结构体中,然后将结构体的内容通过自定义的xml格式导出. 此方法使用的是T ...
- xml文件的书写及读取books.xml文件生成Book类
books.xml文件的书写: <?xml version="1.0" encoding="UTF-8" ?> <!-- <?xml v ...
- C#如何实现XML文件生成和读取,XML文件的打开方式,解决方案!!!!!!
以前对XML文件没什么了解,觉得很神奇,其实C#中的XML文件一般就是你们项目下的配置文件,由根节点和子节点组成. 接下来给大家说说XML文件最基础的读取和生成! 以下为C#程序XML文件生成的控制台 ...
- XML文件生成XSD文件的方法
1.下载一个trang.jar 2.把jar包放在文件任意目录下.如:D:\trang 3.并把你的Response.xml文件放在该文件夹下.例: <?xml version="1. ...
- 根据xml文件生成javaBean
最近有个跟天猫对接的事情,我们需要把天猫的对象转成JavaBean这样好处理 总共有三个步骤 1.利用trang.jar对xml进行xsd的转换 可运行命令:java -jar trang.jar t ...
- 根据xml 文件生成 xsd文件 以及相关测试方法
1.下载trang.jar 下载地址: http://www.java2s.com/Code/Jar/t/Downloadtrang20091111jar.htm 2.用法介绍 将trang.jar ...
- python读xml文件生成头文件_Python根据指定文件生成XML的方法
因项目需要根据指定格式的文件生成XML标注文件,可以方便使用LabelImg打开进行编辑和查看.其原始文件默认使用逗号进行分隔,如下所示: 第1个值:原始图片中切图小文件,以AIpng_x,其中x代表 ...
- 根据xml文件生成对应javabean类
1.把trang.jar包和xml文件放在一起 2.在dos窗口下 输入 java -jar trang.jar xml的文件名字 要生成的xsd文件名字 例如: java -jar 1.xml ...
- 如何引用XML文件生成C#类
目录 XSD File Generate Class File Simply. 1 Why use XSD file to create C# classes?... 2 How to convert ...
最新文章
- R语言使用caret包构建岭回归模型(Ridge Regression )构建回归模型、通过method参数指定算法名称、通过trainControl函数控制训练过程
- 著名统计学家Donald B. Rubin:机器是否可以思考甚至具有意识?
- Online Shopping网上商城数据库设计
- java new关键字
- 从无主之地看FPS+ARPG游戏的发展方向
- java args_Java命令行界面(第2部分):args4j
- 嵌入式软件工程师笔试题
- ##MySql数据库的增删改查方法
- 两名黑客因发现特斯拉漏洞获Model 3一辆和3.5万美元奖金
- 第一次立会(2019.3.24)
- 分布式系统理论(二):一致性协议Paxos
- 使用pt-query-digest,找到不是很合适的sql
- 怎样测网络服务器延迟,网速测试延迟(网络延迟多少正常)
- 计算机网络管理(第二版)自学教程
- android手机不开机刷机,手机无法开机怎么刷机?安卓手机救砖教程
- C# 彻底删除文件或目录,不可恢复,文件清除工具
- 作为一名软件测试人员,有哪些网站是你应该多多关注的,哪些书籍是你必须要看的?
- matlab实验思考,MATLAB实验.doc
- 《画解数据结构》九张动图,画解队列
- ubuntu server 14.04 编译安装xen4.4.2配置vtpm(一)——xen4.4.2源码编译安装
热门文章
- 基于GD32矩阵按键程序实现
- 【C语言】文件(FILE)
- Qt Creator Colliding Mice碰撞老鼠例程解析【1.5W字数长文!详细!】
- 计算机显示屏无法显示,电脑显示器屏幕不显示了怎么办
- 深度学习(二)梯度推导
- 计算机视觉、机器视觉、数字图像处理、机器学习/深度学习+图像处理 四者的关系
- 华测服务器进不去系统,华测云服务器如何登陆
- A-Level经济真题(8)
- [深度学习]深度学习风格迁移例程Github - Neural style in TensorFlow实现
- H264-整数DCT变换和蝶形变换代码实现