我正在设置应用程序以使用最新的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
答案 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。