A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 大山哥哥 于 2018-10-26 22:45 编辑

      在springmvc框架中,一个handler方法中的参数可以内置接收Model类型的对象,主要用于存储数据之用,主要用在转发效果,那么能否用在重定向中呢?
我们先来看一个model的简单使用演示。

    首先搭建好springmvc环境,springmvc使用的是5.0.2.RELEASE版本。——下面的代码只贴出核心部分
  • 步骤一:web.xml
               ——主要配置springmvc的核心控制器

[XML] 纯文本查看 复制代码
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>


  • 步骤二:springmvc.xml
[XML] 纯文本查看 复制代码
    <!-- 开启注解扫描 -->
    <context:component-scan base-package="springmvc"/>
    <!-- 视图解析器对象 -->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!-- 开启注解的支持 -->
    <mvc:annotation-driven/>


  • 步骤三:Controller类
[Java] 纯文本查看 复制代码
package springmvc;
@Controller
public class ModelAndViewTextController {//方法待实现}

  • 步骤四:success.jsp
[HTML] 纯文本查看 复制代码
<body>

    <h3>数据展示</h3>
    ${message}

</body>


下面来测试model的基本使用:
需求说明发送一个testModel请求,后台接收并转发到success.jsp页面,将访问成功的信息带过去。
下面是controller类中方法的完成:
[Java] 纯文本查看 复制代码
@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类中添加第一个处理方法
[Java] 纯文本查看 复制代码
/**
     * 使用请求路径 进行访问/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
    }

  • 开发第二个重定向的处理方法
[Java] 纯文本查看 复制代码
@RequestMapping("/redNext")
    //注意,参数中的name和上一个redirectTest方法中,model设置的属性名保持一致
    public String redNext(Model model,String name){
        System.out.println("从dataRedirect转发过来之后,接收的数据:" + name);//打印name
        return "success";//重定向到success.jsp页面
    }


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


      后台打印效果:

会发现,model将第一次请求中设置的属性值当做新的请求参数传递给了下一次转发路径所需参数中了
咱们model的这种完成重定向传参的效果演示完毕!









0 个回复

您需要登录后才可以回帖 登录 | 加入黑马