解决springmvc使用@PathVariable路径匹配问题

 更新时间:2021年02月24日 09:26:13   作者:文文文文文哥  
这篇文章主要介绍了解决springmvc使用@PathVariable路径匹配问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

一、问题

今天作毕设的时候,在搭建ssm框架的使用使用springmvc的@PathVariable时出现了一个路径匹配的问题,最后花了点时间解决了。

代码结构:

问题内容:

访问url为:

按照道理说,我应该到jsp的index页面去。最后的结果确实到了index页面,可是由于该页面引用了几个css和js,报异常找不到。有使用过spring经验的童鞋应该知道使用如下代码解决静态资源的访问。

// 方法一
<mvc:default-servlet-handler/>
// 方法二
<mvc:resources location="/easyui/js/" mapping="/themes/**"/>
<mvc:resources location="/easyui/themes/" mapping="/js/**"/>

可是最后还是访问不到静态资源。

于是我就想是因为@PathVariable的原因吗?于是在下面做了一个实验

@RequestMapping("/index")
 public String index() {
  System.out.println("index execute ");
  return "index";
 }

实验的结果就是可以正确访问。看样子好像确实是这样。于是我又再一次访问上面的地址(http://localhost:8080/ksxt_v1/user/index),并且打开控制台来查看,如下:

从上面标识的地方可以看出问题的原因了,当请求的URL为http://localhost:8080/ksxt_v1/user/index时,它在请求静态资源的时候也会把user带上,我们的静态资源肯定不是放在这个文件夹里面的了。最后的结局当然是找不到了。

二、解决方法

上面的问题产生是因为我在引用静态文件使用的是相对路径。

解决方法就是将其全部修改为绝对路径。

<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/easyui/themes/default/easyui.css" rel="external nofollow" >
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/easyui/themes/icon.css" rel="external nofollow" >
<script type="text/javascript" src="${pageContext.request.contextPath}/easyui/js/jquery.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/easyui/js/jquery.easyui.min.js"></script>

最后完美解决。当然应该也有其它方式解决,暂时未想到。

补充:SpringMVC 请求路径结尾存在.使用@PathVariable访问路径内容,路径参数获取不准确的问题

SpringMVC采用Get方式请求资源时,如果请求路径的结尾中带有小数点(.)时,同时使用@PathVariable访问路径内容时,请求路径中最后一个小数点及其后面的内容会被Spring截断丢弃

比如针对版本的访问

对于请求路径:

http://host:port/program/module/download/apk/3.20.10

后端RequestMapping为

@RequestMapping(value="module/download/apk/{version}",method=RequestMethod.GET)
public void download(HttpSession session,HttpServletResponse response,@PathVariable("version")String version){
  //解析后获得到的版本值为:3.20
}

又比如针对文件的访问

对于请求路径:

http://host:port/program/viewFile/module/201612201231445.pdf

后端RequestMapping为

@RequestMapping(value="viewFile/{module}/{filename}",method=RequestMethod.GET)
public void viewFile(HttpSession session,HttpServletResponse response,@PathVariable String module, @PathVariable String filename){
  //解析后获得到的文件名称为201612201231445并没有或追文件后缀
}

在确实需要使用以小数点的路径进行请求的话可以选择如下两种解决方案:

1、在路径后加任意小数点结尾的字符串

http://host:port/program/module/download/apk/3.20.10.html

http://host:port/program/viewFile/module/201612201231445.pdf.jsp

2、使用Spring正则表达式(SpEL)

@RequestMapping(value="module/download/apk/{version:.+}",method=RequestMethod.GET)
@RequestMapping(value="viewFile/{module}/{filename:.+}",method=RequestMethod.GET)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • Java实现在正则表达式中控制大小写的方法

    Java实现在正则表达式中控制大小写的方法

    这篇文章主要介绍了Java实现在正则表达式中控制大小写的方法,结合实例形式分析了java正则表达式中传递控制参数的功能与相关操作技巧,需要的朋友可以参考下
    2017-04-04
  • SpringBoot实现动态端口切换黑魔法

    SpringBoot实现动态端口切换黑魔法

    这篇文章主要为大家详细介绍了SpringBoot如何实现动态端口切换黑魔法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-12-12
  • Spring MVC项目中的异常处理详解

    Spring MVC项目中的异常处理详解

    在Web开发中 我们经常会需要处理各种异常,这篇文章主要给大家介绍了关于Spring MVC项目中异常处理的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Spring Boot 项目启动失败的解决方案

    Spring Boot 项目启动失败的解决方案

    这篇文章主要介绍了Spring Boot 项目启动失败的解决方案,帮助大家更好的理解和学习使用Spring Boot,感兴趣的朋友可以了解下
    2021-03-03
  • sharding-jdbc读写分离原理详细解析

    sharding-jdbc读写分离原理详细解析

    这篇文章主要介绍了sharding-jdbc读写分离原理详细解析,很多时候,为了应付DB的高并发读写,我们会采用读写分离技术,读写分离指的是利用数据库主从技术(把数据复制到多个节点中),分散读多个库以支持高并发的读,需要的朋友可以参考下
    2023-12-12
  • Spring框架十一种常见异常的解决方法汇总

    Spring框架十一种常见异常的解决方法汇总

    今天小编就为大家分享一篇关于Spring框架十一种常见异常的解决方法汇总,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Java实现拖拽列表项的排序功能

    Java实现拖拽列表项的排序功能

    这篇文章主要介绍了Java实现拖拽列表项的排序功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • Java将不同的List集合复制到另一个集合常见的方法

    Java将不同的List集合复制到另一个集合常见的方法

    在Java中,有时候我们需要将一个List对象的属性值复制到另一个List对象中,使得两个对象的属性值相同,这篇文章主要介绍了Java将不同的List集合复制到另一个集合常见的方法,需要的朋友可以参考下
    2024-09-09
  • Java Calendar日历类原理及使用方法

    Java Calendar日历类原理及使用方法

    这篇文章主要介绍了Java Calendar日历类原理及使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Spring事务管理配置文件问题排查

    Spring事务管理配置文件问题排查

    这篇文章主要介绍了Spring事务管理配置文件问题排查,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05

最新评论