请求参数路径变量都可以用于发送值给服务器。二者都是URL的一部分。请求参数采用key=value形式,并用“&”分隔。

例如,下面的URL带有一个名为productId的请求参数,其值为3:

http://localhost:8080/项目名/view-product?productId=3

在传统的Servlet编程中,可以使用HttpServletRequest的getParameter方法来获取一个请求参数值:

String productId = httpServletRequest.getParameter("productId");

Spring MVC 提供了一个更加简单的方法来获取请求参数值:

使用org.springframework.web.blind.annotation.RequestParam注解类型来注解方法参数。

例如,下面的方法包含了一个获取请求参数productId值的参数。

public void sendProduct (@RequestParam int productId)

正如你看到的,@RequestParam注解的参数类型不一定是字符串。

路径变量类似请求参数,但没有key部分,只有一个值。

例如,在项目中,view-product动作映射到如下URL:

/view-product/productId

其中的productId是表示产品标识符的整数。

在Spring MVC中,productId称为路径变量,用来发送一个值到服务器。

下面的viewProduct方法演示了一个路径变量的使用。

使用路径变量:

@RequestMapping(value = "/view-product/{id}")
public String viewProduct(@PathVariable Long id, Model model) {
   Product product = productService.get(id);
   model.addAttribute("product", product);
   return "ProductView";
}

为了使用路径变量,首先需要在RequestMapping注解的值属性中添加一个变量,该变量必须放在花括号之间。

例如,下面的RequestMapping注解定义了一个名为id的路径变量:

@RequestMapping(value = "/view-product/{id}")

然后,在标签名中添加一个同名变量,并加上@PathVariable注解。当viewProduct方法被调用时,请求URL的id值将被复制到路径变量中,并可以在方法中使用。路径变量的类型可以不是字符串。Spring MVC将尽力转换成一个非字符串类型。

可以在请求映射中使用多个路径变量。例如,下面定义了userId和orderId两个路径变量。

@RequestMapping(value = "/view-product/{userId}/{orderId}")

有时,使用路径变量时会遇到一个小问题:在某些情况下,浏览器可能会误解路径变量。

http://example.com/context/abc

浏览器会(正确)认为abc是一个动作。任何静态文件路径的解析,如CSS文件,将使用http://example/context作为基本路径。

这就是说,若服务器发送的网页中包含img元素:

该浏览器将试图通过http://example.com/context/logo.png来加载logo.png资源。

然而,若一个程序被部署为默认上下文(默认上下文是一个空字符串),则对于同一个目标的URL: http://example.com/abc

下面是带有路径变量的URL:

http://example.com/abc/1

在这种情况下,浏览器会认为abc是上下文,没有动作。如果在页面中使用,

浏览器将试图通过 http://example.com/abc/logo.png来加载图像资源,并且它将找不到该图像。

这时,一般通过使用JSTL标记的URL。标签会通过正确解析URL来修复该问题。例如,annotated2中所有的JSP页面导入的所有CSS,从 <style type = "text/css">@import url(css/main.css);</style>

修改为 <style type = "text/css">@import url("c:url value = "/css/main.css"/>");</style>

若程序部署为默认上下文,链接标签会将该URL转换成如下所示形式:

<style type ="text/css">@import url("/css/main.css");</style>

若程序不在默认上下文中,则它会被转换成如下形式:

<style type="text/css">@import url("/项目名/css/main.css");</style>

