如何解决apache-tomcat-8.5.39中的默认内容类型渲染问题?

时间:2019-05-07 06:20:29

标签: css jsp tomcat svg tomcat8.5

我正在设置应用程序以使用最新的apache-tomcat-8.5.39进行测试。当我尝试在任何Web浏览器上加载应用程序时,我的一些资源无法正确加载。

由于Web服务器返回的内容类型,很少有资源无法正确加载。

这些资源是本地资源(从服务器获取): 例如:

CSS

请求网址:http://localhost:8080/workflow/css/wfstyle.css    内容类型:text / html; charset = UTF-8

SVG

请求网址:http://localhost:8080/workflow/images/svg/Delete.svg    内容类型:text / html; charset = UTF-8

但是所有 CDN 都已正确加载

请求网址:https://cdn.abc.ocm/assets/1.5.1/css/abc-design-system-ltr.css    内容类型:文本/ css

这是我将SVG添加到JSP页面的方法:

<span class="esg-icon__container">
   <img src="<%=request.getContextPath()%>/images/svg/Delete.svg"></img>
</span>

从CSS到JSP:

<%
    if(request.getLocale().getLanguage().contains("ar")){
%>

<link href="https://cdn.abc.ocm/assets/1.5.1/css/abc-design-system-rtl.css" rel="stylesheet"/>

<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/abc-design-system-rtl-custom.css" />

<% } else { %>

<link href="https://cdn.abc.ocm/assets/1.5.1/css/abc-design-system-ltr.css" rel="stylesheet"/>

<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/css/abc-design-system-ltr-custom.css" />

<%}%>

tomcat的web.xml:

<mime-mapping>
     <extension>svg</extension>
     <mime-type>image/svg+xml</mime-type>
</mime-mapping>

预期的内容类型

对于CSS:    内容类型:文本/ css

对于SVG:    内容类型:图片/ svg + xml

1 个答案:

答案 0 :(得分:0)

我做了这样的事情:

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain ) throws IOException, ServletException {
        String charEncoding = "UTF-8";
        String contentType = "image/svg+xml;";

        HttpServletRequest request = (HttpServletRequest) servletRequest;

        String file = request.getServletPath();

        if(file.contains(".svg")){
            if(!contentType.equals(servletResponse.getContentType())) {
                servletResponse.setContentType(contentType);
                servletResponse.setCharacterEncoding(charEncoding);
            }
            if(!charEncoding.equals(servletRequest.getCharacterEncoding())) {
                servletRequest.setCharacterEncoding(charEncoding);
            }
        }

        filterChain.doFilter(servletRequest, servletResponse);
    }

而且有效:

  

内容类型:image / svg + xml; UTF-8;

这是一个好习惯吗?如果没有,还有其他方法可以做同样的事情吗?

我正在使用Java1.8和Strust1.2。