Как установить корневой контекстный путь Spring
Я новичок в Spring и собираю веб-приложение Spring (не Spring-boot - насколько это важно?). Развертывание происходит на сервере Tomcat 7.
Приложение запущено и работает. Моя проблема в том, что доступен только через стандартный URL:
http://mycompany.com:8081/cwing-0.0.3-SNAPSHOT/index.html
Следующие не работают: http://mycompany.com:8081/cwing-0.0.3-SNAPSHOT http://mycompany.com:8081/cwing-0.0.3-SNAPSHOT/
хотя мой web.xml перечисляет index.html в качестве страницы приветствия.
Дополнительным симптомом проблемы является то, что все виды ссылок в приложении должны быть указаны как относительные, а не с добавленным "/".
Но даже эти URL-адреса не то, что я действительно хочу.
Я бы предпочел уточнить
http://mycompany.com:8081/cwing
и заставить его вызвать index.html.
Следуя указаниям Добавить контекстный путь к приложению Spring Boot
Я создал файл application.xml в src / main / resources со следующим содержимым:
server.contextPath=/cwing
server.port=8081
Это не работает http://mycompany.com:8081/cwing открывает пустую страницу с ошибкой 404 на сервере, как и http://mycompany.com:8081/cwing/index.html.
Я должен что-то упустить. Что еще нужно, чтобы заставить это работать, поскольку я хочу, чтобы это работало?
ОБНОВЛЕНИЕ: как и просили, вот web.xml (ненужные детали удалены).
<?xml version="1.0"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>cwing</display-name>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- The definition of the Root Spring Container shared by all Servlets
and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/context.xml
/WEB-INF/spring/datasource.xml
/WEB-INF/spring/security.xml
</param-value>
</context-param>
<servlet>
<servlet-name>d</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/context.xml
/WEB-INF/spring/datasource.xml
/WEB-INF/spring/security.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>d</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<!-- Disables Servlet Container welcome file handling. Needed for compatibility
with Servlet 3.0 and Tomcat 7.0 -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
...
</web-app>
1 ответ
Это связано не с Spring MVC, а с конкретным сервером, по умолчанию Tomcat получает имя WAR в качестве корневого контекста. Если вы хотите изменить это, вы всегда можете переименовать ваш файл WAR, или я рекомендую изменить ваш pom.xml, чтобы создать файл WAR с окончательным именем, вот как это сделать:
<build>
<finalName>finalName</finalName>
. . .
</build>