Spring MVC 之请求参数和路径变量
请求参数和路径变量都可以用于发送值给服务器。二者都是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 之请求参数和路径变量的更多相关文章
- spring 请求参数和路径变量
请求参数和路径变量:客户端传递参数给服务端的两种方式 请求参数可以发送值传递给服务器,请求参数采用key=value的形式并使用“&”符号进行参数间的分隔,例如: http://localho ...
- Spring MVC 的请求参数获取的几种方法
通过@PathVariabl注解获取路径中传递参数 @RequestMapping(value = "/{id}/{str}") public ModelAndView hello ...
- Spring MVC获取请求参数的其中两张方式
1 @RequestParam 从请求地址获取参数 例如 username=xxxx 2 @PathVariable 从请求路径获取参数 例如 /req/{123}
- Spring MVC url提交参数和获取参数
[转载:http://blog.csdn.net/mahoking] 普通URL提交参数 该格式url为:url.do?param1=mahc¶m2=8888.00 需 ...
- spring MVC处理请求过程及配置详解
本文主要梳理下Spring MVC处理http请求的过程,以及配置servlet及业务application需要的常用标签,及其包含的意义. spring MVC处理请求过程 首先看一个整体图 简单说 ...
- spring MVC处理请求过程
spring MVC处理请求过程 首先看一个整体图 简单说下各步骤: handlerMapping handlerMapping将请求映射到处理器,即图中的HandlerExecutionChain. ...
- Spring Controller 获取请求参数的几种方法
1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交.若"Content-Type"="application/ ...
- Java Spring Controller 获取请求参数的几种方法
技术交流群:233513714 1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交.若"Content-Type"=& ...
- spring mvc get请求也可以接受DTO对象
spring mvc get请求也可以接受DTO对象,比如:url上面你还是将参数&符号连接起来,并自动封装进一个DTO对象里. 只有@RequestBody注解spring mvc才会从ht ...
随机推荐
- JAVA课程设计——一个简单的教务人事管理系统
大三上学期期末总结,没错,上学期,写在下学期新学期开始,哈哈哈. 上学期学习了面向对象程序设计,课程设计的题目使用JAVA语言完成一个简单的教务人事管理系统,能够实现访问数据库的登录验证,分别按部门和 ...
- Flask入门第一天
一.flask介绍 flask诞生于2010年,是Armin ronacher用python语言基于Werkzeug工具箱编写的轻量级web开发框架.flask本身相当于一个内核,其他所有的功能都需要 ...
- 移植 Qt 至 tiny210 详细过程
实验所需资源: tiny210(cortex-a8) QT 版本:5.6.2 PC 环境:UBUNTU tslib:tslib-1.4 交叉工具链:4.5.1 开发板已装载好 Linux 编译 tsl ...
- 跨域学习笔记3--web.config设置之system.webServer 详细介绍,为网站设置默认文档
自己并不懂,在此先记录下来,留待以后学习... 如何:为 IIS 7.0 配置 <system.webServer> 节2008-06-14 22:26http://technet.mic ...
- 如何定义一个有效的OWIN Startup Class
命名约定 Katana在程序集内的程序集名称空间下查找一个叫做Startup的类, 通过属性指定 [assembly: OwinStartup(typeof(OwinConsoleApp.Startu ...
- 使用PoolingHttpClientConnectionManager解决友盟(umeng)推送在多线程环境推送失败的问题
在友盟(umeng)提供的服务端推送的sdk中,使用的是apache提供的httpclient.在单线程化境下,httpclient工作没有问题.但是由于umeng的sdk中并未考虑并发的情况,因此很 ...
- asp.net-基础-20180320
常用页面指令 <%@page%>:一个页面只能有一个 <%@Import NameSpace=“Value“%> 导入命名空间 <%@OutputCache%> 设 ...
- js中const,var,let区别(转载)
js中const,var,let区别 来源:https://www.cnblogs.com/zzsdream/p/6372729.html 今天第一次遇到const定义的变量,查阅了相关资料整理了这篇 ...
- 异常: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configurat
异常: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. ...
- 枚举getClass、getDeclaringClass区别
枚举getClass.getDeclaringClass区别 1):“不含抽象方法”,所有枚举常量未重写方法,的class getClass与getDeclaringClass方法输出结果相同 cla ...