Hi all! I use JBoss 3.2.3.
I'd like to write a filter that removes the new lines from the result of a JSP page. Found an excelent article concerning this topic ( http://www-106.ibm.com/developerworks/java/library/j-tomcat/?open&l=101,t=grj,p=TomcatTricks). The filter code is really simple: package com.ibm.devworks.filters; | | import java.io.*; | import javax.servlet.*; | import javax.servlet.http.*; | | | class ReplaceTextStream extends ServletOutputStream { | private OutputStream intStream; | private ByteArrayOutputStream baStream; | private boolean closed = false; | | private String origText; | private String newText; | | public ReplaceTextStream(OutputStream outStream, String searchText, String replaceText) { | intStream = outStream; | baStream = new ByteArrayOutputStream(); | origText = searchText; | newText = replaceText; | } | | public void write(int i) throws java.io.IOException { | baStream.write(i); | } | | public void close() throws java.io.IOException { | if (!closed) { | | processStream(); | intStream.close(); | closed = true; | } | } | | public void flush() throws java.io.IOException { | if (baStream.size() != 0) { | if (! closed) { | processStream(); // need to synchronize the flush! | baStream = new ByteArrayOutputStream(); | } | } | } | | public void processStream() throws java.io.IOException { | intStream.write(replaceContent(baStream.toByteArray())); | intStream.flush(); | } | | public byte [] replaceContent(byte [] inBytes) { | String retVal =""; | String firstPart=""; | | String tpString = new String(inBytes); | String srchString = (new String(inBytes)).toLowerCase(); | | int endBody = srchString.indexOf(origText); | | if (endBody != -1) { | firstPart = tpString.substring(0, endBody); | retVal = firstPart + newText + | tpString.substring(endBody + origText.length()); | | } else { | retVal=tpString; | } | | return retVal.getBytes(); | } | | } | class ReplaceTextWrapper extends HttpServletResponseWrapper { | private PrintWriter tpWriter; | private ReplaceTextStream tpStream; | | public ReplaceTextWrapper(ServletResponse inResp, String searchText, | String replaceText) throws java.io.IOException { | super((HttpServletResponse) inResp); | tpStream = new ReplaceTextStream(inResp.getOutputStream(), searchText, replaceText); | tpWriter = new PrintWriter(tpStream); | } | | public ServletOutputStream getOutputStream() throws java.io.IOException { | | return tpStream; | } | public PrintWriter getWriter() throws java.io.IOException { | | return tpWriter; | } | } | | public final class ReplaceTextFilter implements Filter { | private FilterConfig filterConfig = null; | private String searchText = "."; | private String replaceText = "."; | public void doFilter(ServletRequest request, ServletResponse response, | FilterChain chain) | throws IOException, ServletException { | | | ReplaceTextWrapper myWrappedResp = new ReplaceTextWrapper( response, searchText, replaceText); | chain.doFilter(request, myWrappedResp); | myWrappedResp.getOutputStream().close(); | | } | | public void destroy() { | } | | | public void init(FilterConfig filterConfig) { | | String tpString; | if (( tpString = filterConfig.getInitParameter("search") ) != null) | searchText = tpString; | if (( tpString = filterConfig.getInitParameter("replace") ) != null) | replaceText = tpString; | | this.filterConfig = filterConfig; | | } | | | } The filter works only when the requested page is a html. If is is renamed to jsp extension, this filter is failed. I get a <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> | <HTML><HEAD> | <META http-equiv=Content-Type content="text/html; charset=iso-8859-1"></HEAD> | <BODY></BODY></HTML> content. I suppose that filters work that first perform the jsp page and its result content is filtered. What's wrong? Tibor View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3835499#3835499 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3835499 ------------------------------------------------------- This SF.Net email is sponsored by: SourceForge.net Broadband Sign-up now for SourceForge Broadband and get the fastest 6.0/768 connection for only $19.95/mo for the first 3 months! http://ads.osdn.com/?ad_id=2562&alloc_id=6184&op=click _______________________________________________ JBoss-user mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/jboss-user
