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]
