请教高手!Freemarker生成word的奇怪问题!
用main函数调用生成word的类中的方法 就可以生成正确的word文档
但是通过form提交到某个servlet,然后此servlet中调用生成word的类中的方法,就不能生成正确的文档,在打开文档的时候会提示xml字符非法
ftl模版中的内容:{author}
大家可以按照代码中的路径和名字(或者自己修改)自己建一个ftl模版 在main函数中执行测试一下,我测试是成功的;
但是自己建一个form表单,然后以提交到servlet的方式来调用这个类中的createDoc2()方法去执行就不行;
我本来以为会不会是中文乱码问题,但是请看,我把dataMap的赋值也放到下面的代码中了,但是还是不行;
以下是代码:
package com.pm360.mda.platform.util;
import java.io.BufferedWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.pm360.mda.platform.db.DBConn;
import com.pm360.vo.User;
import flex.messaging.util.URLDecoder;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class DocumentHandler extends HttpServlet
{
private Configuration configuration = null;
public DocumentHandler()
{
try {
configuration = new Configuration();
configuration.setDefaultEncoding("utf-8");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException,IOException
{
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
DocumentHandler.CreateDoc2();
}
public void createDoc()
{
Map<String,String> dataMap = new HashMap<String,String>();
//getData(dataMap);
dataMap.put("author", "陈留");
//设置模本装置方法和路径,FreeMarker支持多种模板装载方法.可以重servlet,classpath,数据库装载,
//这里我们的模板是放在com.havenliu.document.template包下面
configuration.setClassForTemplateLoading(this.getClass(), "/com/pm360/mda/platform/util/template");
Template t=null;
try {
//test.ftl为要装载的模板
t = configuration.getTemplate("b1.ftl");
} catch (IOException e) {
e.printStackTrace();
}
//输出文档路径及名称
File outFile = new File("D:/outFile.doc");
Writer out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
try {
t.process(dataMap, out);
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 根据页面传过来的值,得到一个Map,并创建一个word
* MQ
* @param map
*/
public static String CreateDoc2()
{
//要填入模板的数据文件
//Map<String,String> dataMap = getMap(map);
//Map dataMap = getMap2();
// Map dataMap = new HashMap();
// dataMap.put("author", "ss");
DocumentHandler dh = new DocumentHandler();
dh.createDoc();
return null;
}
public static void main(String[] args)
{
//DocumentHandler dh = new DocumentHandler();
//HashMap dataMap = new HashMap();
// dataMap.put("author", "张三");
//String str = "李四";
//dh.createDoc(str);
DocumentHandler.CreateDoc2();
}
}