紙飛機

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            22 隨筆 :: 28 文章 :: 30 評論 :: 0 Trackbacks
          用jspsmart下載文件異常(tomcat正常,weblogic不行)

          用jspsmart下載文件JSP代碼如下:
          <%@ page contentType="text/html;charset=GBK" import="com.jspsmart.upload.*" %><%
          //取得服務器存放文件的路徑
          String reportTemplatePath = (String)session.getAttribute("reportTemplatePath");
          //文件名
          String filename = reportTemplatePath + "/" + request.getParameter("filename");
          filename = new String(filename.getBytes(),"ISO-8859-1");
          // 新建一個SmartUpload對象
          SmartUpload su = new SmartUpload();
          // 初始化
          su.initialize(pageContext);
          //設定contentDisposition為null以禁止瀏覽器自動打開文件,保證點擊鏈接后是下載文件。若不設定,則下載的文件擴展名為
          //doc時,瀏覽器將自動用word打開它。擴展名為pdf時,瀏覽器將用acrobat打開。
          su.setContentDisposition(null);
          // 下載文件
          su.downloadFile(filename);
          %>在tomcat中運行正常。
          在weblogic中運行拋出如下異常.
          文件可以下載,但特別慢并且打開是亂碼。
          <2004-2-19 下午09時14分34秒> <Error> <HTTP> <101019> <[ServletContext(id=325867,
          name=csrc,context-path=/csrc)] Servlet failed with IOException
          java.net.ProtocolException: Exceeded stated content-length of: '548352' bytes
                  at weblogic.servlet.internal.ServletOutputStreamImpl.checkCL(ServletOutp
          utStreamImpl.java:220)
                  at weblogic.servlet.internal.ServletOutputStreamImpl.write(ServletOutput
          StreamImpl.java:170)
                  at com.jspsmart.upload.SmartUpload.downloadFile(SmartUpload.java:986)
                  at com.jspsmart.upload.SmartUpload.downloadFile(SmartUpload.java:355)
                  at com.jspsmart.upload.SmartUpload.downloadFile(SmartUpload.java:336)
                  at jsp_servlet._test.__do_download._jspService(__do_download.java:102)
                  at weblogic.servlet.jsp.JspBase.service(JspBase.java:27)
                  at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run
          (ServletStubImpl.java:1058)
                  at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
          pl.java:401)
                  at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
          pl.java:306)
                  at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio
          n.run(WebAppServletContext.java:5445)
                  at weblogic.security.service.SecurityServiceManager.runAs(SecurityServic
          eManager.java:780)
                  at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppSe
          rvletContext.java:3105)
                  at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestIm
          pl.java:2588)
                  at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:213)
                  at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:189)
          >

          解決方法:把所有<%和%>之外的空格字符都取掉就好了.參考如下:
          <%@ page contentType="text/html;charset=GBK" import="com.jspsmart.upload.*" %><%
          //取得服務器存放文件的路徑
          String reportTemplatePath = (String)session.getAttribute("reportTemplatePath");
          //文件名
          String filename = reportTemplatePath + "/" + request.getParameter("filename");
          filename = new String(filename.getBytes(),"ISO-8859-1");
          // 新建一個SmartUpload對象
          SmartUpload su = new SmartUpload();
          // 初始化
          su.initialize(pageContext);
          //設定contentDisposition為null以禁止瀏覽器自動打開文件,保證點擊鏈接后是下載文件。若不設定,則下載的文件擴展名為
          //doc時,瀏覽器將自動用word打開它。擴展名為pdf時,瀏覽器將用acrobat打開。
          su.setContentDisposition(null);
          // 下載文件
          su.downloadFile(filename);
          %>

           

          posted on 2008-06-02 16:04 紙飛機 閱讀(3799) 評論(2)  編輯  收藏

          評論

          # re: 用jspsmart下載文件異常(tomcat正常,weblogic不行) 2008-06-02 16:50 隔葉黃鶯
          留個印象,還是 Tomcat 的兼容性較強。
          記得原來寫個 jsp 的注釋寫成了
          <%-- 注釋 ---%>

          在 tomcat 下通過,但放在 WAS 下報錯了,原因是 WAS 下要寫成

          <%-- 注釋 --%>

          WAS 愣是那么古板,多個橫線就要了它的命。  回復  更多評論
            

          # re: 用jspsmart下載文件異常(tomcat正常,weblogic不行) 2008-06-02 20:05 BeanSoft
          JSP 文件下載的相對完整代碼(解決中文問題和Weblogic報錯)
          http://www.aygfsteel.com/beansoft/archive/2007/02/01/97294.html

          <%
          // String filePath = "c:/文檔.doc";
          // 如果是 WEB APP 下的相對路徑文件, 請使用下列代碼:
          String filePath = application.getRealPath( " 測試文檔.htm " );
          boolean isInline = false ; // 是否允許直接在瀏覽器內打開(如果瀏覽器能夠預覽此文件內容,
          // 那么文件將被打開, 否則會提示下載)

          // 清空緩沖區, 防止頁面中的空行, 空格添加到要下載的文件內容中去
          // 如果不清空的話在調用 response.reset() 的時候 Tomcat 會報錯
          // java.lang.IllegalStateException: getOutputStream() has already been called for
          // this response,
          out.clear();

          // {{{ BEA Weblogic 必讀
          // 修正 Bea Weblogic 出現 "getOutputStream() has already been called for this response"錯誤的問題
          // 關于文件下載時采用文件流輸出的方式處理:
          // 加上response.reset(),并且所有的%>后面不要換行,包括最后一個;
          // 因為Application Server在處理編譯jsp時對于%>和<%之間的內容一般是原樣輸出,而且默認是PrintWriter,
          // 而你卻要進行流輸出:ServletOutputStream,這樣做相當于試圖在Servlet中使用兩種輸出機制,
          // 就會發生:getOutputStream() has already been called for this response的錯誤
          // 詳細請見《More Java Pitfill》一書的第二部分 Web層Item 33:試圖在Servlet中使用兩種輸出機制 270
          // 而且如果有換行,對于文本文件沒有什么問題,但是對于其它格式,比如AutoCAD、Word、Excel等文件
          // 下載下來的文件中就會多出一些換行符0x0d和0x0a,這樣可能導致某些格式的文件無法打開,有些也可以正常打開。
          // 同時這種方式也能清空緩沖區, 防止頁面中的空行等輸出到下載內容里去
          response.reset();
          // }}}

          其它代碼照舊  回復  更多評論
            


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 韶山市| 滦平县| 清远市| 北海市| 双江| 渑池县| 涟源市| 桦川县| 连江县| 祁门县| 丰县| 朝阳区| 金川县| 集贤县| 措美县| 景洪市| 禹城市| 泸西县| 嵊州市| 越西县| 河东区| 将乐县| 焦作市| 白水县| 五峰| 肇源县| 桐城市| 长岛县| 中山市| 贵港市| 荔浦县| 思南县| 望谟县| 屯昌县| 翁源县| 招远市| 鄂托克前旗| 容城县| 六枝特区| 乐至县| 休宁县|