Добавить путь к Spring загрузочному приложению
Я пытаюсь установить программный корневой каталог приложения Spring. Причиной для корня контекста является то, что мы хотим получить доступ к приложению из localhost:port/{app_name}
и добавим к нему все пути контроллера.
Вот файл конфигурации приложения для веб-приложения.
@Configuration
public class ApplicationConfiguration {
Logger logger = LoggerFactory.getLogger(ApplicationConfiguration.class);
@Value("${mainstay.web.port:12378}")
private String port;
@Value("${mainstay.web.context:/mainstay}")
private String context;
private Set<ErrorPage> pageHandlers;
@PostConstruct
private void init(){
pageHandlers = new HashSet<ErrorPage>();
pageHandlers.add(new ErrorPage(HttpStatus.NOT_FOUND,"/notfound.html"));
pageHandlers.add(new ErrorPage(HttpStatus.FORBIDDEN,"/forbidden.html"));
}
@Bean
public EmbeddedServletContainerFactory servletContainer(){
TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
logger.info("Setting custom configuration for Mainstay:");
logger.info("Setting port to {}",port);
logger.info("Setting context to {}",context);
factory.setPort(Integer.valueOf(port));
factory.setContextPath(context);
factory.setErrorPages(pageHandlers);
return factory;
}
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
}
}
Ниже приведен указатель на главной странице.
@Controller
public class IndexController {
Logger logger = LoggerFactory.getLogger(IndexController.class);
@RequestMapping("/")
public String index(Model model){
logger.info("Setting index page title to Mainstay - Web");
model.addAttribute("title","Mainstay - Web");
return "index";
}
}
Новый корень приложения должен быть в localhost:12378/mainstay
, но он все еще находится в localhost:12378
.
Что мне не хватает, что вызывает Spring Boot, чтобы не добавлять корень контекста до сопоставления запросов?
Ответы
Ответ 1
Почему вы пытаетесь перевернуть свое собственное решение. Spring -boot уже поддерживает это.
Если у вас его еще нет, добавьте файл application.properties
в src\main\resources
. В этом файле свойств добавьте 2 свойства:
server.contextPath=/mainstay
server.port=12378
UPDATE (Spring Boot 2.0)
По состоянию на Spring Загрузите 2.0 (из-за поддержки как Spring MVC, так и Spring WebFlux) contextPath
было изменено на следующее:
server.servlet.contextPath=/mainstay
Затем вы можете удалить свою конфигурацию для настраиваемого контейнера сервлета. Если вам нужно выполнить некоторую пост-обработку в контейнере, вы можете добавить реализацию EmbeddedServletContainerCustomizer
в свою конфигурацию (например, чтобы добавить страницы ошибок).
В основном свойства внутри application.properties
служат по умолчанию, вы всегда можете переопределить их, используя другой application.properties
рядом с поставляемым вами артефактом или добавив параметры JVM (-Dserver.port=6666
).
См. также Справочное руководство, особенно properties.
Класс ServerProperties
реализует EmbeddedServletContainerCustomizer
. Значение по умолчанию для contextPath
равно ""
. В примере кода вы устанавливаете contextPath
непосредственно на TomcatEmbeddedServletContainerFactory
. Затем экземпляр ServerProperties
обработает этот экземпляр и reset его с вашего пути до ""
. (Эта строка выполняет проверку null
, но по умолчанию ""
она всегда терпит неудачу и устанавливает контекст в ""
и, таким образом, переопределяет ваш).
Ответ 2
Если вы используете Spring Boot, тогда вам не нужно настраивать свойства сервера с помощью инициализации Vean.
Вместо этого, если для базовой конфигурации доступна одна функциональность, ее можно установить в файле свойств, который называется application
, который должен находиться в src\main\resources
в структуре приложения. Файл свойств доступен в двух форматах.
Способ, которым вы указываете или устанавливаете конфигурации, отличается от одного формата другим.
В вашем конкретном случае, если вы решите использовать расширение .properties
, тогда у вас будет файл с именем application.properties
под src\main\resources
со следующими настройками конфигурации
server.port = 8080
server.contextPath = /context-path
OTOH, если вы решите использовать расширение .yml
(т.е. application.yml
), вам нужно будет установить конфигурации, используя следующий формат (т.е. YAML
):
server:
port: 8080
contextPath: /context-path
Для более общих свойств Spring Boot обратитесь к следующей ссылке:
https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
Ответ 3
Если вы используете Spring Boot 2.0.0, используйте:
server.servlet.context-path
Ответ 4
обратите внимание, что свойства "server.context-path" или "server.servlet.context-path" [начиная с springboot 2.0.x] будут работать только при развертывании во встроенный контейнер, например, встроенный tomcat. Эти свойства не будут иметь эффекта, если вы развертываете свое приложение как война, например, для внешнего кота.
см. этот ответ здесь: fooobar.com/questions/1676681/...
Ответ 5
Правильные свойства
server.servlet.path
чтобы настроить путь DispatcherServlet
и
server.servlet.context-path
чтобы настроить путь к контексту приложений ниже этого.
Ответ 6
Мы можем установить его в application.properties
как
API_CONTEXT_ROOT=/therootpath
И мы обращаемся к нему в классе Java, как указано ниже
@Value("${API_CONTEXT_ROOT}")
private String contextRoot;
Ответ 7
В Spring Загрузка 1.5:
Добавьте в application.properties
следующее свойство:
server.context-path=/demo
Примечание. /demo
- ваш URL-адрес контекстного пути.
Ответ 8
В Spring Загрузка, чтобы изменить путь к контуру, обновите свойства server.contextPath. В следующих примерах обновляется контекстный путь из/в/mkyong или http://localhost:8080/mkyong
Примечание
По умолчанию путь к контексту "/".
1.1 Обновление через файл свойств.
/src/main/resources/application.properties
server.port = 8080
server.contextPath =/mkyong
Ответ 9
server.contextPath =/опора
работает для меня, если у меня есть один файл войны в JBOSS. Среди нескольких файлов войны, где каждый из них содержит jboss-web.xml, он не работает. Мне пришлось поместить jboss-web.xml в каталог WEB-INF с содержимым
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web xmlns="http://www.jboss.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-web_5_1.xsd">
<context-root>mainstay</context-root>
</jboss-web>
Ответ 10
Spring Boot по умолчанию обслуживает содержимое в корневом пути контекста ("/"). Иногда нам нужен собственный путь. Есть несколько способов сделать это.
Самый простой способ изменить путь контекста - установить свойство в application.properties.
server.servlet.context-path=/myWebApp
Другой способ - установить путь к контексту как системное свойство Java до того, как будет инициализирован даже контекст:
public static void main(String[] args) {
System.setProperty("server.servlet.context-path", "/myWebApp");
SpringApplication.run(Application.class, args);
}
Вы также можете установить свойства динамически с помощью аргументов командной строки
java -jar app.jar --server.servlet.context-path=/myWebApp
Spring Boot также может зависеть от переменных среды ОС. На Unix-системах мы можем написать:
export SERVER_SERVLET_CONTEXT_PATH=/myWebApp
В Windows команда для установки переменной среды:
set SERVER_SERVLET_CONTEXT_PATH=/myWebApp
Примечание: решения будут работать для весенней загрузки 2.xx. Надеюсь, поможет.
Ответ 11
Вы можете сделать это, просто добавив порт и contextpath, чтобы добавить конфигурацию в файл [src\main\resources].properties, а также в файл .yml.
Конфигурация файла application.porperties
server.port = 8084
server.contextPath = /context-path
настройка файла application.yml
server:
port: 8084
contextPath: /context-path
Мы также можем изменить это программно в весенней загрузке.
@Component
public class ServerPortCustomizer implements WebServerFactoryCustomizer<EmbeddedServletContainerCustomizer > {
@Override
public void customize(EmbeddedServletContainerCustomizer factory) {
factory.setContextPath("/context-path");
factory.setPort(8084);
}
}
Мы также можем добавить другой способ
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {SpringApplication application = new pringApplication(MyApplication.class);
Map<String, Object> map = new HashMap<>();
map.put("server.servlet.context-path", "/context-path");
map.put("server.port", "808");
application.setDefaultProperties(map);
application.run(args);
}
}
используя команду Java Spring Spring 1.X
java -jar my-app.jar --server.contextPath=/spring-boot-app --server.port=8585
используя команду Java Spring Spring 2.X
java -jar my-app.jar --server.servlet.context-path=/spring-boot-app --server.port=8585
Ответ 12
контекстный путь может быть непосредственно интегрирован в код, но он не рекомендуется, так как он не может быть повторно использован, поэтому напишите в файле application.properties
server.contextPath =/имя папки, в которую вы разместили код
contextPath = имя папки, в которую вы поместили код/
Примечание: внимательно следите за косой чертой.