将上下文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
类实现了EmbeddedServletContainerCustomizer
。 contextPath
的默认值是""
。 在你的代码示例中,你直接在TomcatEmbeddedServletContainerFactory
上设置contextPath
。 接下来, ServerProperties
实例将处理这个实例,并将其从path重置为""
。 ( 这行做了null
检查,但是默认情况是""
它总是失败并且设置上下文为""
,因此覆盖你的)。
如果你正在使用Spring Boot,那么你不必通过Vean初始化configuration服务器属性。
相反,如果一个function可用于基本configuration,则可以将其设置为一个名为application
的“properties”文件,该文件应位于应用程序结构中的src\main\resources
下。 “属性”文件有两种格式
-
.yml
-
.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。