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

📄 tokenreplacementfilter.java

📁 JSP/Servelt的部署。已完成。可以查看源码来检查其功能
💻 JAVA
字号:
package servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class TokenReplacementFilter implements Filter {
    private String replToken, replValue;
    
    public void init(FilterConfig filterConfig)
    throws ServletException {
        replToken = filterConfig.getInitParameter("token.name");
        replValue = filterConfig.getInitParameter("token.value");
        if (null == replToken) {
            throw new ServletException("TokenReplacementFilter named " +
            filterConfig.getFilterName() + 
            " missing token.name init parameter.");
        }
        if (null == replValue) {
            throw new ServletException("TokenReplacementFilter named " +
            filterConfig.getFilterName() + 
            " missing token.value init parameter.");
        }
    }
    public void destroy() {}
    
    public void doFilter(ServletRequest request,
    ServletResponse response, FilterChain chain)
    throws IOException, ServletException {
        BufferedResponse resWrapper = new BufferedResponse(
        (HttpServletResponse)response);
        
        chain.doFilter(request, resWrapper);
        
        if (resWrapper.getOutputType() == BufferedResponse.OT_WRITER) {
            String resBody = new String(
            resWrapper.toByteArray(),resWrapper.getCharacterEncoding());
            if (resWrapper.getContentType().equals("text/html")) {
                resBody = resBody.replaceAll("@" + replToken + "@", replValue);
                response.setContentLength(resBody.length());
            }
            PrintWriter writer = response.getWriter();
            writer.println(resBody);
        } else if (resWrapper.getOutputType() == BufferedResponse.OT_OUTPUT_STREAM) {
            ServletOutputStream out = response.getOutputStream();
            out.write(resWrapper.toByteArray());
        }
    }
    
    class BufferedResponse extends HttpServletResponseWrapper {
        
        public static final short OT_NONE = 0, OT_WRITER = 1, OT_OUTPUT_STREAM = 2;
        
        private short outputType = OT_NONE;
        private PrintWriter writer = null;
        private BufServletOutputStream out = null;
        private String contentType;
        
        public BufferedResponse(HttpServletResponse response){
            super(response);
        }
        
        public ServletOutputStream getOutputStream() throws IOException {
            if (outputType == OT_WRITER) {
                throw new IllegalStateException();
            } else if (outputType == OT_OUTPUT_STREAM) {
                return out;
            } else {
                out = new BufServletOutputStream();
                outputType = OT_OUTPUT_STREAM;
                return (ServletOutputStream)out;
            }
        }
        
        public PrintWriter getWriter() throws IOException {
            if (outputType == OT_OUTPUT_STREAM) {
                throw new IllegalStateException();
            } else if (outputType == OT_WRITER) {
                return writer;
            } else {
                writer = new PrintWriter(
                new OutputStreamWriter(
                getOutputStream(),getCharacterEncoding()));
                outputType = OT_WRITER;
                return writer;
            }
        }
        
        public short getOutputType() {
            return outputType;
        }
        
        public String getContentType() {
            return contentType;
        }
        
        public void setContentType(String contentType) {
            this.contentType = contentType;
            super.setContentType(contentType);
        }
        
        public void flushBuffer() throws IOException {
            if (outputType == OT_WRITER) {
                writer.flush();
            } else if (outputType == OT_OUTPUT_STREAM) {
                out.flush();
            }
        }
        
        public void reset() {
            resetBuffer();
            outputType = OT_NONE;
            super.reset();
        }
        
        public void resetBuffer() {
            if(null != out) {
                out.reset();
            }
        }
        
        public byte[] toByteArray() throws IOException {
            flushBuffer();
            if(null != out) {
                return(out.toByteArray());
            } else {
                return null;
            }
        }
    }
    
    class BufServletOutputStream extends ServletOutputStream {
        ByteArrayOutputStream bufferedOut;
        
        public BufServletOutputStream() {
            bufferedOut = new ByteArrayOutputStream();
        }
        
        public void write(int i) throws IOException {
            bufferedOut.write(i);
        }
        
        public byte[] toByteArray() {
            return bufferedOut.toByteArray();
        }
        
        public void reset() {
            bufferedOut.reset();
        }
    }
}

⌨️ 快捷键说明

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