springMVC中的各路径符号含义/、/*、/**、classpath*:

本文详细解析了在Interceptor中配置不同路径的意义与区别,包括、/**、/*等通配符的使用场景及含义,并对比了web.xml中的<url-pattern>配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 在Interceptor中配置path=""
    /** 所有路径,及其下子路径
    /* 所有路径,不包括子路径
    / web项目的根目录

  2. classpath 只会在class路径中查找文件
    classpath* 会在jar文件中查找,同时也会在class路径下查找

  3. web.xml中的<url-pattern>...</url-patterm>
    / 匹配/login路径型url,不会匹配到/login.jsp的后缀型url
    /* 会匹配所有url,包括路径型和后缀型
    /**web.xml没这种通配符

<think>我们正在解决两个主要问题:配置SpringMVC拦截器(特别是excludePathPatterns)和自定义静态资源映射(/static/和/upload/路径)参考引用内容:引用[1]提到通过@Configuration和WebMvcConfigurer配置静态资源映射。引用[2]展示了在yml中配置静态资源路径的方法(但注意,用户问题中要求的是自定义/static/和/upload/路径,且我们可能更倾向于使用Java配置)。引用[3]说明了在SpringMVC中需要处理静态资源,否则会被DispatcherServlet拦截,并给出了XML配置方式(但用户使用的是SpringBoot,我们通常用Java配置)。引用[4]提到SpringBoot默认的静态资源目录(static、templates等),但我们现在要自定义。因此,我们将分为两部分:第一部分:配置静态资源映射(自定义/static/和/upload/)第二部分:配置拦截器,并使用excludePathPatterns排除静态资源注意:在SpringBoot中,我们通常使用WebMvcConfigurer接口来配置。步骤:1.静态资源映射配置:默认情况下,SpringBoot会映射classpath:/static/,classpath:/public/等目录。但如果我们想添加额外的路径(比如一个外部路径用于上传文件),或者想自定义映射路径,就需要覆盖默认配置。例如,我们想将请求路径/static/**映射到classpath:/static/,同时将/upload/**映射到一个外部目录(如D:/upload/)。2.拦截器配置:添加一个拦截器,并设置排除路径(excludePathPatterns),将静态资源路径排除,避免拦截静态资源请求。下面分别给出代码示例:</think>### Spring MVC 拦截器与静态资源映射配置指南 #### 一、静态资源映射配置 通过实现 `WebMvcConfigurer` 接口自定义资源映射规则: ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // 映射 /static/**classpath 静态资源 registry.addResourceHandler("/static/**") .addResourceLocations("classpath:/static/"); // 映射 /upload/** 到外部文件系统 registry.addResourceHandler("/upload/**") .addResourceLocations("file:/opt/uploads/"); } } ``` **关键参数说明**: - `addResourceHandler()`:定义URL访问路径模式 - `addResourceLocations()`:指定物理存储路径 - `classpath:/static/`:项目内的资源目录 - `file:/opt/uploads/`:外部磁盘路径(Linux系统) #### 二、拦截器配置与路径排除 配置拦截器并排除静态资源路径: ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new AuthInterceptor()) .addPathPatterns("/**") // 拦截所有路径 .excludePathPatterns( // 排除路径 "/static/**", // 静态资源 "/upload/**", // 上传文件 "/login", // 登录页 "/error" // 错误页 ); } } ``` **`excludePathPatterns` 详解**: 1. **通配符支持**: - `/**`:匹配多级路径(如 `/static/css/main.css`) - `/*`:仅匹配单级路径(如 `/static`) 2. **优先级规则**: ```mermaid graph LR A[请求路径] --> B{匹配拦截器规则} B -->|匹配excludePathPatterns| C[直接放行] B -->|匹配addPathPatterns| D[执行拦截器] ``` 3. **典型排除场景**: - 静态资源:`/static/**`, `/public/**` - 登录相关:`/login`, `/logout` - API文档:`/swagger-ui/**`, `/v3/api-docs` - 错误页面:`/error` #### 三、配置验证与调试 1. **检查映射关系**: ```java @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); // 启动后查看控制台日志 } } ``` 输出示例: ``` Mapped URL path [/static/**] onto locations [classpath:/static/] Mapped URL path [/upload/**] onto locations [file:/opt/uploads/] ``` 2. **路径测试方法**: - 静态资源访问:`http://localhost:8080/static/logo.png` - 上传文件访问:`http://localhost:8080/upload/demo.jpg` - 拦截器排除验证:访问上述URL应不触发拦截器逻辑 #### 四、常见问题解决方案 1. **静态资源404错误**: - 检查物理路径是否存在文件 - 验证资源处理器是否被正确注册[^1] - 确保未覆盖默认静态路径(保留 `classpath:/static/`) 2. **拦截器意外拦截资源**: ```java // 错误示例:路径模式不匹配 .excludePathPatterns("/static") // 缺少通配符,无法匹配/static/css/style.css // 正确写法 .excludePathPatterns("/static/**") ``` 3. **Windows路径问题**: ```java // Windows系统路径格式 .addResourceLocations("file:///D:/project/uploads/") ``` > **最佳实践**:使用 `AntPathMatcher` 测试路径匹配规则: > ```java > PathMatcher pathMatcher = new AntPathMatcher(); > boolean isMatch = pathMatcher.match("/static/**", "/static/images/logo.png"); // 返回true > ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值