您的位置:首页 > 移动开发

Filter that uses a response wrapper to convert all output to uppercase

2015-09-01 05:14 423 查看
import java.io.CharArrayWriter;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;

public class UpperCaseFilter implements Filter {
protected FilterConfig config;

public void init(FilterConfig config) throws ServletException {
this.config = config;
}

public void destroy() {
}

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

if (request instanceof HttpServletRequest) {
newResponse = new CharResponseWrapper((HttpServletResponse) response);
}

chain.doFilter(request, newResponse);

if (newResponse instanceof CharResponseWrapper) {
String text = newResponse.toString();
if (text != null) {
text = text.toUpperCase();
response.getWriter().write(text);
}
}
}
}

class CharResponseWrapper extends HttpServletResponseWrapper {
protected CharArrayWriter charWriter;

protected PrintWriter writer;

protected boolean getOutputStreamCalled;

protected boolean getWriterCalled;

public CharResponseWrapper(HttpServletResponse response) {
super(response);

charWriter = new CharArrayWriter();
}

public ServletOutputStream getOutputStream() throws IOException {
if (getWriterCalled) {
throw new IllegalStateException("getWriter already called");
}

getOutputStreamCalled = true;
return super.getOutputStream();
}

public PrintWriter getWriter() throws IOException {
if (writer != null) {
return writer;
}
if (getOutputStreamCalled) {
throw new IllegalStateException("getOutputStream already called");
}
getWriterCalled = true;
writer = new PrintWriter(charWriter);
return writer;
}

public String toString() {
String s = null;

if (writer != null) {
s = charWriter.toString();
}
return s;
}
}


Simple response wrapper that utilizes a local
CharArrayWriter
for output

<filter>
<filter-name>Upper Case Filter</filter-name>
<filter-class>com.omh.filters.UpperCaseFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>Upper Case Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: