当前位置: 首页 > 知识库问答 >
问题:

向spring boot应用程序添加上下文路径

卫阳曜
2023-03-14

我正在尝试以编程方式设置一个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没有在请求映射之前添加上下文根?

共有2个答案

单于扬
2023-03-14

如果您使用的是spring boot,那么您就不必通过Bean初始化来配置服务器属性。

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

>

  • .yml

    .properties

    指定或设置配置的方式因格式不同而不同。

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

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

    另外,如果您决定使用.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

  • 袁羽
    2023-03-14

    你干嘛要把你自己的解决方案。spring-博特已经支持这一点了。

    如果还没有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.context-path=/mainstay
    

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

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

    另请参阅《参考指南》,特别是“属性”部分。

    ServerProperties实现EmbeddedServletContainerCustomizer上下文路径的默认值为“”。在代码示例中,您将直接在TomCatEmbeddedServletContainerFactory上设置ContextPath。接下来,ServerProperties实例将处理此实例,并将其从您的路径重置为“”。(该行执行null检查,但默认值为“”时,它总是失败,并将上下文设置为“”,从而覆盖您的上下文)。

     类似资料:
    • 我通过将上下文路径设置为/myservice来运行我的springboot应用程序。这将导致附加在URL处公开的所有执行器endpoint-http://localhost:8080/myservice/actuator/,而我只想要http://localhost:8080/actuator/.有没有办法告诉springboot忽略将上下文路径附加到执行器endpoint(通过Dispatche

    • 我已经使用Spring初始值设定项、嵌入式Tomcat、Thymeleaf模板引擎和作为可执行JAR文件的包生成了一个Spring Boot web应用程序。 使用的技术: Spring启动2.0.0。M6,Java8, Maven 这是我的安全配置 在我的 但当我在http://localhost:1234/iberiaWebUtils,而不是去http://localhost:1234/ibe

    • 问题内容: 我试图以编程方式设置一个Spring Boot应用程序上下文根。上下文根的原因是我们希望从中访问该应用,并将所有控制器路径附加到该应用。 这是Web应用程序的应用程序配置文件。 这是主页的索引控制器。 应用程序的新根目录应位于,但仍位于。 我错过了什么导致Spring Boot在请求映射之前不附加上下文根的问题? 问题答案: 你为什么要尝试推出自己的解决方案。Spring-boot已经

    • 我有一个eureka服务,它有一个swagger。eureka在http://localhost:8050,服务按名称 /service.问题是当我打开swagger并尝试发出请求时,它会将其发送到。该服务有一个上下文路径“path”,因此它应该是。这是swagger的配置:

    • 我需要将sqljdbc42.jar库添加到类路径中,以便连接到Azure SQL数据库。如何(如果可能的话)在Azure Web Service-Web App(Java with Tomcat server)中做到这一点。添加JDBC库还有其他方法吗? 连接字符串: 复制自门户:jdbc:sqlserver://testnabaza.database.windows.net:1433;datab

    • 我正在尝试找到一种方法来显式指定部署到Glassfish的Web应用程序的上下文路径3.1.2.2但到目前为止我还没有运气。有人能对此提供指导吗?背景如下: 我有一个Web应用程序,它由两个单独的Netbean(7.0)项目组成。第一个是Web服务,称为FOWS。第二个是使用FOWS网络服务的面向用户的Web应用程序。它被称为FooApp。 我最近将glassfish升级到3.1.2.2,希望解决