业务方法的参数

业务方法的参数类型、参数个数是任意的,根据需要使用。

常见的参数类型:

  • HttpServletRequest、HttpServletResponse、HttpSession

     获取Servlet原生的API

  • Model 、ModelMap

     向视图传递数据,会自动将Model、ModelMap中的数据传给视图。

  • 简单数据类型 、实体类

     接收表单传递的数据


常见的返回值类型

  • ModeAndView

   视图名+数据

  • String

      返回视图名,会与视图解析器中的前缀、后缀拼接起来,组成完整的视图名。

   可以和@ResponseBody配合使用,直接向浏览器输出字符串。

  • void

     有时候接收到请求后,做一些操作就OK了,不必返回视图来响应,这时可以把返回值类型写成void。

   如果想转发、重定向、向视图传递数据,可以传入参数HttpServletRequest、HttpServletResponse。

   需要注意的是,使用HttpServletRequest、HttpServletResponse进行转发、重定向时,不会使用视图解析器,需要写完整的视图名。


示例   返回视图名

比如登录成功,返回某个视图名,转发到指定的页面。

  1. @RequestMapping("/login")
  2. public String login(){
  3. //....
  4. return "index";
  5. }
  6.  
  7. @RequestMapping("/logout")
  8. public String logout(){
  9. //....
  10. return "index";
  11. }
  12.  
  13. @RequestMapping("/upload")
  14. public String upload(){
  15. //....
  16. return "success";
  17. }

示例  使用Model向视图传递数据

  1. @RequestMapping("/handler")
  2. public String handler(Model model){
  3. User user = new User();
  4. user.setUsername("chy");
  5. user.setPassword("abcd");
  6.  
  7. model.addAttribute("user", user);
  8. return "user_info";
  9. }

在视图中可通过${key}的方式获取对应的value。

Model中可储存多个数据,使用多个setAttribute()即可,数据的类型可以不相同(实质是使用Map储存数据)。


示例   直接输出到浏览器

方式一:

  1. @RequestMapping("/user")
  2. @ResponseBody
  3. public String handler(){
  4. return "<h2>hello</h2>";
  5. }

把字符串添加到响应体中返回给浏览器。浏览器会解析里面的html标签。

方式二:

  1. @RequestMapping("/user")
  2. public void handler(HttpServletResponse response) throws IOException {
  3. response.getWriter().print("<h1>hello</h1>");
  4. }

注意print()才是输出到浏览器页面上,write()是向浏览器写数据,浏览器会把write()的内容保存到文件中(下载)。

SpringMVC controller中业务方法的参数、返回值的更多相关文章

  1. 13 继续C#中的方法,带返回值的方法介绍

    在这一个练习中,我们要使用带返回值的方法.如果一个方法带返回值,那么它的形式是这样的. 定义一个带返回值的C#方法 static 返回类型 方法名字 (参数类型 参数1的名字,参数类型 参数2的名字) ...

  2. 单元测试时候使用[ClassInitialize]会该方法必须是静态的公共方法,不返回值并且应采用一个TestContext类型的参数报错的解决办法

    using Microsoft.VisualStudio.TestTools.UnitTesting; 如果该DLL应用的是 C:\Program Files\Microsoft Visual Stu ...

  3. Spring的Aspect切面类不能拦截Controller中的方法

    根本原因在于<aop:aspectj-autoproxy />这句话是在spring的配置文件内,还是在springmvc的配置文件内.如果是在spring的配置文件内,则@Control ...

  4. 反射找Controller中的方法

    /// <summary> /// 根据接口编码APICode,调用相应的webapi方法,注意返回值是json字符串 /// </summary> /// <param ...

  5. js中settimeout方法加参数

    js中settimeout方法加参数的使用. 简单使用看w3school  里面没有参数调用,  例子: <script type="text/javascript"> ...

  6. ASP.NET MVC4在View中调用当前Controller中的方法

    调用当前Controller中的方法 @{ ((HomeController)ViewContext.Controller).Method1(); } 调用静态方法 @{ SomeClass.Meth ...

  7. Java学习笔记13---如何理解“子类重写父类方法时,返回值若为类类型,则必须与父类返回值类型相同或为其子类”

    子类重新实现父类的方法称重写:重写时可以修改访问权限修饰符和返回值,方法名和参数类型及个数都不可以修改:仅当返回值为类类型时,重写的方法才可以修改返回值类型,且必须是父类方法返回值的子类:要么就不修改 ...

  8. SubSonic3.0使用存储过程查询时,不能使用output参数返回值的问题修改

    有个群友问SubSonic3.0执行存储过程时能不能使用output参数返回值,说测试过后获取不到返回值,早上有些时间所以就尝试修改了一下 首先在数据库中创建一个存储过程 CREATE PROCEDU ...

  9. 创建一个接口Shape,其中有抽象方法area,类Circle 、Rectangle实现area方法计算其面积并返回。又有Star实现Shape的area方法,其返回值是0,Star类另有一返回值boolean型方法isStar;在main方法里创建一个Vector,根据随机数的不同向其中加入Shape的不同子类对象(如是1,生成Circle对象;如是2,生成Rectangle对象;如是3,生成S

    题目补充: 创建一个接口Shape,其中有抽象方法area,类Circle .Rectangle实现area方法计算其面积并返回. 又有Star实现Shape的area方法,其返回值是0,Star类另 ...

随机推荐

  1. JavaScript 深度遍历对象的两种方式,递归与非递归

    递归遍历: 基本问题: 当前属性值不为对象时,打印键和值 递归过程:当前属性值为对象时,打印键,继续递归 var o = { a: { b: { c: { d: { e: { f: 1, g:{ h: ...

  2. 杭电 1772 cake

    Cake Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  3. 【原】Django问题总结

    一:python manage.py makemigrations No changes detected 在修改了models.py后,有些用户会喜欢用python manage.py makemi ...

  4. 「JSOI2010」挖宝藏

    「JSOI2010」挖宝藏 传送门 由于题目中说道挖一个位置的前提是挖掉它上面的三个,以此类推可以发现,挖掉一个点就需要挖掉这个点往上的整个倒三角,那么也就会映射到 \(x\) 轴上的一段区间(可以发 ...

  5. php 安装 swoole

    1.安装swoole cd /usr/local/src wget https://github.com/swoole/swoole-src/archive/v1.9.1-stable.tar.gz ...

  6. Python实现一个LRU

    class Node: key = None value = None pre = None next = None def __init__(self, key, value): self.key ...

  7. 项目中常用的全局宏定义#define

    一 关于屏幕大小 #pragma mark - 屏幕宽高 #define SCREEN_BOUNDS ([UIScreen mainScreen].bounds) #define SCREEN_WID ...

  8. SI架构设计与实践

    拆分数据表 水平拆分: 水平拆分 路由算法 pavarotti17 f(pavarotti17) 路由算法——扩容 路由算法——非均匀分布 拆分表的数据访问——SQL转发 si的策略 MySQL集群替 ...

  9. DAC

    DAC的功能:可以输出电压(无触发,设置DAC转换值,DAC使能更新寄存器和启动转换)或者波形(连续转换,用DMA发送数据,定时器触发).首先有个正弦波波形的数组,内存到DAC的DMA通道不断的将正弦 ...

  10. 第1节 Scala基础语法:scala中的方法源码分析

    val list=List(1,2,3,4) list.reduce((x:Int,y:Int)=>x+y)--->list.reduceLeft((x:Int,y:Int)=>x+ ...