1 16 package com.blandware.atleap.webapp.servlet; 17 18 import com.blandware.atleap.common.Constants; 19 import com.blandware.atleap.common.util.ConvertUtil; 20 import org.apache.commons.logging.Log; 21 import org.apache.commons.logging.LogFactory; 22 import org.apache.oro.text.regex.MalformedPatternException; 23 import org.apache.oro.text.regex.MatchResult; 24 import org.apache.oro.text.regex.Pattern; 25 import org.apache.oro.text.regex.Perl5Compiler; 26 import org.apache.oro.text.regex.Perl5Matcher; 27 import org.apache.struts.util.RequestUtils; 28 29 import javax.servlet.ServletConfig ; 30 import javax.servlet.ServletException ; 31 import javax.servlet.http.HttpServlet ; 32 import javax.servlet.http.HttpServletRequest ; 33 import javax.servlet.http.HttpServletResponse ; 34 import java.io.IOException ; 35 import java.io.OutputStream ; 36 37 50 public class IFrameContentLoaderServlet extends HttpServlet { 51 52 53 56 protected transient final Log log = LogFactory.getLog(IFrameContentLoaderServlet.class); 57 58 61 public void init(ServletConfig config) throws ServletException { 62 super.init(config); 63 } 64 65 68 public void destroy() { 69 70 } 71 72 78 protected void processRequest(HttpServletRequest request, HttpServletResponse response) 79 throws ServletException , IOException { 80 81 String contentType = request.getParameter("type"); 82 if ( !Constants.MIME_TYPE_PLAIN.equals(contentType) && !Constants.MIME_TYPE_HTML.equals(contentType) ) { 83 contentType = Constants.MIME_TYPE_HTML; 84 } 85 86 String var = request.getParameter("var"); 87 if ( var != null && var.length() != 0 && request.getSession().getAttribute(var) != null ) { 88 StringBuffer content = new StringBuffer ((String ) request.getSession().getAttribute(var)); 89 request.getSession().removeAttribute(var); 90 91 if ( Constants.MIME_TYPE_HTML.equals(contentType) ) { 92 93 Perl5Compiler compiler = new Perl5Compiler(); 94 Perl5Matcher matcher = new Perl5Matcher(); 95 Pattern pattern = null; 96 97 StringBuffer baseHref = RequestUtils.createServerUriStringBuffer(request.getScheme(), request.getServerName(), request.getServerPort(), request.getContextPath() + "/"); 99 StringBuffer base = new StringBuffer ("<base HREF=\"").append(baseHref).append("\" />"); 100 StringBuffer metaCT = new StringBuffer ("<meta http-equiv=\"Content-Type\" content=\"").append(contentType).append("; charset=").append(Constants.DEFAULT_ENCODING).append("\" />"); 101 102 int headOpenEndOffset = -1; 103 String lowerCasedContent = content.toString().toLowerCase(); 104 105 String htmlOpenRE = "<html[^<>]*>"; 107 pattern = compilePattern(compiler, htmlOpenRE); 108 if ( matcher.contains(lowerCasedContent, pattern) ) { 109 String headOpenRE = "<head[^<>]*>"; 111 pattern = compilePattern(compiler, headOpenRE); 112 113 if ( matcher.contains(lowerCasedContent, pattern) ) { 114 MatchResult result = matcher.getMatch(); 116 headOpenEndOffset = result.endOffset(0); 117 118 String baseRE = "<base[^<>]+href=[^<>]+>"; 120 pattern = compilePattern(compiler, baseRE); 121 122 if ( !matcher.contains(lowerCasedContent, pattern) ) { 123 content.insert(headOpenEndOffset, base); 125 } 126 127 String metaCTRE = "<meta[^<>]+http-equiv=(\"|\')?content-type(\\1)?[^<>]+>"; 129 pattern = compilePattern(compiler, metaCTRE); 130 131 if ( !matcher.contains(lowerCasedContent, pattern) ) { 132 content.insert(headOpenEndOffset, metaCT); 133 } 134 135 } 136 } else { 137 content = new StringBuffer ("<html>").append("<head>").append(metaCT).append(base) 139 .append("</head>").append("<body>").append(content).append("</body>").append("</html>"); 140 } 141 } 142 byte[] contentBytes = ConvertUtil.convertToByteArray(content.toString()); 143 OutputStream out = response.getOutputStream(); 144 145 if ( contentType.indexOf("charset") == -1 ) { 146 contentType += "; charset=" + Constants.DEFAULT_ENCODING; 147 } 148 149 response.setContentType(contentType); 150 response.setContentLength(contentBytes.length); 151 out.write(contentBytes); 152 out.flush(); 153 out.close(); 154 } 155 } 156 157 165 protected Pattern compilePattern(Perl5Compiler compiler, String regex) throws ServletException { 166 try { 167 Pattern pattern = compiler.compile(regex); 168 return pattern; 169 } catch ( MalformedPatternException e ) { 170 throw new ServletException (e); 171 } 172 } 173 174 180 protected void doGet(HttpServletRequest request, HttpServletResponse response) 181 throws ServletException , IOException { 182 processRequest(request, response); 183 } 184 185 191 protected void doPost(HttpServletRequest request, HttpServletResponse response) 192 throws ServletException , IOException { 193 processRequest(request, response); 194 } 195 196 199 public String getServletInfo() { 200 return "Servlet to load content for iframe"; 201 } 202 203 } | Popular Tags |