数据处理与跳转

声明

本文为其他博主原创文章整合,仅用作个人学习,特此声明

参考文章链接如下:

(5条消息) 【狂神SpringMVC笔记】SpringMVC整理笔记(附代码)(共八章)_-Blue.的博客-CSDN博客_狂神springmvc代码

SpringMVC04:数据处理及跳转

4、数据处理及跳转

SpringMVC04:数据处理及跳转

4.1 结果跳转方式

1、ModelAndView

设置ModelAndView对象 , 根据view的名称 , 和视图解析器(视图解析器会把view的名称和视图解析器配置内容拼接起来)跳到指定的页面 .

页面 : {视图解析器前缀} + viewName +{视图解析器后缀}

比如说下边这个例子,跳转页面为 /WEB-INF/jsp/test.jsp

<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
     id="internalResourceViewResolver">
   <!-- 前缀 -->
   <property name="prefix" value="/WEB-INF/jsp/" />
   <!-- 后缀 -->
   <property name="suffix" value=".jsp" />
</bean>

对应的controller类

public class ControllerTest1 implements Controller {

    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        //返回一个模型视图对象
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","ControllerTest1");
        mv.setViewName("test");
        return mv;
    }
}

2、ServletAPI

通过设置ServletAPI , 不需要视图解析器 .

1、通过HttpServletResponse进行输出

2、通过HttpServletResponse实现重定向

3、通过HttpServletResponse实现转发

package com.xy.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Controller
public class ResultGo {

    @RequestMapping("/result/t1")
    public void test1(HttpServletRequest req, HttpServletResponse rsp) throws IOException {
        //输出
        rsp.getWriter().println("Hello,Spring BY servlet API");
    }

    @RequestMapping("/result/t2")
    public void test2(HttpServletRequest req, HttpServletResponse rsp) throws IOException {
        //重定向
        rsp.sendRedirect("/springmvc-04-controller/index.jsp");
    }

    @RequestMapping("/result/t3")
    public void test3(HttpServletRequest req, HttpServletResponse rsp) throws Exception {
        //转发
        req.setAttribute("msg","/result/t3");
        req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,rsp);
    }

}

重定向不会走视图解析器的,请求转发才会。并且重定向不能访问WEB-INF目录下的内容


3、SpringMVC

通过SpringMVC来实现转发和重定向 - 无需视图解析器;

测试前,需要将视图解析器注释掉

@Controller
public class ResultSpringMVC {
    @RequestMapping("/rsm/t1")
    public String test1(){
        //转发
        return "/index.jsp";
    }

    @RequestMapping("/rsm/t2")
    public String test2(){
        //转发二
        return "forward:/index.jsp";
    }

    @RequestMapping("/rsm/t3")
    public String test3(){
        //重定向
        return "redirect:/index.jsp";
    }
}

通过SpringMVC来实现转发和重定向 - 有视图解析器;

重定向 , 不需要视图解析器 , 本质就是重新请求一个新地方嘛 , 所以注意路径问题.

可以重定向到另外一个请求实现 .

@Controller
public class ResultSpringMVC2 {
    @RequestMapping("/rsm2/t1")
    public String test1(){
        //转发
        return "test";
    }

    @RequestMapping("/rsm2/t2")
    public String test2(){
        //重定向
        return "redirect:/index.jsp";
        //return "redirect:hello.do"; //hello.do为另一个请求/
    }

}

重定向不会走视图解析器的,请求转发才会。并且重定向不能访问WEB-INF目录下的内容


4.2 处理提交数据

1、提交的域名称和处理方法的参数名一致

提交数据 : http://localhost:8080/hello?name=xy

处理方法 :

@RequestMapping("/hello")
public String hello(String name){
   System.out.println(name);
   return "hello";
}

后台输出 : xy

2、提交的域名称和处理方法的参数名不一致

提交数据 : http://localhost:8080/hello?username=xy

处理方法 :添加注释@RequestParam("username"),类似于一个中间转换器的角色

//@RequestParam("username") : username提交的域的名称 .
@RequestMapping("/hello")
public String hello(@RequestParam("username") String name){
   System.out.println(name);
   return "hello";
}

后台输出 : xy

3、提交的是一个对象

要求提交的表单域和对象的属性名一致 , 参数使用对象即可

1、实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private int id;
    private String name;
    private int age;
}

2、不提交数据 : http://localhost:8080/mvc04/user/t1

3、处理方法 :

@Controller
@RequestMapping("/user")
public class UserController {
    @GetMapping("/t1")
    public String test1(String name, Model model){
        // 1. 接收前端参数
        System.out.println("接收到前端的参数为"+name);

        // 2. 将返回的结果传递纷前端, Model
        model.addAttribute("msg",name);

        // 3. 视图跳转
        return "test";
    }
}

输出结果:

4、提交数据:http://localhost:8080/mvc04/user/t1?name=xy&id=1&age=15

输出结果:

说明:如果使用对象的话,前端传递的参数名和对象名必须一致,否则就是null。

posted @ 2022-06-19 21:39  无关风月7707  阅读(23)  评论(0编辑  收藏  举报