添加Spring Boot应用程序的上下文路径

java spring spring-mvc spring-boot

245508 观看

10回复

805 作者的声誉

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

这是web-app的应用程序配置文件。

@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 的来源 发布者: 2013 年 12 月 5 日

回应 (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

然后,您可以删除自定义servlet容器的配置。如果需要对容器进行一些后处理,可以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.propertiesunder 的文件,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.propertiesas中 设置它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中有一个war文件,对我有用。在多个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>
作者: Gondri 发布者: 01.11.2017 01:08

-1

29 作者的声誉

上下文路径可以直接集成到代码中,但不建议使用它,因为它无法重用,所以写入application.properties文件server.contextPath = /放置代码的文件夹的名称contextPath =放置文件夹的名称代码/注意:仔细观察斜线。

作者: saravanan 发布者: 10.11.2017 01:12

1

11 作者的声誉

在Spring 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)时才有效。如果您将应用程序作为战争部署到外部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文件配置

[server:port:8080 contextPath:/ context-path]

作者: Ghulam Murtaza 发布者: 23.07.2019 03:47
32x32