1.servlet
package com.csv;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
/**
* Servlet implementation class CsvServlet
*/
public class CsvServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String SEPARATOR = "," ;
private static final String END_ROW = "\n" ;
@SuppressWarnings("unchecked")
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String paramStr = request.getParameter("data");
JSONObject json = JSONObject.fromObject(paramStr);
String fileName = json.getString("fileName");
JSONArray rows = json.getJSONArray("records");
StringBuilder file = new StringBuilder("");
for(Iterator<String> it=((JSONObject) rows.get(0)).keys();it.hasNext(); ){
file.append(it.next()).append(SEPARATOR);
}
file.append(END_ROW);
for(int i=0; i<rows.size(); i++){
StringBuilder sb = new StringBuilder("");
JSONObject obj = rows.getJSONObject(i);
for(Iterator<String> it=obj.keys();it.hasNext(); ){
String key = (String) it.next();
sb.append(obj.getString(key)).append(SEPARATOR);
}
sb = new StringBuilder((sb.substring(0, sb.length()-1)));
file.append(sb.append(END_ROW));
}
response.setContentType("application/x-download");
response.setHeader("Content-Disposition","attachment;filename="+ fileName);
try {
OutputStream os = response.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(os,"GBK");
writer.write(file.toString());
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
};
}
2.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
var data = "{'fileName':'download.csv','records':[{'NAME':'wuhx','AGE':1,'SEX':'male'},{'NAME':'wuhx2','AGE':2,'SEX':'female'}]}";
var download = function() {
location.href = "/csv/CsvServlet?data="+data;
};
</script>
</head>
<body>
<a href="javascript:download();">Download</a>
</body>
</html>
本文介绍了一个使用Java Servlet从JSON数据源导出CSV文件的例子。该Servlet接收JSON格式的数据参数,解析数据并将其转换为CSV文件供用户下载。同时提供了一个简单的JSP页面用于触发CSV文件的下载。

1557

被折叠的 条评论
为什么被折叠?