Spring MVC 之请求参数和路径变量的更多相关文章

  1. spring 请求参数和路径变量

    请求参数和路径变量:客户端传递参数给服务端的两种方式 请求参数可以发送值传递给服务器,请求参数采用key=value的形式并使用“&”符号进行参数间的分隔,例如: http://localho ...

  2. Spring MVC 的请求参数获取的几种方法

    通过@PathVariabl注解获取路径中传递参数 @RequestMapping(value = "/{id}/{str}") public ModelAndView hello ...

  3. Spring MVC获取请求参数的其中两张方式

    1 @RequestParam  从请求地址获取参数  例如 username=xxxx 2 @PathVariable  从请求路径获取参数  例如 /req/{123}

  4. Spring MVC url提交参数和获取参数

    [转载:http://blog.csdn.net/mahoking] 普通URL提交参数         该格式url为:url.do?param1=mahc&param2=8888.00 需 ...

  5. spring MVC处理请求过程及配置详解

    本文主要梳理下Spring MVC处理http请求的过程,以及配置servlet及业务application需要的常用标签,及其包含的意义. spring MVC处理请求过程 首先看一个整体图 简单说 ...

  6. spring MVC处理请求过程

    spring MVC处理请求过程 首先看一个整体图 简单说下各步骤: handlerMapping handlerMapping将请求映射到处理器,即图中的HandlerExecutionChain. ...

  7. Spring Controller 获取请求参数的几种方法

    1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交.若"Content-Type"="application/ ...

  8. Java Spring Controller 获取请求参数的几种方法

    技术交流群:233513714  1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交.若"Content-Type"=& ...

  9. spring mvc get请求也可以接受DTO对象

    spring mvc get请求也可以接受DTO对象,比如:url上面你还是将参数&符号连接起来,并自动封装进一个DTO对象里. 只有@RequestBody注解spring mvc才会从ht ...

随机推荐

  1. 最近公共祖先(least common ancestors,LCA)

    摘要: 本文主要介绍了解决LCA(最近公共祖先问题)的两种算法,分别是离线Tarjan算法和在线算法,着重展示了在具体题目中的应用细节. 最近公共祖先是指对于一棵有根树T的两个结点u和v,它们的LCA ...

  2. 【Go】获取用户真实的ip地址

    原文链接:https://blog.thinkeridea.com/201903/go/get_client_ip.html 用户请求到达提供服务的服务器中间有很多的环节,导致服务获取用户真实的 ip ...

  3. Python数值类型

    数值类型 python的数值类型包括常规的类型:整数(没有小数部分的数字).浮点数(通俗地说,就是有小数部分的数字)以及其它数值类型(复数.分数.有理数.无理数.集合.进制数等).除了十进制整数,还有 ...

  4. linux添加字体

    执行命令发现输入命令查看字体列表是提示命令无效: 如上图可以看出,不仅没有中文字体,连字体库都没有,那么接下来就记录一下在Linux CentOS 7中如何安装字体库以及中文字体. 安装字体库 在Ce ...

  5. [PHP] 算法-字符串的左循环的PHP实现

    汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”abcXYZde ...

  6. [算法总结] 13 道题搞定 BAT 面试——字符串

    1. KMP 算法 谈到字符串问题,不得不提的就是 KMP 算法,它是用来解决字符串查找的问题,可以在一个字符串(S)中查找一个子串(W)出现的位置.KMP 算法把字符匹配的时间复杂度缩小到 O(m+ ...

  7. Spring Data REST API集成Springfox、Swagger

    原文: Documenting a Spring Data REST API with Springfox and Swagger 使用Spring Date REST,你可以迅速为Spring Da ...

  8. Java岗 面试考点精讲(网络篇03期)

    1. OSI七层模型 总结一下: 应用用层按协议打包数据 由传输层加上双方的端口号 由网络层加上双方的IP地址 由链路层加上双方的MAC地址,并将数据拆分成数据帧 数模信号转换并由物理层传输到另一端 ...

  9. 持续集成 自动化构建、测试、部署您的Coding代码

    持续集成(Continuous Integration)指的是,频繁地(一天多次)将代码集成到主干. 持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量. 它的核心措施是,代码集成到主干之前, ...

  10. EF中更新操作 ID自增但不是主键 ;根据ViewModel更新实体的部分属性

    //ID自增但不是主键的情况 public int Update_join<TEntity>(TEntity entity) where TEntity : class { dbconte ...