当前位置: 首页 > 面试题库 >

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

阎庆
2023-03-14
问题内容

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

这是Web应用程序的应用程序配置文件。

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


问题答案:

你为什么要尝试推出自己的解决方案。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检查,但默认情况下”“总是失败,并将上下文设置为”“,从而覆盖你的上下文)。



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

  • 我正在尝试以编程方式设置一个spring boot应用程序上下文根。上下文根的原因是我们希望从访问应用程序,并将所有控制器路径附加到它。 下面是Web-App的应用程序配置文件。 这是主页面的索引控制器。 应用程序的新根应该位于,但它仍然位于。 我错过了什么导致spring boot没有在请求映射之前添加上下文根?

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

  • 我目前正在开发基于Quarkus的API,该API将托管在API网关上,该网关要求我们的应用程序以基本路径运行,我通过设置Quarkus发现了这一点。放松。应用程序中的路径。属性我可以使用基本路径运行应用程序,并且它将自动添加到规范中。 我正在使用org生成一个OpenAPI 3规范。日食微文件。openapi。注释。我的问题是,在规范中,这个基本路径被添加到每个操作中。相反,我试图只在服务器声明

  • 在通过dataflow UI部署spring cloud stream应用程序时,我试图将包含属性文件的文件夹添加到我的类路径中。我相信我想使用java cmd行,但当我这样做时,我会得到skipper错误。我的语法有点不正确吗? 也尝试使用引号

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