请教高手!Freemarker生成word的奇怪问题!

程序员一一涤生 2011-12-12 02:38:38
用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();
}

}
...全文
673 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hf5208332 2014-06-26
  • 打赏
  • 举报
回复
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile))); 这个改成 out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8")); 就解决了
hf5208332 2014-06-26
  • 打赏
  • 举报
回复
我也遇到一样的问题,怎么解决呢?
flyboat 2013-08-16
  • 打赏
  • 举报
回复
遇到了同样的问题,请问怎么解决的?谢谢!
jave-joe 2013-07-11
  • 打赏
  • 举报
回复
问题解决了吗?
h1l2q3f4 2013-01-02
  • 打赏
  • 举报
回复
什么意思?能描述的详细一点吗? freemarker是用来做模板的。

25,985

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