⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 compressionfilter.java

📁 这是一个DVD目录管理系统
💻 JAVA
字号:
/*
 * CompressionFilter.java
 */
package com.dvd.web;

import java.io.*;
import java.util.zip.GZIPOutputStream;
import javax.servlet.*;
import javax.servlet.http.*;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class CompressionFilter implements Filter {
    
    // The filter configuration object we are associated with.  If
    // this value is null, this filter instance is not currently
    // configured.
    private FilterConfig filterConfig = null;
    private ServletContext context = null;
    
    public CompressionFilter() {
    }
    
    private void doBeforeProcessing(ServletRequest request, ServletResponse response)
    throws IOException, ServletException {
        if (debug) log("CompressionFilter:DoBeforeProcessing");
        //
        // Write code here to process the request and/or response before
        // the rest of the filter chain is invoked.
        //
        
        //
        // For example, a logging filter might log items on the request object,
        // such as the parameters.
        //
        /*
         for (Enumeration en = request.getParameterNames(); en.hasMoreElements(); ) {
             String name = (String)en.nextElement();
             String values[] = request.getParameterValues(name);
             int n = values.length;
             StringBuffer buf = new StringBuffer();
             buf.append(name);
             buf.append("=");
             for(int i=0; i < n; i++) {
                 buf.append(values[i]);
                 if (i < n-1)
                     buf.append(",");
             }
             log(buf.toString());
         }
         */
        
    }
    
    private void doAfterProcessing(ServletRequest request, ServletResponse response)
    throws IOException, ServletException {
        if (debug) log("CompressionFilter:DoAfterProcessing");
        //
        // Write code here to process the request and/or response after
        // the rest of the filter chain is invoked.
        //
        
        //
        // For example, a logging filter might log the attributes on the
        // request object after the request has been processed.
        //
        /*
        for (Enumeration en = request.getAttributeNames(); en.hasMoreElements(); ) {
            String name = (String)en.nextElement();
            Object value = request.getAttribute(name);
            log("attribute: " + name + "=" + value.toString());
         
        }
         */
        //
        
        //
        // For example, a filter might append something to the response.
        //
        /*
        PrintWriter respOut = new PrintWriter(response.getWriter());
        respOut.println("<P><B>This has been appended by an intrusive filter.</B>");
         */
    }
    
    /**
     *
     * @param request The servlet request we are processing
     * @param result The servlet response we are creating
     * @param chain The filter chain we are processing
     *
     * @exception IOException if an input/output error occurs
     * @exception ServletException if a servlet error occurs
     */
    public void doFilter(ServletRequest _request, ServletResponse _response,
            FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest)_request;
        HttpServletResponse response = (HttpServletResponse)_response;
        
        // Test if the client accepts compression encodings?
        String valid_encodings = request.getHeader("Accept-Encoding");
        if ( (valid_encodings != null)
        && (valid_encodings.indexOf("gzip") > -1) ) {
            
            // Wrap the response object with a capture wrapper
            CompressionResponseWrapper wrappedResp
                    = new CompressionResponseWrapper(response);
            
            // Specify the conent-encoding
            wrappedResp.setHeader("Content-Encoding", "gzip");
            
            // Pass it up the chain
            chain.doFilter(request, wrappedResp);
            
            // Flush and finalize the compressed output stream
            GZIPOutputStream gzos = wrappedResp.getGZIPOutputStream();
            if ( gzos != null ) {
                gzos.finish();
            }
            context.log(filterConfig.getFilterName() + ": finished the request.");
            
        } else {
            context.log(filterConfig.getFilterName() + ": no encoding performed.");
        }
    }
    
    
    /**
     * Return the filter configuration object for this filter.
     */
    public FilterConfig getFilterConfig() {
        return (this.filterConfig);
    }
    
    
    /**
     * Set the filter configuration object for this filter.
     *
     * @param filterConfig The filter configuration object
     */
    public void setFilterConfig(FilterConfig filterConfig) {
        
        this.filterConfig = filterConfig;
    }
    
    /**
     * Destroy method for this filter
     *
     */
    public void destroy() {
    }
    
    
    /**
     * Init method for this filter
     *
     */
    public void init(FilterConfig filterConfig) {
        
        this.filterConfig = filterConfig;
        context = filterConfig.getServletContext();
        if (filterConfig != null) {
            if (debug) {
                log("CompressionFilter:Initializing filter");
            }
        }
    }
    
    /**
     * Return a String representation of this object.
     */
    public String toString() {
        
        if (filterConfig == null) return ("CompressionFilter()");
        StringBuffer sb = new StringBuffer("CompressionFilter(");
        sb.append(filterConfig);
        sb.append(")");
        return (sb.toString());
        
    }
    
    
    
    private void sendProcessingError(Throwable t, ServletResponse response) {
        
        String stackTrace = getStackTrace(t);
        
        if(stackTrace != null && !stackTrace.equals("")) {
            
            try {
                
                response.setContentType("text/html");
                PrintStream ps = new PrintStream(response.getOutputStream());
                PrintWriter pw = new PrintWriter(ps);
                pw.print("<html>\n<head>\n<title>Error</title>\n</head>\n<body>\n"); //NOI18N
                
                // PENDING! Localize this for next official release
                pw.print("<h1>The resource did not process correctly</h1>\n<pre>\n");
                pw.print(stackTrace);
                pw.print("</pre></body>\n</html>"); //NOI18N
                pw.close();
                ps.close();
                response.getOutputStream().close();;
            }
            
            catch(Exception ex){ }
        } else {
            try {
                PrintStream ps = new PrintStream(response.getOutputStream());
                t.printStackTrace(ps);
                ps.close();
                response.getOutputStream().close();;
            } catch(Exception ex){ }
        }
    }
    
    public static String getStackTrace(Throwable t) {
        
        String stackTrace = null;
        
        try {
            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw);
            t.printStackTrace(pw);
            pw.close();
            sw.close();
            stackTrace = sw.getBuffer().toString();
        } catch(Exception ex) {}
        return stackTrace;
    }
    
    public void log(String msg) {
        filterConfig.getServletContext().log(msg);
    }
    
    private static final boolean debug = true;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -