Spring mvc, где нужно поместить файлы css/js/img
0 и проблема с размещением открытых файлов
Я попробовал Где разместить изображения /CSS в spring -mvc-приложении? это решение, но оно не работает для меня
Я попытался разместить свою общую папку где-нибудь в директории WEB-INF
снаружи, но все же ничего
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<display-name>s-mvc</display-name>
<servlet>
<servlet-name>frontController</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>frontController</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<mvc:resources mapping="/css/**" location="/css/"/>
</web-app>
FrontController-servlet.xml
<mvc:annotation-driven/>
<context:component-scan base-package="pl.skowronline.controller" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
и что я вызываю файл css
<link type="text/css" href="/css/bootstrap.css" rel="stylesheet" />
Ответы
Ответ 1
ответ от JB Nizet верен. Однако, похоже, проблема вашего приложения - это не просто место для размещения файла css/js. Для Spring MVC вы должны поместить всю конфигурацию вправо или она не будет работать.
Для простоты просто поместите папку css прямо в папку WEB-INF (/WEB-INF/css), чтобы вы могли получить доступ к ней, как это на вашей странице:
<a href="<c:url value='/css/bootstrap.css'/>"
Эта ссылка должна взять вас непосредственно в файл css. Если это работает, вы можете изменить тег <a>
в тег <link>
для стилизации CSS.
Если это не сработает, нужно проверить несколько вещей:
1) Spring Ограничения безопасности, запрещающие вам доступ к файлам
2) Влияние различных фильтров/перехватчиков, которые могут препятствовать доступу вашего файла.
3) Конфигурация сервлета в web.xml. Убедитесь, что диспетчер не перехватил ваш доступ к файлу CSS.
Часто <mvc:resources>
будет делать все вышеперечисленное для вас. Но на всякий случай это провалилось, вам может понадобиться посмотреть.
Для ошибки <mvc:resources>
:
Соответствующий шаблон является строгим, но объявления не могут быть найдены для элемент 'mvc: resources'.
Похоже, вы еще не объявили правильную схему. Например, вы должны добавить следующие строки в начале файла:
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd" >
UPDATE:
Как ваш ответ, проблема, кажется, здесь:
<servlet-mapping>
<servlet-name>frontController</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Вы должны изменить его на:
<servlet-mapping>
<servlet-name>frontController</servlet-name>
<url-pattern>/*.html</url-pattern>
</servlet-mapping>
Это сохранит URL-адрес для файлов css/images, противоречащих сопоставлению URL-адресов контроллера (вашего сервлета), и пусть mvc: resources делают это волшебство. Конечно, вы можете использовать любое расширение, которое вы хотите для части "html". Для красивого URL-адреса мы можем использовать библиотеку, например Turkey URL rewrite, чтобы решить проблему.
Ответ 2
Я думаю, что вы путаетесь с web.xml
и application-context.xml
.
web.xml
должен содержать объявления webapp
xsd, подобные этому, и сопоставление для Servlet диспетчера.
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>s-mvc</display-name>
<servlet>
<servlet-name>frontController</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>frontController</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
Где в качестве application-context.xml
содержатся объявления spring-framework
xsd, как показано ниже
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<mvc:resources mapping="/css/**" location="/css/"/>
<mvc:annotation-driven />
<context:component-scan base-package="pl.skowronline.controller" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
Ответ 3
Это описано в следующем разделе документации. Следуйте инструкциям, указанным там, а затем измените свой href
: /css/bootstrap.css
означает: В папке css
прямо под корнем сервера. Таким образом, если ваше приложение не используется как корневое приложение, оно не будет работать, потому что вам нужно добавить путь к контексту вашего приложения:
href="<c:url value='/css/bootstrap.css'/>"
И это будет означать: в папке css, прямо под корнем webapp. Если путь контекста вашего webapp /myFirstWebApp
, генерируемый href будет таким образом
href="/myFirstWebApp/css/bootstrap.css"
Ответ 4
Вы можете попробовать использовать контекстный путь для поиска файлов ресурсов.
<link type="text/css" href="${pageContext.request.contextPath}/css/bootstrap.css" rel="stylesheet" />
Прочтите этот, чтобы узнать больше.
Ответ 5
У меня тоже была такая же проблема. Пожалуйста, выполните следующие шаги, чтобы получить работу, которая хорошо работала для меня и моих товарищей по команде.
Шаг1: - Создайте папку в Web-INF с именем "resources"
Шаг 2: - Загрузите загрузочный бутстрап, css и js, если у вас уже есть, или в случае, если вы хотите написать запись в этой папке
Шаг 3: - Теперь обновите свой сервлет-диспетчер xml ниже
Шаг 4: теперь вы можете использовать css, bootstrap resouces в вашем коде, как показано ниже
<header class="custem_header_bg"><img src="resources/img/product_banner.png" class="img-responsive"> </header>
Ответ 6
Вы можете установить базу только на JSP в следующих шагах. Тогда вам не нужно устанавливать mvc: resources в web.xml.
Просто установите базу следующим образом. Также мы можем использовать заголовочный файл, чтобы установить это значение. Затем мы можем включить этот header.jsp в любую страницу, которую мы используем в приложении. Тогда нам не нужно устанавливать это значение в каждом JSP.
Вам нужно установить <base/>
следующим образом:
<c:set var="req" value="${pageContext.request}" />
<c:set var="url"> ${req.requestURL} </c:set>
<c:set var="uri" value="${req.requestURI}" />
<head>
<title></title>
<base href="${fn:substring(url, 0, fn:length(url) - fn:length(uri))}${req.contextPath}/" />
Затем вы можете импортировать любые JS или CSS, как показано ниже.
<script src="assets/js/angular/angular.js"></script>