Java中getRequestURI和getServletPath的区别

80 阅读1分钟

getRequestURI和getServletPath都属于属于HttpServletRequest接口。

一、当配置了server.verlet.context-path=/kkk时,uri和path的区别

具体测试代码如下

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);
    }

}