smartxslfilter.java

来自「JAVA Servlet2.3外文书籍源码」· Java 代码 · 共 63 行

JAVA
63
字号
package filters;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;

public final class SmartXSLFilter implements Filter {

  private FilterConfig filterConfig = null;
  private TransformerFactory xsltFactory = null;
  private Templates xsltTemplates = null;

  public void doFilter(ServletRequest request, 
                       ServletResponse response,
                       FilterChain chain)
    throws IOException, ServletException {

    String browserUsed = ((HttpServletRequest)request).getHeader("User-Agent").toLowerCase();
    boolean isMSIE = (browserUsed.indexOf("msie") >= 0);
    if (!isMSIE)  {
      PrintWriter realOutput = response.getWriter();
      OutputCapturer myCapture = new OutputCapturer((HttpServletResponse) response);
      chain.doFilter(request,  myCapture);
      try {
        Source xfrmSrc = new StreamSource(new StringReader(myCapture.toString()));
        Transformer tpXfrmer = xsltTemplates.newTransformer();
        CharArrayWriter finalOut = new CharArrayWriter();
        StreamResult xfrmResult  = new StreamResult(finalOut);
        tpXfrmer.transform(xfrmSrc, xfrmResult);
        response.setContentLength(finalOut.toString().length());
        realOutput.write(finalOut.toString());
        filterConfig.getServletContext().log("SmartXSLFilter activated - completed transform"  );
      } catch(Exception ex) {
        filterConfig.getServletContext().log(
                     "SmartXSLFilter - XSLT transformation failed - "
                     + ex.toString());
      }
    } else
      chain.doFilter(request, response);
  }

  public void destroy() {
    this.filterConfig = null;
    this.xsltFactory = null;
    this.xsltTemplates = null;
  }

  public void init(FilterConfig filterConfig) {
    this.filterConfig = filterConfig;
    this.xsltFactory = TransformerFactory.newInstance();
    String xsltfile = filterConfig.getInitParameter("xsltfile");
    
    try {
      String path = this.filterConfig.getServletContext().getRealPath(xsltfile);
      StreamSource stmSource = new StreamSource(path);
      this.xsltTemplates = xsltFactory.newTemplates(stmSource);
    } catch (TransformerConfigurationException ex) {
      System.err.println("Initialization error. " + ex.toString());
    }
  }
}

⌨️ 快捷键说明

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