package net.jhorstmann.i18n.jsp; import java.io.IOException; 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; public class I18nFilter implements Filter { static final String KEY_RESOURCE_BUNDLE_NAME = "net.jhorstmann.i18n.ResourceBundleName"; static final String KEY_RESOURCE_BUNDLE = "net.jhorstmann.i18n.ResourceBundle"; static final String PARAM_RESOURCE_BUNDLE = "bundle"; private static final ThreadLocal<HttpServletRequest> currentRequest = new ThreadLocal<HttpServletRequest>(); private String resourceBundleName; static HttpServletRequest getCurrentRequest() { return currentRequest.get(); } @Override public void init(FilterConfig fc) throws ServletException { String name = fc.getInitParameter("bundle"); if (name == null || name.length() == 0) { throw new ServletException("Not ResourceBundle specified as initialization parameter"); } resourceBundleName = name; } @Override public void doFilter(ServletRequest sr, ServletResponse sr1, FilterChain fc) throws IOException, ServletException { if (sr instanceof HttpServletRequest) { sr.setAttribute(KEY_RESOURCE_BUNDLE_NAME, resourceBundleName); currentRequest.set((HttpServletRequest)sr); try { fc.doFilter(sr, sr1); } finally { currentRequest.remove(); } } else { fc.doFilter(sr, sr1); } } @Override public void destroy() { } }