Spring Boot 上下文路径
最后修改于 2023 年 7 月 16 日
Spring Boot 上下文路径教程展示了如何在 Spring 应用程序中设置上下文路径。
Spring 是一个流行的 Java 应用程序框架,而 Spring Boot 是 Spring 的一个演进,它有助于轻松创建独立的、生产级的基于 Spring 的应用程序。
上下文路径
上下文路径 是我们访问应用程序的 URL 的名称。 默认上下文路径为空。
上下文路径可以通过多种方式更改。我们可以在属性文件中设置它,使用 SERVER_SERVLET_CONTEXT_PATH 环境变量,使用 Java 系统属性或在命令行中设置。
$ export SERVER_SERVLET_CONTEXT_PATH=/myapp
在 Unix 系统上,我们可以使用 export 命令更改 SERVER_SERVLET_CONTEXT_PATH。
> set SERVER_SERVLET_CONTEXT_PATH=/myapp
在 Windows 上,使用 set 命令完成。
server.servlet.context-path=/myapp
该属性可以在 application.properties 文件中更改。(也可以在 application.yml 文件中。)
@Configuration
public class AppConfig {
@Bean
public WebServerFactoryCustomizer<ConfigurableServletWebServerFactory>
webServerFactoryCustomizer() {
return factory -> factory.setContextPath("/myapp");
}
}
上下文路径可以使用 WebServerFactoryCustomizer bean 设置。
@SpringBootApplication
public class Application {
public static void main(String[] args) {
System.setProperty("server.servlet.context-path", "/myapp");
SpringApplication.run(Application.class, args);
}
}
在这里,我们使用 Java 系统属性设置上下文。
new SpringApplicationBuilder(Application.class)
.bannerMode(Banner.Mode.OFF)
.properties("server.servlet.context-path=/myapp")
.logStartupInfo(false)
.build()
.run(args);
在这里,我们使用 SpringApplicationBuilder 将上下文路径设置为默认属性。
$ java -jar -Dserver.servlet.context-path=/test target/SpringBootContextPath-1.0-SNAPSHOT.jar
在这里,我们在命令行中设置上下文路径。
Spring 为这些选项提供了不同的优先级。以下列表按降序显示优先级。
- Java 配置
- 命令行参数
- Java 系统属性
- 操作系统环境变量
- application.properties
- 默认属性
选项越高,优先级越高。
Spring Boot 上下文路径示例
在以下应用程序中,我们设置了一个自定义上下文路径。 几个选项被注释掉了。 尝试使用这些选项,以了解它们的优先级。
... Tomcat started on port(s): 8080 (http) with context path '/myapp'
当应用程序启动时,Spring Boot 会在终端上显示一条关于所选上下文路径的信息消息。
build.gradle
...
src
├── main
│ ├── java
│ │ └── com
│ │ └── zetcode
│ │ ├── Application.java
│ │ ├── config
│ │ │ └── AppConfig.java
│ │ └── controller
│ │ └── MyController.java
│ └── resources
│ └── application.yml
└── test
├── java
└── resources
这是项目结构。
plugins {
id 'org.springframework.boot' version '3.1.1'
id 'io.spring.dependency-management' version '1.1.0'
id 'java'
}
group = 'com.zetcode'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
这是 Gradle 构建文件。
server:
servlet:
context-path: /myapp3
在 application.yml 文件中,我们编写了 Spring Boot 应用程序的各种配置设置。 我们可以在这里设置上下文路径。可以使用其他具有更高优先级的选项(例如 @Bean 配置)覆盖此配置。
package com.zetcode.config;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
//@Configuration
public class AppConfig {
@Bean
public WebServerFactoryCustomizer<ConfigurableServletWebServerFactory>
webServerFactoryCustomizer() {
return factory -> factory.setContextPath("/myapp1");
}
}
在这里,我们使用 WebServerFactoryCustomizer bean 设置上下文路径。
package com.zetcode.controller;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class MyController {
@GetMapping(value = "/", produces = MediaType.TEXT_PLAIN_VALUE)
public @ResponseBody String home() {
return "home page";
}
}
MyController 处理来自客户端的请求。对于主页,它返回一个简单的文本值。
package com.zetcode;
import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
// System.setProperty("server.servlet.context-path", "/myapp2");
// SpringApplication.run(Application.class, args);
new SpringApplicationBuilder(Application.class)
.bannerMode(Banner.Mode.OFF)
.properties("server.servlet.context-path=/myapp4")
.logStartupInfo(false)
.build()
.run(args);
}
}
Application 是设置 Spring Boot 应用程序的入口点。我们也可以在这里设置上下文路径;可以使用 Java 系统属性,也可以使用构建器的默认属性。
在本文中,我们展示了如何在 Spring Boot 应用程序中设置上下文路径。