getRequestURI和getServletPath都属于属于HttpServletRequest接口。
一、当配置了server.verlet.context-path=/kkk时,uri和path的区别
- 例如:请求地址为http://localhost:3023/kkk/user/test/index.do?param=1
-
- uri: /kkk/user/test/index.do
-
- path: /user/test/index.do
具体测试代码如下
BaseFilter.java
package com.turnip.tdemo.filters;
import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.http.HttpServletRequest;
import java.io.IOException;
@WebFilter(filterName = "BaseFilter", urlPatterns = {"/*"})
public class BaseFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
/**
* 当配置了context-path时,uri和path的区别
* 例如:请求地址为http://localhost:3023/kkk/user/test/index.do?param=1
* uri: /kkk/user/test/index.do
* path: /user/test/index.do
*/
String uri = request.getRequestURI(); // /user/test/index.do
String path = request.getServletPath();// /user/test/index.do
System.out.println("uri: " + uri);
System.out.println("path: " + path);
filterChain.doFilter(servletRequest, servletResponse);
}
}
application.yml
server:
port: 3023
servlet:
context-path: /kkk
spring:
application:
name: tdemo-app
UserController.java
package com.turnip.tdemo.controllers;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user")
public class UserController {
@GetMapping("/test")
public String test() {
return "test";
}
}
TdemoApplication.java
package com.turnip.tdemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@SpringBootApplication
@ServletComponentScan("com.turnip.tdemo.filters")
public class TdemoAppApplication {
public static void main(String[] args) {
SpringApplication.run(TdemoAppApplication.class, args);
}
}