msn讨论也行[email protected]
希望能详细的说明

解决方案 »

  1.   

    先帮你up:)有空再看 ~~~hehe
      

  2.   


    很好用啊!!!!
    我copy楼主的代码一下就运行成功了啊。
    以下是filter输出的信息:Target URL -- http://192.168.1.152:8988/mydemo-Project1-context-root/test.jsp
    03/12/17 11:05:17 Oracle Application Server Containers for J2EE 10g (9.0.4.0.0) initialized
    03/12/17 11:05:18 现在的编码设置为:GB231203/12/17 11:05:18 准备压缩ae=gzip, deflate03/12/17 11:05:18 GZIP supported, compressing.03/12/17 11:05:18 GZIPResponseWrapper的构造函数03/12/17 11:05:18 类GZIPResponseWrapper的ServletOutputStream getOutputStream()方法03/12/17 11:05:18 类GZIPResponseWrapper中ServletOutputStream createOutputStream()方法03/12/17 11:05:18 类 GZIPResponseStream的构造函数03/12/17 11:05:18 类 GZIPResponseStream的write(b,off,len)函数03/12/17 11:05:18 writing...03/12/17 11:05:18 doFilter做完了03/12/17 11:05:18 类GZIPResponseWrapper的finishResponse方法03/12/17 11:05:18 类 GZIPResponseStream的close()函数楼主恐怕是没有设置好web.xml吧???这是我的web.xml里的设置:
    (http://www.onjava.com/pub/a/onjava/2003/11/19/filters.html?page=2
    里面有讲解的):
     <filter>
        <filter-name>testfilter</filter-name>
        <filter-class>com.mytest.testfilter</filter-class>
        <init-param>
          <param-name>encoding</param-name>
          <param-value>GB2312</param-value>
        </init-param>
      </filter>
      <filter>
        <filter-name>Compress</filter-name>
        <filter-class>com.jspbook.GZIPFilter</filter-class>
      </filter>
      <filter-mapping>
        <filter-name>testfilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
      <filter-mapping>
        <filter-name>Compress</filter-name>
        <url-pattern>*.jsp</url-pattern>
      </filter-mapping>
        <filter-mapping>
        <filter-name>Compress</filter-name>
        <url-pattern>*.html</url-pattern>
      </filter-mapping>
      

  3.   

    可以执行,但是我的jsp页面中有上传和下载文件的功能.上传时时没问题的,但是下载就有问题了.它会输出 writing...后,又调用GZIPResponseWrapper的getWriter() ,然后就报错了:getOutputStream() has already been called! 怎么解决呢
      

  4.   

    告诉我怎么用,我是文盲啊>_<"
      

  5.   

    re: pigo()  
        把你的testfilter贴出来看看啊.是解决编码问题的吧
      

  6.   

    re: gzyf(老虫)
        你到我上面贴的那个网址看看吧,我也讲不明白啊.上面讲的挺多的.看懂了告诉我阿,呵呵!!
      

  7.   


    to xmnkl(丫头) :我的testfilter是抄tomcat,并由jdeveloper自动生成的:package com.mytest;
    import javax.servlet.ServletResponse;
    import javax.servlet.Filter;
    import javax.servlet.ServletException;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletRequest;
    import javax.servlet.FilterChain;
    import java.io.IOException;
    import javax.servlet.http.HttpServletRequest;public class testfilter implements Filter 
    {
      private FilterConfig _filterConfig = null;  public void init(FilterConfig filterConfig) throws ServletException
      {
        _filterConfig = filterConfig;
      }  public void destroy()
      {
        _filterConfig = null;
      }  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
      {
      request.setCharacterEncoding(_filterConfig.getInitParameter("encoding"));
      System.out.println("现在的编码设置为:"+_filterConfig.getInitParameter("encoding"));
        chain.doFilter(request, response);  }
    }
      

  8.   

    to: pigo() 
        谢谢啊
      

  9.   

    其实过滤器的原理很简单。
    就好好比多了一个物理层。
    每个符合你要求的访问都会首先进过这一层。
      <filter>
        <filter-name>Compress</filter-name>
        <filter-class>com.jspbook.GZIPFilter</filter-class>
      </filter>
      <filter-mapping>
        <filter-name>testfilter</filter-name>
        <url-pattern>/*</url-pattern> <!--这里可以是*.jsp,甚至是*.jpg-->
      </filter-mapping>
    你的这个处理其实也没有什么只是把传输的流做了一次压缩而已。
    减少网络传输这个瓶颈。
      

  10.   

    现在遇到的问题是这样的,在配置文件中配好了以后(只过滤jsp),一般情况下是没什么问题.但是,在下载的时候就是出现以下错误:Apache Tomcat/4.0.6 - HTTP Status 500 - Internal Server Error--------------------------------------------------------------------------------type Exception reportmessage Internal Server Errordescription The server encountered an internal error (Internal Server Error) that prevented it from fulfilling this request.exception java.lang.IllegalStateException: getOutputStream() has already been called!
    at com.jspbook.GZIPResponseWrapper.getWriter(GZIPResponseWrapper.java:70)
    at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:166)
    at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:158)
    at org.apache.jasper.runtime.JspWriterImpl.flush(JspWriterImpl.java:205)
    at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:177)
    at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:198)
    at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:193)
    at org.apache.jsp.download$jsp._jspService(download$jsp.java:114)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:201)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:381)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:473)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
    at com.goldencity.oa.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:25)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
    at com.jspbook.GZIPFilter.doFilter(GZIPFilter.java:28)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
    at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
    at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)
    at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)
    at java.lang.Thread.run(Thread.java:534)--------------------------------------------------------------------------------
      

  11.   

    错误信息已经说的很清楚了啊:
     getOutputStream() has already been called!
      

  12.   

    源代码也没什么啊!就是用upload.SmartUpload控件来上传和下载,在下载时代码为:
    <a href="<%=request.getContextPath()%>/download.jsp?dir=askreport&file=<bean:write name="AskReport" property="attachment"/>"><img border="0" src="<%=request.getContextPath()%>/communication/maintenance/askreport/image/down.gif" ></a>
    传了dir和file作为参数给download.jsp.在download.jsp文件中处理下载的的代码如下:<%try{String file=request.getParameter("file");
          String dir=request.getParameter("dir");
         
          mySmartUpload.initialize(pageContext);
          mySmartUpload.setContentDisposition("attachment;");   String tempdir="/WEB-INF/upload/"+dir+"/"+file;
          
              mySmartUpload.downloadFile(tempdir);

            }catch(Exception e){
    out.println("<font color=red >找不到该文件</font>");
    }
    %>