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"
This commit is contained in:
Jim Blake 2015-03-27 15:38:38 -04:00
parent a71f05d2f0
commit 8e429ca878
2 changed files with 88 additions and 12 deletions

View file

@ -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
}
}

View file

@ -1238,8 +1238,63 @@
<url-pattern>/selectLocale</url-pattern>
</servlet-mapping>
<!-- ==================== mime types ============================== -->
<mime-mapping>
<extension>css</extension>
<mime-type>text/css</mime-type>
</mime-mapping>
<mime-mapping>
<extension>gif</extension>
<mime-type>image/gif</mime-type>
</mime-mapping>
<mime-mapping>
<extension>GIF</extension>
<mime-type>image/gif</mime-type>
</mime-mapping>
<mime-mapping>
<extension>htm</extension>
<mime-type>text/html</mime-type>
</mime-mapping>
<mime-mapping>
<extension>html</extension>
<mime-type>text/html</mime-type>
</mime-mapping>
<mime-mapping>
<extension>ico</extension>
<mime-type>image/x-icon</mime-type>
</mime-mapping>
<mime-mapping>
<extension>jpeg</extension>
<mime-type>image/jpeg</mime-type>
</mime-mapping>
<mime-mapping>
<extension>jpg</extension>
<mime-type>image/jpeg</mime-type>
</mime-mapping>
<mime-mapping>
<extension>js</extension>
<mime-type>application/javascript</mime-type>
</mime-mapping>
<mime-mapping>
<extension>png</extension>
<mime-type>image/png</mime-type>
</mime-mapping>
<mime-mapping>
<extension>svg</extension>
<mime-type>image/svg+xml</mime-type>
</mime-mapping>
<mime-mapping>
<extension>txt</extension>
<mime-type>text/plain</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xml</extension>
<mime-type>application/xml</mime-type>
</mime-mapping>
<!-- ==================== tag libraries ============================== -->
<jsp-config>
<taglib>
<taglib-uri>/WEB-INF/tlds/database.tld</taglib-uri>