Как обработать статическое содержание в Spring MVC?

Ну, я просто создал закладку в FF3, возвратился и обновил его и добавил следующий тест:

javascript:alert('Wacky%20test%20yo');

Низкий и созерцают, после того, как я сохранил и загрузился, я смог получить свое предупреждение.

я уверен, что можно обработать что-то подобное для потребностей.

197
задан user2418306 2 May 2016 в 10:12
поделиться

6 ответов

Мой способ решения этой проблемы состоит в том, чтобы поместить все ваши действия с определенным префиксом, например, «сеть» или «служба», и настроить, чтобы все URL-адреса с этим префиксом перехватывались DispatcherServlet.

1
ответ дан 23 November 2019 в 05:15
поделиться

Я нашел способ обойти это, используя urlrewritefilter tuckey. Не стесняйтесь дать лучший ответ, если он у вас есть!

В web.xml:

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

  <servlet>
    <servlet-name>app</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>app</servlet-name>
    <url-pattern>/app/*</url-pattern>
  </servlet-mapping>

В urlrewrite.xml:

<urlrewrite default-match-type="wildcard">
<rule>
    <from>/</from>
    <to>/app/</to>
</rule>
<rule match-type="regex">
    <from>^([^\.]+)$</from>
    <to>/app/$1</to>
</rule>
<outbound-rule>
    <from>/app/**</from>
    <to>/$1</to>
</outbound-rule>    

Это означает, что любой uri с '.' в нем (например, style.css) переписываться не будет.

11
ответ дан 23 November 2019 в 05:15
поделиться

Если я правильно понимаю вашу проблему, я думаю, что нашел решение вашей проблемы:

У меня была такая же проблема, когда необработанный вывод был показан без найденных css-стилей, javascripts или jquery-файлов.

Я только что добавил связки в сервлет "по умолчанию". В файл web.xml было добавлено следующее:

 <servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>*.css</url-pattern>
 </servlet-mapping>

 <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
 </servlet-mapping>

Это должно отфильтровывать запросы javascript и css файлов из объекта DispatcherRequest.

Опять же, не уверен, что это то, что вам нужно, но для меня это сработало. Я думаю, что "по умолчанию" - это имя сервлета по умолчанию в JBoss. Не слишком уверен, что это для других серверов.

19
ответ дан 23 November 2019 в 05:15
поделиться

Я только что боролся с этой проблемой весной MVC 3.0, и я изначально пошел с вариантом urlrewritefilter. Однако я не был доволен этим решением, как он «не чувствовал правильно» (я не единственный - посмотрите на ссылку выше на весенние форумы, где слово «взлом» появляется несколько раз).

Итак, я придумал аналогичное решение «Неизвестно (Google)» выше, но заимствовал идею о том, что все статическое содержание подается из / статического / (взято из версии Spring Roo App Store). Сервлет «По умолчанию» не работал для меня, но весной WebFlow Dissorivlevlet (также взял из приложения Spring ROO).

Web.xml:

<servlet>
    <servlet-name>mainDispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>

<servlet>
    <servlet-name>Resource Servlet</servlet-name>
    <servlet-class>org.springframework.js.resource.ResourceServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>mainDispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>Resource Servlet</servlet-name>
    <url-pattern>/static/*</url-pattern>
</servlet-mapping>

Единственное изменение, которое я сделал в JSP, должен был добавить / статический / путь к URL для CSS, JS и изображения. Например. «$ {pageContext.request.contextPath} /static/csss/screen.css».

Для пользователей Maven зависимость для "org.springframework.js.resource.risourceservlet" является:

<dependency>
    <groupId>org.springframework.webflow</groupId>
    <artifactId>org.springframework.js</artifactId>
    <version>2.0.8.RELEASE</version>
</dependency>
11
ответ дан 23 November 2019 в 05:15
поделиться

После того, как я столкнулся с тем же процессом принятия решения, описанным здесь, и прошел через него, я решил воспользоваться предложением ResourceServlet, которое работает довольно хорошо.

Обратите внимание, что дополнительную информацию о том, как использовать webflow в процессе сборки maven, можно здесь: http://static.springsource.org/spring-webflow/docs/2.0.x/reference/html/ch01s05. html

Если вы используете стандартный центральный репозиторий Maven, артефакт будет (в противоположность упомянутому выше пакету springsource):

<dependency>
    <groupId>org.springframework.webflow</groupId>
    <artifactId>spring-js</artifactId>
    <version>2.0.9.RELEASE</version>
</dependency> 
0
ответ дан 23 November 2019 в 05:15
поделиться

URLRewrite - это своего рода «взлом», если вы хотите это так называть. Все сводится к тому, что вы заново изобретаете колесо; так как есть уже существующие решения. Еще одна вещь, о которой следует помнить, - это Http Server = статический контент и сервер приложений = динамический контент (так они были разработаны). Делегируя соответствующие обязанности каждому серверу, вы максимизируете эффективность ... но в наши дни это, вероятно, вызывает беспокойство только в средах, критичных к производительности, и что-то вроде Tomcat, скорее всего, будет хорошо работать в обеих ролях большую часть времени; но, тем не менее, об этом следует помнить.

2
ответ дан 23 November 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: