Правильный способ ссылки на CSS в сервлете с JSP, вызванным другой страницей - PullRequest
1 голос
/ 21 мая 2019

У меня есть приложение Java WebServlet (например, javax.servlet.annotation.WebServlet @WebServlet), которое возвращает страницу JSP в качестве ответа на запрос POST. По сути, это «виджет» для панели инструментов.

Все работает, как и ожидалось, когда я делаю почтовый звонок непосредственно в службу, включая ресурсы, такие как .css включает

Однако, когда я выполняю ajax-вызов службы с веб-страницы (для заполнения div)

$.ajax( "http://localhost:8680/jsdv-status-panel/tsv-multi",
        { data: JSON.stringify(
              {"some json here" }
          ),
          contentType: 'application/json',
          type: 'POST',
          success:  function(data){
              $("#main_div").html(data);
            }
        });

браузер выдает ошибку

Refused to apply style from 'http://localhost:63342/test_app/resources/css/statuspanel.css' because its MIME type ('text/html') is not a supported stylesheet

, который, как я понимаю, свидетельствует о том, что он не может найти ресурс, что, как я понимаю, потому что .css-файл в JSP использует относительный URI {context} /resources/css/statuspanel.css

Итак, веб-страница, выполняющая вызов для получения JSP, транспонирует {context} в свой собственный контекст, который я предполагаю.

Это "исправимо", указав полный URL-адрес пути службы ресурса css, например

http://localhost:8680/my_web_service/restful_path/resources/css/statuspanel.css

Мой вопрос - это правильный или предпочтительный способ сделать это? Просто убедитесь, что ресурс доступен с клиента и указали полный URL, а НЕ используете относительный путь к ресурсу?

Или у меня может быть что-то неправильно настроено?

Я не "думаю", что у меня есть проблема или необходимость сопоставления типа ресурса контекста в web.xml, и я не "думаю", что мне нужно что-то вроде

<mvc:resources location="/resources/" mapping="/resources/**" />

потому что он находит ресурс на стороне сервера (что означает, что DefaultDispatcher находит его локально, да?).

Servlet

@WebServlet(name="jsdv-status-panel", asyncSupported = true, urlPatterns = { "/tsv-last-value", "/tsv-window", "/tsv-multi" }, loadOnStartup = 1)

Это НЕ работает на стороне клиента

<link rel="stylesheet" type="text/css" href="./resources/css/statuspanel.css"/>

Это работает на стороне клиента

<link rel="stylesheet" type="text/css" href="http://localhost:8680/jsdv-status-panel/resources/css/statuspanel.css"/>

Итак, я просто предполагаю, что {context} является причиной, а .css всегда на стороне клиента? поэтому явно укажите URL / URI в JSP (или на стороне сервера)

Да?

У меня нет переопределений web.xml - только аннотации @WebServlet.

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