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
CharArrayWriterfor 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>
相关文章推荐
- Cocos2d-x学习笔记之CCScene、CCLayer、CCSprite的默认坐标和默认锚点实验
- iGriamceV8.0 IG8.0.0 iOS8 V8基本设置和使用教程图
- iOS开发之遍历Model类的属性并完善使用Runtime给Model类赋值
- Android NDK开发(八)——应用监听自身卸载,弹出用户反馈调查
- Android系统缓存相关
- 如何解决IOS 信息流展示的严重卡顿
- nagios监控远程主机服务可能出现的问题
- nagios监控远程主机服务可能出现的问题
- android studio下的NDK开发详解(一)
- iOS开发 - cocoapods安装与使用
- nagios监控远程主机端口
- nagios监控远程主机端口
- Android简单自定义标题栏
- android SDK manager 无法获取更新版本列表
- Android Spinner
- Android中AsyncTask的依赖执行用法
- Android开发环境的建立
- Android Low Memory 测试工具 Eat Memory
- Android各种View的下拉刷新与加载更多
- android-wheel三级联动