From 8e429ca87899933c8362a816547b2074acbf9739 Mon Sep 17 00:00:00 2001 From: Jim Blake Date: Fri, 27 Mar 2015 15:38:38 -0400 Subject: [PATCH] VIVO-1008 Don't override the mime type if the servlet container can provide it. In CharsetEncodingFilter, check to see whether the servlet container knows the mime type, before forcing it to "text/html;charset=UTF-8" --- .../webapp/filters/CharsetEncodingFilter.java | 43 ++++++++++---- webapp/web/WEB-INF/web.xml | 57 ++++++++++++++++++- 2 files changed, 88 insertions(+), 12 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/filters/CharsetEncodingFilter.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/filters/CharsetEncodingFilter.java index 2f654f05e..d6a2c6a83 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/filters/CharsetEncodingFilter.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/filters/CharsetEncodingFilter.java @@ -7,6 +7,7 @@ import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; +import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; @@ -15,17 +16,37 @@ import javax.servlet.http.HttpServletRequest; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class CharsetEncodingFilter implements Filter { - public void init(FilterConfig filterConfig) throws ServletException { - } + @Override + public void init(FilterConfig filterConfig) throws ServletException { + // Nothing to set up + } - public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { - if( !ServletFileUpload.isMultipartContent((HttpServletRequest) servletRequest) ) - servletRequest.setCharacterEncoding("UTF-8"); - servletResponse.setContentType("text/html;charset=UTF-8"); - filterChain.doFilter(servletRequest, servletResponse); - } + @Override + public void doFilter(ServletRequest servletRequest, + ServletResponse servletResponse, FilterChain filterChain) + throws IOException, ServletException { + HttpServletRequest req = (HttpServletRequest) servletRequest; + ServletContext ctx = req.getSession().getServletContext(); + String url = req.getRequestURL().toString(); - public void destroy() { - } + if (!ServletFileUpload.isMultipartContent(req)) { + servletRequest.setCharacterEncoding("UTF-8"); + } + + if (req.getContentType() == null) { + String typeFromContext = ctx.getMimeType(url); + if (typeFromContext == null) { + servletResponse.setContentType("text/html;charset=UTF-8"); + } else { + servletResponse.setContentType(typeFromContext); + } + } + + filterChain.doFilter(servletRequest, servletResponse); + } + + @Override + public void destroy() { + // Nothing to tear down + } } - diff --git a/webapp/web/WEB-INF/web.xml b/webapp/web/WEB-INF/web.xml index 6c8a7db6b..720b72fb1 100644 --- a/webapp/web/WEB-INF/web.xml +++ b/webapp/web/WEB-INF/web.xml @@ -1238,8 +1238,63 @@ /selectLocale - + + + + css + text/css + + + gif + image/gif + + + GIF + image/gif + + + htm + text/html + + + html + text/html + + + ico + image/x-icon + + + jpeg + image/jpeg + + + jpg + image/jpeg + + + js + application/javascript + + + png + image/png + + + svg + image/svg+xml + + + txt + text/plain + + + xml + application/xml + + + /WEB-INF/tlds/database.tld