Springboot中的context-path

Springboot中的context-path,第1张

  Context path of the application. 应用的上下文路径,也可以称为项目路径,是构成url地址的一部分。

  SpringBoot 2.0.0.RELEASE版本以及之后

  SpringBoot 2.0.0.RELEASE版本以及之前

  假设我的应用有个接口/api/test,我在本地的8080端口启动我的应用。访问这个接口的url为localhost:8080/api/test.

  加上了context-path为myapp1之后,我去访问这个接口的url就要变成localhost:8080/myapp1/api/test

  springboot项目设置了context-path之后,假如设置为myapp1,那么项目启动之后,访问项目的所有请求的URI必须/myapp1开头,才能访问进项目。

  我的项目设置了context-path为myapp1,然后我想搞个过滤器MyFilter来处理以"/api"开头的请求,配置filter的过滤规则的时候,我将其设置成了"/myapp1/api/*",结果向应用发送localhost:8080/myapp1/api/test的时候死活也进入不到我的MyFilter过滤器中。

  最后查看源码发现,如果项目设置了context-path,tomcat,spring在将请求的URI和我们设置的过滤器匹配规则进行比较的时候,用来比较的requestURI已经是去掉context-path的了,所以设置filter的匹配规则的时候不要管context-path是多少。

spring-boot默认提供内嵌的tomcat,所以打包直接生成jar包,用java -jar命令就可以启动。但是,有时候我们更希望一个tomcat来管理多个项目,这种情况下就需要项目是war格式的包而不是jar格式的包。spring-boot同样提供了解决方案,只需要简单的几步更改就可以了,这里提供maven项目的解决方法:

1.将项目的启动类Application.java继承SpringBootServletInitializer并重写configure方法

@SpringBootApplication

public class Application extends SpringBootServletInitializer {

@Override

protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {

return application.sources(Application.class)

}

public static void main(String[] args) throws Exception {

SpringApplication.run(Application.class, args)

}

}12345678910111213

2.在pom.xml文件中,project下面增加package标签

<packaging>war</packaging>1

3.还是在pom.xml文件中,dependencies下面添加

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-tomcat</artifactId>

<scope>provided</scope>

</dependency>12345

这样,只需要以上3步就可以打包成war包,并且部署到tomcat中了。需要注意的是这样部署的request url需要在端口后加上项目的名字才能正常访问。spring-boot更加强大的一点就是:即便项目是以上配置,依然可以用内嵌的tomcat来调试,启动命令和以前没变,还是:mvn spring-boot:run。

如果需要在springboot中加上request前缀,需要在application.properties中添加server.contextPath=/prefix/即可。其中prefix为前缀名。这个前缀会在war包中失效,取而代之的是war包名称,如果war包名称和prefix相同的话,那么调试环境和正式部署环境就是一个request地址了。

前端在做Ajax请求时,

如果用Jquery提供的Ajax,那么每次都要设定URL的部署名ContextPath。

项目规模起来的话,为了适当减少工作量。

同时避免个别开发人员不调用共通方法,直接把部署名拼到URL上。

对Ajax的设定做如下修正。可以解决上述的两个问题。

共通方法getContextPath()的内容

或者

调用Ajax的方法


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11355963.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存