Вопрос:

Добавить контекстный путь к приложению Spring Boot

java spring spring-mvc spring-boot

245508 просмотра

10 ответа

805 Репутация автора

Я пытаюсь установить корневой контекст приложения Spring Boot программно. Причина корня контекста в том, что мы хотим, чтобы к приложению обращались, 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 не добавляет корневой контекст перед отображением запроса?

Автор: CorreyS Источник Размещён: 05.12.2013 04:33

Ответы (10)


332 плюса

75120 Репутация автора

Решение

Почему вы пытаетесь свернуть свое собственное решение? Spring-boot уже поддерживает это.

Если у вас его еще нет, добавьте application.propertiesфайл в src\main\resources. В этот файл свойств добавьте 2 свойства:

server.contextPath=/mainstay
server.port=12378

ОБНОВЛЕНИЕ (Spring Boot 2.0)

Начиная с Spring Boot 2.0 (благодаря поддержке Spring MVC и Spring WebFlux), contextPathоно было изменено на следующее:

server.servlet.contextPath=/mainstay

Затем вы можете удалить свою конфигурацию для пользовательского контейнера сервлета. Если вам нужно выполнить некоторую постобработку контейнера, вы можете добавить EmbeddedServletContainerCustomizerреализацию в свою конфигурацию (например, чтобы добавить страницы ошибок).

В основном, свойства внутри application.propertiesслужат по умолчанию, вы всегда можете переопределить их, используя другое application.propertiesрядом с артефактом, который вы поставляете, или добавляя параметры JVM ( -Dserver.port=6666).

Смотрите также Справочное руководство, особенно раздел свойств .

Класс ServerPropertiesреализует EmbeddedServletContainerCustomizer. По умолчанию contextPathэто "". В вашем примере кода вы устанавливаете contextPathнепосредственно на TomcatEmbeddedServletContainerFactory. Затем ServerPropertiesэкземпляр обработает этот экземпляр и сбросит его с вашего пути к "". ( Эта строка выполняет nullпроверку, но по умолчанию ""она всегда терпит неудачу и устанавливает контекст ""и, таким образом, переопределяет ваш).

Автор: M. Deinum Размещён: 06.12.2013 07:29

26 плюса

743 Репутация автора

Если вы используете Spring Boot, вам не нужно настраивать свойства сервера через инициализацию Vean.

Вместо этого, если для базовой конфигурации доступна одна функциональность, ее можно установить в файле «свойств» application, который должен находиться src\main\resourcesв структуре вашего приложения. Файл "Свойства" доступен в двух форматах

  1. .yml

  2. .properties

Способ, которым вы указываете или устанавливаете конфигурации, отличается от одного формата к другому.

В вашем конкретном случае, если вы решите использовать расширение .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

Автор: Abhishek Shah Размещён: 09.02.2016 02:34

2 плюса

312 Репутация автора

Мы можем установить его application.propertiesкак API_CONTEXT_ROOT=/therootpath

И мы обращаемся к нему в классе Java, как указано ниже

@Value("${API_CONTEXT_ROOT}")
private String contextRoot;
Автор: Sanket Размещён: 09.12.2016 10:47

7 плюса

2972 Репутация автора

Правильные свойства

server.servlet.path

настроить путь к DispatcherServlet

а также

server.servlet.context-path

настроить путь контекста приложений ниже этого.

Автор: Michael Simons Размещён: 24.04.2017 09:03

15 плюса

597 Репутация автора

Если вы используете Spring Boot 2.0.0, используйте:

server.servlet.context-path
Автор: magemello Размещён: 13.05.2017 12:16

0 плюса

61 Репутация автора

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>
Автор: Gondri Размещён: 01.11.2017 01:08

-1 плюса

29 Репутация автора

Путь контекста может быть непосредственно интегрирован в код, но это не рекомендуется, так как его нельзя использовать повторно, поэтому запишите в файле application.properties server.contextPath = / имя папки, в которую вы поместили код contextPath = имя папки, в которую вы поместили код / ​​примечание: внимательно следите за косой чертой.

Автор: saravanan Размещён: 10.11.2017 01:12

1 плюс

11 Репутация автора

Весной Boot 1.5:

Добавьте следующее свойство в application.properties:

server.context-path=/demo

Примечание: /demoваш URL контекста.

Автор: Piyush Anjikar Размещён: 11.11.2017 04:11

8 плюса

358 Репутация автора

обратите внимание, что свойства «server.context-path» или «server.servlet.context-path» [начиная с springboot 2.0.x] будут работать только при развертывании во встроенный контейнер, например, встроенный tomcat. Эти свойства не будут иметь эффекта, если вы развертываете свое приложение как война, например, для внешнего кота.

см. этот ответ здесь: https://stackoverflow.com/a/43856300/4449859

Автор: abdel Размещён: 02.08.2018 02:47

0 плюса

1 Репутация автора

Вы можете сделать это, легко добавив порт и контекстный путь, чтобы добавить конфигурацию в файл [src \ main \ resources] .properities, а также в файл .yml.

Конфигурация файла allpication.porperties

[server.port = 8080] [server.contextPath = / context-path]

Конфигурация файла application.yml

[сервер: порт: 8080 contextPath: / context-path]

Автор: Ghulam Murtaza Размещён: 23.07.2019 03:47
Вопросы из категории :
32x32