将上下文path添加到Spring Boot应用程序

我正尝试以编程方式设置Spring Boot应用程序上下文根。 上下文根的原因是我们希望从localhost:port/{app_name}访问应用程序,并将所有控制器path附加到它。

这是Web应用程序的应用程序configuration文件。

 @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在请求映射之前不追加上下文根?

你为什么试图推出自己的解决scheme。 春季启动已经支持。

如果还没有,请将一个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 

然后,您可以删除自定义servlet容器的configuration。 如果您需要在容器上进行一些后处理,您可以将EmbeddedServletContainerCustomizer实现添加到您的configuration中(例如添加错误页面)。

基本上, application.properties的属性作为默认值,您可以通过使用您提供的工件旁边的另一个application.properties或添加JVM参数( -Dserver.port=6666 )来覆盖它们。

参见“参考指南”,特别是“ 属性”部分。

ServerProperties类实现了EmbeddedServletContainerCustomizercontextPath的默认值是"" 。 在你的代码示例中,你直接在TomcatEmbeddedServletContainerFactory上设置contextPath 。 接下来, ServerProperties实例将处理这个实例,并将其从path重置为"" 。 ( 这行做了null检查,但是默认情况是""它总是失败并且设置上下文为"" ,因此覆盖你的)。

如果你正在使用Spring Boot,那么你不必通过Vean初始化configuration服务器属性。

相反,如果一个function可用于基本configuration,则可以将其设置为一个名为application的“properties”文件,该文件应位于应用程序结构中的src\main\resources下。 “属性”文件有两种格式

  1. .yml

  2. .properties

您指定或设置configuration的方式因格式而异。

在您的具体情况下,如果您决定使用扩展名.properties ,那么您将在src\main\resources下有一个名为application.properties的文件,具有以下configuration设置

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

OTOH,如果您决定使用.yml扩展名(即application.yml ),则需要使用以下格式(即YAML )设置configuration:

 server: port: 8080 contextPath: /context-path 

有关Spring Boot的更多常见属性,请参阅下面的链接:

https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

如果你使用Spring Boot 2.0.0,请使用:

server.servlet.contextpath

我们可以在application.properties中将其设置为API_CONTEXT_ROOT=/therootpath

我们在Java类中访问它,如下所述

 @Value("${API_CONTEXT_ROOT}") private String contextRoot; 

正确的属性是

 server.servlet.path 

configurationDispatcherServlet的path

 server.servlet.context-path 

在下面configuration应用程序上下文的path。

在Spring Boot中,要更改上下文path,请更新server.contextPath属性。 以下示例更新从/到/ mkyong或http:// localhost:8080 / mkyong的上下文path

注意默认情况下,上下文path是“/”。

1.1通过属性文件更新。

/src/main/resources/application.properties

server.port = 8080

server.contextPath = / mkyong

server.contextPath = /支柱

为我工作,如果我在JBOSS有一个战争文件。 在多个war文件中,每个文件都包含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> 

上下文path可以直接集成到代码中,但不可取,因为它不能被重用,因此在application.properties文件中写入server.contextPath = /放置代码的文件夹的名称contextPath =放置的文件夹的名称代码/注意:仔细看斜线。

在Spring Boot 1.5中:

application.properties添加以下属性:

 server.context-path=/demo 

注意: /demo是您的上下文pathURL。