HttpServletRequest

Spring会自动将 Servlet API 作为参数传过来

HttpServletResponse
InputStream

相当于request.getInputStream() 获取请求区内容字节流

OutputStream

相当于request.getOutputStream() 获取响应区内容字节流

Reader

request.getReader()

Writer

request.getWriter()

注意InputStream/OutputStream不能与Reader/Writer混用

WebRequest

提供了统一的访问请求数据的接口(参数区、请求头区,但不能访问Cookie区)

NativeWebRequest

继承WebRequest,提供本地Servelt API

webRequest.getParameter(“test”)

webRequest.setAttribute(“key”,”value”,WebRequest.SCOPE_REQUEST);作用域范围

webRequest.getAttribute(“key”,WebRequest.SCOPE_REQUEST)

request = nativeWebRequest.getNativeRequest(HttpServletRequest.class)

response = nativeWebRequest.getNativeResponse(HttpServletResponse.class)

HttpSession

  Spring MVC自动将Servlet API的session传递过来

命令对象

  就是带有setter方法的普通类,用于接收表单参数

Map map, Model model, ModelMap modelMap
这三个参数能够暴露控制器中的模型,用于页面的数据渲染
    @RequestMapping("exposeModelData.do")
public String testExposeModelData(Map<String,String> map, Model model, ModelMap modelMap){
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
Date date = new Date();
map.put("key1","value1"+dateFormat.format(date));
model.addAttribute("key2","value2"+dateFormat.format(date));
modelMap.addAttribute("key3","value3"+dateFormat.format(date));
return "exposeModelData";
}
    <table>
<thead><h2>显示控制器暴露的模型数据</h2></thead>
<tbody>
<tr>
<td>Map</td>
<td><c:out value="${key1}"/></td>
</tr>
<tr>
<td>Model</td>
<td><c:out value="${key2}"/></td>
</tr>
<tr>
<td>ModelMap</td>
<td><c:out value="${key3}"/></td>
</tr>
</tbody>
</table>

页面上可以这样获取数据

其实,Map、Model、ModelMap三者是同一个对象,都是 BindingAwareModelMap 的实例

Errors

错误对象,建议错误对象紧跟在命令对象后(这点在Spring3.1之前是强制规定)

Locale

本地对象,等价于 ServletRequest.getLocale

@RequestParam注解过的对象

如 @RequestParam String username,则自动从请求中获取参数名为username的值,也可以指定参数名,@RequestParam("username"),也可以指定是否必须?默认值是多少?

@RequestParam(value = "pageName",required = true,defaultValue = "testModelValueUI")

默认值除了可以是具体的值外,也可以是SpEL表达式。如  #{systemProperties['java.vm.version']}

如果请求中包含了同名参数,则一般使用数组或列表来接收

                    <td><input type="checkbox" name="cbx" value="1"/></td>
<td><input type="checkbox" name="cbx" value="2"/></td>
<td><input type="checkbox" name="cbx" value="3"/></td>
<td><input type="checkbox" name="cbx" value="4"/></td>
<td><input type="checkbox" name="cbx" value="5"/></td>
<td><input type="checkbox" name="cbx" value="6"/></td>
    @RequestMapping("testRequestParam.do")
public String testRequestParam(@RequestParam String[] cbx){
for (String cb:cbx) System.out.println(cb);
return "requestParam";
}

@ModelAttribute 放在处理请求的方法参数上,绑定的命令对象

如果将 @ModelAttribute 添加到了方法上(不是参数位置),则暴露返回对象用于页面渲染(注意,这个方法不是功能方法,应该是被Controller调用的方法(我觉得这没啥用))

如果将 @ModelAttribute 放在了返回值上,则暴露返回值给页面

@SessionAttribute 绑定命令对象到session,一般用于多个页面的连续请求

@Value注解,用于将一个SpEL表达式的值绑定到处理方法参数上

@Value("#{systemProperties[java.vm.version]}")

