Примеры в этой статье суммируют общие методы обработки статических файлов в Javaweb, которые имеют большую практическую ценность при разработке программ Javaweb. Конкретные методы суммируются следующим образом:
Способ 1. Активируйте defaultServlet Tomcat для обработки статических файлов.
Добавьте в web.xml:
<servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</ имя-сервлета> <url-шаблон>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping>
Примечание. Его следует написать перед DispatcherServlet, и пусть defaultServlet сначала перехватит запрос, чтобы запрос не попадал в Spring. Я думаю, что производительность будет лучшей.
Имя сервлета по умолчанию, который поставляется с Tomcat, Jetty, JBoss и GlassFish — «по умолчанию».
Имя сервлета по умолчанию, поставляемого с Google App Engine — «_ah_default».
Имя сервлета по умолчанию, который поставляется с Resin — «resin-file».
Имя сервлета по умолчанию, поставляемого с WebLogic — «FileServlet».
Имя сервлета по умолчанию, поставляемого с WebSphere — «SimpleFileServlet».
Способ 2: mvc:resources предоставляется в Spring 3.0.4 и более поздних версиях. Как использовать:
<!-- Доступ к файлам статических ресурсов--> <mvc:resources Mapping="/images/**" location="/images/" />
Описание: /images/** сопоставляется с ResourceHttpRequestHandler для обработки, а местоположение указывает расположение статического ресурса. Он может находиться в корневом каталоге веб-приложения или внутри пакета jar, чтобы статические ресурсы можно было сжать. пакет с банкой. cache- period может включить веб-кэширование статических ресурсов
Способ третий: используйте <mvc:default-servlet-handler/>.
<mvc:default-servlet-handler/>
URL-адрес "/**" будет зарегистрирован в urlMap SimpleUrlHandlerMapping, а доступ к статическим ресурсам будет передан из HandlerMapping в org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler для обработки и возврата.
DefaultServletHttpRequestHandler использует сервлет по умолчанию для каждого контейнера сервлетов.
Дополнительное примечание. Проблемы с порядком выполнения нескольких HandlerMappings:
Значение атрибута порядка DefaultAnnotationHandlerMapping: 0.
<mvc:resources/>Значение атрибута заказа автоматически зарегистрированного SimpleUrlHandlerMapping: 2147483646.
<mvc:default-servlet-handler/>Значение атрибута порядка автоматически зарегистрированного SimpleUrlHandlerMapping: 2147483647
Spring сначала выполнит заказ с меньшим значением. При доступе к файлу изображения a.jpg сначала найдите процессор с помощью DefaultAnnotationHandlerMapping. Он не должен быть найден, поскольку у нас нет действия с именем a.jpg. Затем выполните поиск в порядке возрастания значения заказа. Поскольку последний SimpleUrlHandlerMapping соответствует «/**», он обязательно будет соответствовать, и вы сможете ответить на изображение.
Чтобы получить доступ к изображению, вам нужно пройти через уровни сопоставления. Не знаете, как производительность?
Наконец, позвольте мне объяснить, что при доступе к статическим ресурсам в Схеме 2 и Схеме 3, если существует соответствующий (приблизительный) общий перехватчик, он будет использоваться. Если вы реализуете проверку разрешений при перехвате, будьте осторожны и фильтруйте эти запросы для статических файлов.
Если ваш DispatcherServlet перехватывает суффиксы URL-адресов, такие как *.do, вышеуказанных проблем не будет. По-прежнему удобно иметь суффикс.