package com.skrul.filters;
import java.io.IOException; import java.util.Collections; import java.util.Enumeration; import java.util.HashMap; import java.util.Map;
import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper;
/*
* Much of this code was borred from
* http://www-106.ibm.com/developerworks/java/library/j-tomcat/?open&l=101,t=grj,p=TomcatTricks
*
*/
public class IEContentTypeFilter implements Filter {
String userAgent = null; Map replace = null;
public void init(FilterConfig fc) throws ServletException {
userAgent = fc.getInitParameter("useragent");
replace = new HashMap();
Enumeration e = fc.getInitParameterNames();
while(e.hasMoreElements()) {
String key = (String) e.nextElement();
if(key.startsWith("search_")) {
String a[] = key.split("_");
replace.put(fc.getInitParameter(key), fc.getInitParameter("replace_" + a[1]));
}
}
replace = Collections.unmodifiableMap(replace);
}
public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
String browserDet = ((HttpServletRequest) request).getHeader("User-Agent").toLowerCase();
if (browserDet.indexOf(userAgent) != -1) {
ReplaceContentTypeWrapper wrapped = new ReplaceContentTypeWrapper(response, replace);
chain.doFilter(request, wrapped);
}
else {
chain.doFilter(request, response);
}
}
public void destroy() { }
class ReplaceContentTypeWrapper extends HttpServletResponseWrapper { String search; Map replace;
public ReplaceContentTypeWrapper(ServletResponse inResp, Map replace) throws java.io.IOException {
super((HttpServletResponse) inResp);
this.replace = replace;
}
public void setContentType(String contentType) { if(replace.containsKey(contentType)) { super.setContentType((String) replace.get(contentType)); } else { super.setContentType(contentType); } } } }
You need to configure this in your web.xml, and the following lines must come under the web-app element but before the servlet element:
<filter> <filter-name>IEContentTypeFilter</filter-name> <filter-class>com.skrul.filters.IEContentTypeFilter</filter-class> <init-param> <param-name>useragent</param-name> <param-value>msie</param-value> </init-param> <init-param> <param-name>search_1</param-name> <param-value>application/xhtml+xml; charset=utf-8</param-value> </init-param> <init-param> <param-name>replace_1</param-name> <param-value>text/html; charset=utf-8</param-value> </init-param> </filter>
<filter-mapping> <filter-name>IEContentTypeFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
cheers, -steve
[1] http://www.xml.com/pub/a/2003/03/19/dive-into-xml.html
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]