开始在本地提示没有相应版本的jacob.jar和相应版本的.dll文件,通过我上一期博客解决了,并提供了资源,之后将项目部署到服务器端的tomcat中,使用tomcat启动,遇到了一些问题。

1.提示不能在32位的平台上加载64位的.dll文件,也就是版本不匹配。

我是将32位、64位都下载了,并且都放进了C盘windows中的sys32和sys64中,提示这个错误后我将sys64中的32位和64位的.dll文件去掉,重新运行发现这个问题解决了。

2.tomcat启动框不提示错误,但是页面点击导出word就卡主。

调试页面发现报找不到处理导出word的该方法,这时我就很纳闷,本地测试这方法完全可以找到,并且我还在本地的tomcat上放入项目war进行测试,发现也能访问到,说明不是程序和插件的问题,在网上搜了各个方面的问题,发现了一个有可能的不同。我在服务器端的tomcat日志里面进行查找信息,发现了一个问题,但是并没有在tomcat启动框中没有体现。进入到tomcat的安装目录中的logs目录中。如下图。

docxtemplater 导出报错_日志文件

tomcat每次启动时,自动在logs目录下生产以下日志文件,按照日期自动备份。可以帮助我们更好的找出错误。

tomcat logs下各日志文件的含义,详细可以参考这篇博客


在你遇到问题的那一天的日志文件中查看相关日志,我在localhost日志文件中找到了有用的信息,

docxtemplater 导出报错_服务器端_02

一般在这几个日志文件中查找你所需要的信息:

localhost.日期.log:这个类似于第一种日志,可是信息没有第一种全;

localhost_access_log.日期.txt:这个是存放访问tomcat的请求的所有地址以及请求的路径、时间,请求协议以及返回码等信息(重要);

tomcat7-stderr.日期.log:这个是log4j的错误日志,因此在程序中要合理的捕捉异常;

tomcat7-stdout.日期.log:(类似于eclipse的控制台的信息)这个是程序中的System语句打印的日志(包括系统抛出的异常),也终于明白了为什么一再强调不能用打印语句进行系统调试。

我在localhost日志文件中找到重复提示的一种错误:

com.jacob.com.ComFailException: Can't get object clsid from progid

这个错误 

  1. 有的说是原因是:regsvr32  ***.ocx命令进行注册后 ,获取的progid有误;
  2. 有的说是注册表中word或excel注册信息不为Word.Applocation和Eexcl.Aapplcation或者  ActiveXComponent app = new ActiveXComponent("Excel.Application");中Excel.Application写错了。同样出现上述问题;
  3. 还有的说是没有装word

我一想,本地和服务器的差别,环境装的都是一样,就是没有装word,便找了个word2013版本的office word装上,发现问题就解决了,这个问题可以折腾了我两天,希望能帮得到你吧,加油!