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

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

这篇文章主要介绍了解决springmvc使用@PathVariable路径匹配问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

一、问题

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

代码结构:
image.png

问题内容:

image.png

访问url为:
image.png

按照道理说,我应该到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),并且打开控制台来查看,如下:
image.png

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

二、解决方法

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

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

<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 网络架构
SpringMVC@PathVariable
SpringMVC@PathVariable
80 0
|
XML JSON 数据格式
SpringMVC - @RequestMapping、@ResponseBody、@RequestBody、@RequestParam、@PathVariable(二)
SpringMVC - @RequestMapping、@ResponseBody、@RequestBody、@RequestParam、@PathVariable(二)
191 0
SpringMVC - @RequestMapping、@ResponseBody、@RequestBody、@RequestParam、@PathVariable(二)
SpringMVC - @RequestMapping、@ResponseBody、@RequestBody、@RequestParam、@PathVariable(一)
SpringMVC - @RequestMapping、@ResponseBody、@RequestBody、@RequestParam、@PathVariable(一)
122 0
SpringMVC - @RequestMapping、@ResponseBody、@RequestBody、@RequestParam、@PathVariable(一)
|
Java
SpringMVC之@PathVariable 映射 URL 绑定的占位符
SpringMVC之@PathVariable 映射 URL 绑定的占位符
179 0
SpringMVC - @PathVariable设置为空的问题(required=false)
SpringMVC - @PathVariable设置为空的问题(required=false)
742 0
|
XML JSON Java
SpringMVC - @RequestMapping、@ResponseBody、@RequestBody、@RequestParam、@PathVariable(三)
SpringMVC - @RequestMapping、@ResponseBody、@RequestBody、@RequestParam、@PathVariable(三)
143 0
springmvc中@PathVariable和@RequestParam的区别
http://localhost:8080/Springmvc/user/page.do?pageSize=3&pageNow=2 你可以把这地址分开理解,其中问号前半部分:http://localhost:8080/Springmvc/user/page.
944 0
|
JavaScript 前端开发
SpringMVC中通过@ResponseBody返回对象,Js中调用@ResponseBody返回值,统计剩余评论字数的js,@RequestParam默认值,@PathVariable的用法
1、SpringMVC中通过@ResponseBody返回对象,作为JQuery中的ajax返回值 package com.kuman.cartoon.controller;   import java.util.Map;   import javax.servlet.http.HttpServletRequest;   import org.apac
2967 0
|
索引 Java Spring
SpringMVC常用注解實例詳解1:@Controller,@RequestMapping,@RequestParam,@PathVariable
SpringMVC常用注解實例詳解1:@Controller,@RequestMapping,@RequestParam,@PathVariable 我的開發環境框架:        springmvc+spring+freemarker開發工具: springsource-tool-suite-2.
1116 0