`
234390216
  • 浏览: 10229793 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462459
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1775244
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1398175
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:394947
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:679875
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:530770
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1183577
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:467454
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151274
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:68022
社区版块
存档分类
最新评论

Weblogic读不到Word文件

阅读更多

Weblogic读不到Word文件

 

       之前遇到一导出word文件的需求,我的做法是把对应导出内容放到一个word文件中,把其中变化的内容作为变量,然后把该word文件放在WEB-INF目录下用来作为模板。在导出时通过ServletContextgetRealPath()方法获取到作为模板的word文件的真实路径,然后针对该路径new一个FileInputStream。之后通过该wordInputStream构造一个HWPFDocument,再对里面的变量进行替换后输出到response的输出流中。大概代码如下所示:

 
@WebServlet("/servlet/word/export.do")
public class WordExportorServlet extends HttpServlet {
 
   /**
    * serialVersionUID
    */
   private static final long serialVersionUID = 1L;
 
   @Override
   protected void doGet(HttpServletRequest request, HttpServletResponse response)
         throws ServletException, IOException {
      this.doPost(request, response);
   }
 
   @Override
   protected void doPost(HttpServletRequest request, HttpServletResponse response)
         throws ServletException, IOException {
      String wordName = "中国人";  //假设这是我们word文档导出的文件名
      //假设这里获取到了word模板文件的相对于ServletContext根的路径
      String path = "/template.doc";
      ServletContext context = getServletContext();
      //获取word模板文件的绝对路径
      String realPath = context.getRealPath(path);
      //获取到作为模板的word文件的输入流
      InputStream is = new FileInputStream(realPath);
      HWPFDocument doc = new HWPFDocument(is);
      Range range = doc.getRange();
      //替换变量
      range.replaceText("${xx}", "xxx");
      response.setHeader("Content-Disposition", "attachment;filename=" + this.getFileName(wordName) + "");
       OutputStream output = response.getOutputStream();
       doc.write(output);
       output.close();
       is.close();
   }
  
   /**
    * 把wordName以ISO-8859-1编码,同时加上“.doc”后缀进行返回。
    * @param wordName 要导出的word文件的名称
    * @return
    */
   private String getFileName(String wordName) {
      try {
         wordName = new String(wordName.getBytes("UTF-8"), "ISO-8859-1"); //防中文乱码
      } catch (UnsupportedEncodingException e) {
         e.printStackTrace();
      }
      return wordName + ".doc";
   }
 
}

 

       这种方式放在tomcatrunJetty上都是没有问题的,但是一旦打包放到weblogic上就不行了。原因是weblogic上访问的是未解压的包里面的内容,这个时候通过ServletContextgetRealPath()方法是获取不到模板文件基于硬盘的真实路径的,从而导致获取不到模板文件的输入流,也就不能利用它来生成新的Word文档进行导出了。解决方法是在获取模板文件对应的输入流时不要通过ServletContext获取到文件的真实路径后再通过FileInputStream去取对应的输入流,而是直接通过ServletContextgetResourceAsStream()方法来获取到ServletContext环境下的资源作为输入流。建议以后需要在Web环境下获取资源文件时都通过getResourceAsStream()来获取。

@WebServlet("/servlet/word/export.do")
public class WordExportorServlet extends HttpServlet {
 
   /**
    * serialVersionUID
    */
   private static final long serialVersionUID = 1L;
 
   @Override
   protected void doGet(HttpServletRequest request, HttpServletResponse response)
         throws ServletException, IOException {
      this.doPost(request, response);
   }
 
   @Override
   protected void doPost(HttpServletRequest request, HttpServletResponse response)
         throws ServletException, IOException {
      String wordName = "中国人";  //假设这是我们word文档导出的文件名
      //假设这里获取到了word模板文件的相对于ServletContext根的路径
      String path = "/template.doc";
      ServletContext context = getServletContext();
      //获取到作为模板的word文件的输入流
      InputStream is = context.getResourceAsStream(path);
      HWPFDocument doc = new HWPFDocument(is);
      Range range = doc.getRange();
      //替换变量
      range.replaceText("${xx}", "xxx");
      response.setHeader("Content-Disposition", "attachment;filename=" + this.getFileName(wordName) + "");
        OutputStream output = response.getOutputStream();
        doc.write(output);
        output.close();
        is.close();
   }
  
   /**
    * 把wordName以ISO-8859-1编码,同时加上“.doc”后缀进行返回。
    * @param wordName 要导出的word文件的名称
    * @return
    */
   private String getFileName(String wordName) {
      try {
         wordName = new String(wordName.getBytes("UTF-8"), "ISO-8859-1"); //防中文乱码
      } catch (UnsupportedEncodingException e) {
         e.printStackTrace();
      }
      return wordName + ".doc";
   }
 
}

 

 

 

(注:本文是基于poi3.9所写)

分享到:
评论

相关推荐

    weblogic和tomcat 下载附件乱码问题

    例如,对于常见的Word文档(`.doc`)和Excel表格(`.xls`),可以按照以下方式配置: ```xml <extension>doc <mime-type>application/msword <extension>xls <mime-type>application/msexcel ``` ...

    weblogic2.rar

    这个“weblogic2.rar”压缩包包含了一系列关于WebLogic配置和使用的PDF文档以及一个名为“WEBLOGIC详细配置 - YAN.doc”的Word文档,还有两个与WTC(WebTier Clustering)配置相关的文件——“WTC配置.mht”和“WTC...

    Weblogic实施方案.pdf

    ### Weblogic实施方案知识点详解 #### 一、Weblogic概述与...通过以上详细的介绍,我们可以了解到Weblogic6.1的安装、配置以及使用过程中的一些关键技术和技巧。这对于成功部署和管理基于Weblogic的应用程序至关重要。

    java_学习方向Microsoft Word 文档 (2)

    本文将深入探讨基于给定的文件内容的Java学习方向,分为两个主要阶段,涵盖了基础增强、数据库技术、JDBC、JavaWeb和JavaMail开发技术,以及相关的项目案例。 **第一阶段:Java基础增强与数据库技术** 在Java基础...

    Java学习从入门到精通word.docx

    Java的官方文档是学习过程中不可或缺的资源,详细解释了Java的各个方面,包括语法、API和最佳实践。建议在编程时随时查阅。 4. 应用服务器(App Server) 应用服务器为Java企业组件提供运行环境,如BEA的WebLogic...

    Java学习从入门到精通word.pdf

    "Java学习从入门到精通"的教程涵盖了从基础到高级的Java技术,包括JDK的使用、文档学习以及应用服务器的介绍。 首先,JDK(Java Development Kit)是Java开发的基础,它包含了Java运行环境、开发工具和标准类库。...

    (完整word版)软件项目投标技术标书.pdf

    6. Web服务器和应用服务器:文档提到了Nginx、Apache、IIS、WebLogic和JBoss等服务器技术,这些都是用于托管网络应用程序和管理客户端请求的服务端软件。 7. HTTP协议和Web安全:文档提到了HTTP协议,这是传输超...

    SOAOFFICE - 微软 OFFICE 中间件

    1. 需要把数据库字段内容填充到Word/Excel指定位置的; 2. 需要把Word/Excel指定位置的内容提取出来保存到数据库字段的; 3. 需要动态生成指定格式的Word文档的; 4. 需要把html页面中表格导出到excel的; 5. 需要在...

    公司信息化软件资源管理制度-Microsoft-Office-Word-文档只是分享.pdf

    《公司信息化软件资源管理制度》是企业规范信息化软件资源管理的重要文件,旨在确保信息安全,消除软件浪费,提升软件管理效能,降低法律风险,节约成本,并提高使用效率。该制度主要涉及以下几个核心知识点: 1. *...

    主流Java Web服务器(应用服务器)简介-怎么配置服务器java web运行环境热门模板word.docx

    Tomcat支持最新的Servlet和JSP规范,并因其免费、性能稳定和易于扩展而受到开发者青睐。Tomcat可以与Apache HTTP服务器集成,以处理静态内容和动态内容的混合需求。 Tomcat的架构允许它作为一个独立的服务器运行,...

    600个Jar大全,应有尽有,不用再费力百度《Jar大全2》

    Java开发过程中,JAR(Java ...拥有了这个JAR大全,开发者可以快速集成所需的库,提高开发效率,减少因找不到合适库而浪费的时间。然而,使用这些库时仍需注意版权问题,遵循相应的许可协议,并确保与项目的兼容性。

    一个基于eclipse的Maximo6集成开发环境配置说明_曹慧民.docx

    步骤包括解压缩RMI插件包,将jar文件复制到指定目录,生成许可证文件,然后在Eclipse的偏好设置中配置RMI许可证,以便于进行RMI相关的编译工作。 5. **集成应用服务器**: - 在Eclipse中集成应用服务器,如...

    计算机常见端口号汇总.pdf

    每个端口号是一个16位的数字,范围从0到65535,其中0到1023是知名的端口号,由IANA(互联网号码分配机构)进行管理,分配给特定的网络服务。 FTP(文件传输协议)是最常见的网络服务之一,它使用20和21两个端口。20...

    计算机专业试题.pdf

    在硬件方面,文档中可能提到过"CM2006"、"WEBLOGIC"、"Alt"、"Ctrl"、"Shift"、"PrintScreen"等,但内容不连续,难以确定具体所指。然而,这些词汇与计算机的中央处理器(CPU)型号、中间件产品、键盘操作、屏幕截图...

    完整网上商城java web项目下载

    "里面有详细的word文档说明"表明项目提供了一份详细的指导文档,这对于理解和调试项目非常有帮助,特别是对于初学者或不熟悉该项目结构的人来说,文档将起到导航的作用。 【Java Web项目详解】 Java Web项目是指...

    2018年JAVA架构师面试后的问题汇总-word范文 (2页).docx

    XML解析器有DOM、SAX、StAX等,DOM一次性加载整个文档,适用于小型XML;SAX事件驱动,适用于大文件;StAX是推拉结合的方式。 18. **性能优化**: 通过缓存、减少数据库交互、优化算法、避免全局变量等方式提升...

    2018年JAVA架构师面试后的问题汇总-word范文 (2页).pdf

    9. **排序算法**:常见的排序算法有冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序等,它们的时间复杂度各不相同,从O(n^2)到O(n log n)。 10. **数据库设计原则与范式**:设计原则包括正常化、最小...

    JSP实用技巧集合,jsp编程的一些小技巧总结

    67. 生成Word 和 Excel文档? 68. JSP如何读取Word内容? 69. 浏览服务器目录/文件? 70. jsp直接弹出下载框下载文件? 71. 配置数据连接池和数据源(Tomcat)? 72. 点击图1变为图2? 73. JSP中显示图片的方法之一? 74....

    SAP Crystal Reports 2008 SP5 for Windows - Supported Platforms

    - **Microsoft Office**:SAP Crystal Reports 2008 SP5支持与Microsoft Office集成,允许用户轻松地将报告嵌入到Word或Excel等应用程序中。 - **Adobe Reader**:为了查看PDF格式的报告,用户需要安装Adobe Reader...

    jsp编程技巧集锦

    数字转中文 128 自动计算金额 129 JSP页面打印中使用WebBrowser控件 130 不刷新页面添加新的类别 131 鼠标滚动缩放图片 132 根据输入的表名生成输入数据表格 133 JSP表格输出到Excel 134.JSP...

Global site tag (gtag.js) - Google Analytics