Как исправить проблему рендеринга типа контента по умолчанию в apache-tomcat-8.5.39? - PullRequest
0 голосов
/ 07 мая 2019

Я настраиваю свое приложение для тестирования с последней версией apache-tomcat-8.5.39.Когда я пытаюсь загрузить свое приложение в любом веб-браузере, некоторые из моих ресурсов загружаются неправильно.

Немногие ресурсы загружаются неправильно из-за типа контента, возвращаемого веб-сервером.

Эти ресурсы являются локальными ресурсами (взятыми с серверов): например:

CSS :

URL-адрес запроса: http://localhost:8080/workflow/css/wfstyle.css Content-Type: text / html; charset = UTF-8

SVG :

URL запроса: http://localhost:8080/workflow/images/svg/Delete.svg Содержимое-Тип: текст / HTML;charset = UTF-8

Но все CDN загружаются правильно

URL запроса: 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" />

<%}%>

web.xml от tomcat:

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

Ожидаемый тип контента

Для CSS: тип контента: text / css

Для SVG: тип контента: image / svg + xml

1 Ответ

0 голосов
/ 08 мая 2019

Я сделал что-то вроде этого:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...