SpringMVC中的跳转方式、参数接收和数据传递

本文详细介绍了SpringMVC中的两种跳转方式:forward和redirect,以及如何在控制器中接收各种类型的参数,包括基本类型、对象类型、数组类型和集合类型。此外,还讲解了数据传递机制和使用不同跳转方式时数据的处理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.SpringMVC中跳转方式

 

1.跳转方式

说明 : 跳转有两种,一种forward,一种是redirect

    forward跳转,一次请求,地址栏不变

    redirect跳转多次请求,地址栏改变。

# 1. Controller跳转到JSP

      forward跳转到页面 :   默认就是forward跳转    
                   语法:   return "页面逻辑名"

      redirect跳转到页面:   使用springmvc提供redirect:关键字进行重定向页面跳转
                   语法:   return "redirect:/index.jsp"  
                   注意:   使用redirect跳转页面不会经过视图解析器

# 2. Controller跳转到Controller

      forward跳转到Controller  :  使用springmvc提供的关键字forward:
                           语法:  forward:/跳转类上@requestMapping的值/跳转类上@RequestMapping的值
                           
      redirect:跳转到Controller:  使用springmvc提供关键字redirect:
                           语法:  redirect:/跳转类上@requestMapping的值/跳转类上@RequestMapping的值

2.跳转方式总结

 


2.SpringMVC中参数接收

 

接收参数语法说明:springmvc中使用控制器方法参数来收集客户端的请求参数,因此在接收请求参数时直接在需要控制器方法声明即可,springmvc可以自动根据指定类型完成类型的转换操作

1.接收零散类型参数

如: 八种基本类型 + String + 日期类型

a.前台传递参数


# GET 方式传递参数
  http://localhost:8080/springmvc_day1/param/test?name=zhangsan&age=19&sex=true&salary=11.11&bir=2012/12/12

# POST 方式传递参数
    <h1>测试参数接收</h1>
    <form action="${pageContext.request.contextPath}/param/test" method="post">
        用户名: <input type="text" name="name"/>  <br>
        年龄:  <input type="text" name="age"/>   <br>
        性别:  <input type="text" name="sex">    <br>
        工资:  <input type="text" name="salary"> <br>
        生日:  <input type="text" name="bir"> <br>
        <input type="submit" value="提交"/>
    </form>


b.后台控制器接收


@Controller
@RequestMapping("/param")
public class ParamController {
    @RequestMapping("/test")
    public String test(String name, Integer age, Boolean sex,Double salary,Date bir){
        System.out.println("姓名: "+name);
        System.out.println("年龄: "+age);
        System.out.println("性别: "+sex);
        System.out.println("工资: "+salary);
        System.out.println("生日: "+bir);
        return "index";
    }
}

注意:springmvc在接收日期类型参数时日期格式必须为yyyy/MM/dd HH:mm:ss

2.接收对象类型参数

 

a.前台传递参数


# GET 方式请求参数传递
    http://localhost:8080/springmvc_day1/param/test1?name=zhangsan&age=19&sex=true&salary=11.11&bir=2012/12/12

# POST 方式请求参数传递
    <h1>测试对象类型参数接收</h1>
    <form action="${pageContext.request.contextPath}/param/test1" method="post">
        用户名: <input type="text" name="name"/>  <br>
        年龄:  <input type="text" name="age"/>   <br>
        性别:  <input type="text" name="sex">    <br>
        工资:  <input type="text" name="salary"> <br>
        生日:  <input type="text" name="bir"> <br>
        <input type="submit" value="提交"/>
    </form>

注意:在接收对象类型参数时和struts2接收不同,springmvc直接根据传递参数名与对象中属性名一致自动封装对象

b.后台控制器接收


// 1.定义对象
public class User {
    private String name;
    private Integer age;
    private Double salary;
    private Boolean sex;
    private Date bir;
}

//  2.控制器中接收
@RequestMapping("/test1")
public String test1(User user){
  System.out.println("接收的对象: "+user);
  return "index";
}

3.接收数组类型参数

 

a.前台传递参数


# GET 方式请求参数传递
    http://localhost:8080/springmvc_day1/param/test2?names=zhangsan&names=lisi&names=wangwu

# POST 方式请求参数传递
    <h1>测试对象类型参数接收</h1>
    <form action="${pageContext.request.contextPath}/param/test2" method="post">
        爱好: <br>
          看书:  <input type="checkbox" name="names"/> 
          看电视:<input type="checkbox" name="names"/>
          吃饭:  <input type="checkbox" name="names"/>
          玩游戏: <input type="checkbox" name="names"/>
        <input type="submit" value="提交"/>
    </form>


b.后台控制器接收


@RequestMapping("/test2")
public String test2(String[] names){
  for (String name : names) {
    System.out.println(name);
  }
  return "index";
}

注意:接收数组类型数据时前台传递多个key一致自动放入同一个数组中


4.接收集合类型参数

说明:springmvc不支持直接将接收集合声明为控制器方法参数进行接收,如果要接收集合类型参数必须使用对象封装要接收接收类型才可以

 

a.前台传递参数


# GET 方式请求参数传递
    http://localhost:8080/springmvc_day1/param/test3?lists=zhangsan&lists=lisi&lists=wangwu

# POST 方式请求参数传递
    <h1>测试对象类型参数接收</h1>
    <form action="${pageContext.request.contextPath}/param/test3" method="post">
        爱好: <br>
          看书:  <input type="checkbox" name="lists"/> 
          看电视:<input type="checkbox" name="lists"/>
          吃饭:  <input type="checkbox" name="lists"/>
          玩游戏: <input type="checkbox" name="lists"/>
        <input type="submit" value="提交"/>
    </form>


b.后台控制器接收


// 1.封装接收集合类型对象---->在spring mvc中用来接收集合类型参数
public class CollectionVO {
    private List<String> lists;

    public List<String> getLists() {
        return lists;
    }

    public void setLists(List<String> lists) {
        this.lists = lists;
    }
}

// 2.控制器中接收集合类型参数
@RequestMapping("/test3")
public String test3(CollectionVO collectionVO){
  collectionVO.getLists().forEach(name-> System.out.println(name));
  return "index";
}

1.SpringMVC中的数据传递机制

 

1.数据传递机制

# 1.数据怎么存
      Servlet 作用域       Struts2  作用域        SpringMVC 作用域
# 2.数据怎么取
      Servlet EL表达式     Struts2  EL表达式      SpringMVC EL表达式
# 3.数据怎么展示    
      Servlet JSTL标签     Struts2  JSTl标签     SpringMVC  JSTL标签

2.使用forward跳转传递数据

# 1.使用servlet中原始的request作用域传递数据
    request.setAttribute("key",value);

# 2.使用是springmvc中封装的Model和ModelMap对象(底层对request作用域封装)
    model.addAttribute(key,value);
    modelMap.addAttribute(key,value);

3.使用Redirect跳转传递数据

# 1.使用地址栏进行数据传递
   url?name=zhangsan&age=21

# 2.使用session作用域
  session.setAttribute(key,value);
  session.getAttribute(key);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值