请求参数路径变量都可以用于发送值给服务器。二者都是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. 基于vue与vux做的可滑动tab组件(附源码)

    背景 前不久,刚完成了一个商品列表+购物车功能的页面,因为一级商品分类在顶部tab中显示,可滑动,间距可定制,如下图所示: 定制的tab需求如下: 1. 每个tab-item的间距是相同的,可定制 2 ...

  2. Mysql加锁过程详解(5)-innodb 多版本并发控制原理详解

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

  3. Docker的基本操作与示例

    一.RunC RunC是一个由OCI(Open Container Initiative)制定的标准化轻量容器运行工具.OCI是专门致力于制定容器格式和运行时开放的工业化标准的组织.那容器标准化后Do ...

  4. [转] 使用slim3快速开发RESTful API

    本文转自:https://blog.csdn.net/u011250882/article/details/50101599 版权声明:本文为博主原创文章,转载请注明出处和作者名,尊重别人也是尊重自己 ...

  5. 第一册:lesson forty

    原文: Penny's bag. A:Is that bag heavy,Penny? B:Not very. A:Here. Put it on this chair. What's in it? ...

  6. linux基本命令手册

    常用指令 ls         显示文件或目录 -l           列出文件详细信息l(list) -a          列出当前目录下所有文件及目录,包括隐藏的a(all) mkdir    ...

  7. c# json 序列化时遇到错误 error Self referencing loop detected for type

    参考网址:http://blog.csdn.net/adenfeng/article/details/41622255 在写redis缓存帮助类的时候遇到的这个问题,本来打算先序列化一个实体为json ...

  8. WPF 列表虚拟化时的滚动方式

    ListBox的滚动方式 分为像素滚动和列表项滚动 通过ListBox的附加属性ScrollViewer.CanContentScroll来设置.因此ListBox的默认模板中,含有ScrollVie ...

  9. linux下的~/

    在linux里面,~/表示的是个人目录,例如你的账户是student,那么~/代表的是/home/student/

  10. JavaScript中判断整字类型最简洁的实现方法

    这篇文章主要介绍了JavaScript中判断整字类型最简洁的实现方法,本文给出多个判断整数的方法,最后总结出一个最短.最简洁的实现方法,需要的朋友可以参考下 我们知道JavaScript提供了type ...