在springmvc框架中,一个handler方法中的参数可以内置接收Model类型的对象,主要用于存储数据之用,主要用在转发效果,那么能否用在重定向中呢?

我们先来看一个model的简单使用演示。

首先搭建好springmvc环境,springmvc使用的是5.0.2.RELEASE版本。——下面的代码只贴出核心部分

步骤一:web.xml

——主要配置springmvc的核心控制器

dispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
1
dispatcherServlet
/

步骤二:springmvc.xml

<context:component-scan base-package=“springmvc”/>
mvc:annotation-driven/

步骤三:Controller类

package springmvc;
@Controller
public class ModelAndViewTextController {//方法待实现}

步骤四:success.jsp

数据展示

${message}

下面来测试model的基本使用:

需求说明:发送一个testModel请求,后台接收并转发到success.jsp页面,将访问成功的信息带过去。

下面是controller类中方法的完成:

@RequestMapping("/testModel")
public String testModel(Model model){
model.addAttribute(“message”,“测试model成功”);
return “success”;
}

大家注意观察,此处model添加的属性名message要和jsp中的${message}相一致。

启动服务访问后,效果如下:

上述演示的是model模仿request域对象完成转发带数据的效果。下面,我们来通过一个springmvc重定向的演示,来看一下model还能怎么用。

我们都知道,重定向表示会重新发起一个请求,采用的是不同的request对象,即,上一个request域对象中村的数据,下一次请求无法获取了,那么,model.addAttribute()方法存入的数据能不能在重定向时获取呢?

需求说明:发起一个请求 “/dataRedirect?username=宙斯”传递用户名为宙斯,后台handler1接收该参数,并存放到model中,handler1再通过重定向到另一个url “redNext”,在该方法参数中,尝试获取handler1中model的数据

我们在上述环境基础上,再次开发。

在Controller类中添加第一个处理方法

/**
• 使用请求路径 进行访问/dataRedirect?username=宙斯
• @param username //接收请求参数数据
*/
@RequestMapping("/dataRedirect")
public String redirectTest(Model model,String username){
System.out.println(“打印dataRedirect接收到的数据:” + username);
model.addAttribute(“name”,username); //将接收到的数据放到model中
return “redirect:redNext”; //重定向到redNext
}

开发第二个重定向的处理方法

@RequestMapping("/redNext")
//注意,参数中的name和上一个redirectTest方法中,model设置的属性名保持一致
public String redNext(Model model,String name){
System.out.println(“从dataRedirect转发过来之后,接收的数据:” + name);//打印name
return “success”;//重定向到success.jsp页面
}

启动项目查看效果,注意网络请求过程以及后台打印结果

网络请求过程以及显示效果:

后台打印效果:

会发现,model将第一次请求中设置的属性值当做新的请求参数传递给了下一次转发路径所需参数中了。

咱们modeel的这种完成重定向传参的效果演示完毕!


本人所有文章都是自己学习中遇到的问题,完全是为了自己做笔记用的,顺便分享给大家,如有讲错的地方欢迎指正,谢谢!!!