Подтвердить что ты не робот

Добавить путь к 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, чтобы не добавлять корень контекста до сопоставления запросов?

4b9b3361

Ответ 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 в структуре приложения. Файл свойств доступен в двух форматах.

  • .yml

  • .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

Ответ 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 = имя папки, в которую вы поместили код/ Примечание: внимательно следите за косой чертой.