Spring MVC控制器方法参数类型的更多相关文章

  1. spring mvc 控制器方法传递一些经验对象的数组

    由于该项目必须提交一个表单,其中多个对象,更好的方法是直接通过在控制器方法参数的数组. 因为Spring mvc框架在反射生成控制方法的參数对象的时候会调用这个类的getDeclaredConstru ...

  2. MVC控制器方法返回类型

    控制器公开控制器操作.操作是控制器上的方法,在浏览器的地址栏中输入特定 URL 时被调用.例如,假设要请求下面的 URL: http://localhost/Product/Index/3 在这种情况 ...

  3. 关于一些Spring MVC控制器的参数注解总结

    昨天同事问我控制器参数的注解的问题,我好久没那样写过,把参数和url一起设置,不过,今天我看了一些文章,查了一些资料,我尽可能的用我自己的理解方式来解释它吧! 1.@RequestParam绑定单个请 ...

  4. SpringMVC(八):使用Servlet原生API作为Spring MVC hanlder方法的参数

    在SpringMVC开发中,是有场景需要在Handler方法中直接使用ServletAPI. 在Spring MVC Handler的方法中都支持哪些Servlet API作为参数呢? --Respo ...

  5. spring mvc:练习 @RequestParam(参数绑定到控制器)和@PathVariable(参数绑定到url模板变量)

    spring mvc:练习 @RequestParam和@PathVariable @RequestParam: 注解将请求参数绑定到你的控制器方法参数 @PathVariable: 注释将一个方法参 ...

  6. spring mvc: 属性方法名称解析器(多动作控制器)MultiActionController/ControllerClassNameHandlerMapping/PropertiesMethodNameResolver

    spring mvc: 属性方法名称解析器(多动作控制器) 加入控制器是StudentContrller.java,里面有3个方法 index,add,remove 那么访问地址是: http://l ...

  7. 关于laravel5.5控制器方法参数依赖注入原理深度解析及问题修复

    在laravel5.5中,可以根据控制器方法的参数类型,自动注入一个实例化对象,极大提升了编程的效率,但是相比较与Java的SpringMVC框架,功能还是有所欠缺,使用起来还是不太方便,主要体现在方 ...

  8. SpringBoot系列: Spring MVC视图方法的补充

    SpringMVC 视图方法的参数, 已经在这个文章中写得非常清楚了, 链接为 https://www.cnblogs.com/morethink/p/8028664.html 这篇文章做一些补充. ...

  9. spring mvc获取路径参数的几种方式 - 浅夏的个人空间 - 开源中国社区

    body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...

随机推荐

  1. Linux I/O调度

    一) I/O调度程序的总结 1) 当向设备写入数据块或是从设备读出数据块时,请求都被安置在一个队列中等待完成.    2) 每个块设备都有它自己的队列.    3) I/O调度程序负责维护这些队列的顺 ...

  2. Unix系统中常用的信号含义

    http://blog.csdn.net/u012349696/article/details/50687462 编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ...

  3. Java基础——动态代理

    1.什么是动态代理? 简单的来说,就是本来让我自己做的事,请给别人来做,这个请的人就是代理对象 那么动态代理就是在程序运行过程中产生这个代理对象,而程序运行中产生的对象就是用反射的来生成一个代理. 举 ...

  4. 洛谷 3567/BZOJ 3524 Couriers

    3524: [Poi2014]Couriers Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 2895  Solved: 1189[Submit][S ...

  5. ngin负载均衡集群(一)

    一.nginx负载均衡集群介绍: 1.反向代理与负载均衡概念简介严格地说, nginx仅仅是作为 Nginx Proxy反向代理使用的,因为这个反向代理功能表现的效果是负载均衡集群的效果,所以本文称之 ...

  6. HTTP协议原理

    HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP).通过使用网页浏览器.网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80).我们称这个客户 ...

  7. Laravel — homestead 配置多站点

    一.homestead.yaml 配置 homestead.yaml 文件配置sites,如下 sites: - map: homestead.test to: /home/vagrant/Code/ ...

  8. Python学习笔记:装饰器

    Python 装饰器的基本概念和应用 代码编写要遵循开放封闭原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即: 封闭:已 ...

  9. music21 关联 MuseScore 和 Lilypond

    在python安装 music21后,需要关联 musescore 或 lilypond 才能可以用图形化的形式看到 乐谱. 因此 在安装 music21后,需要配置环境变量,yvivid 在 mus ...

  10. git初次建立远程仓库问题

    git "Could not read from remote repository.Please make sure you have the correct access rights. ...