SpringMVC-04 数据处理及跳转

SpringMVC-04 数据处理跳转 结果跳转方式 1.ModelAndView

设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面 .

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

<!-- 视图解析器 --> <bean> <!-- 前缀 WEB-INF中的页面不能直接访问,比较安全 --> <property value="/WEB-INF/jsp/" /> <!-- 后缀 --> <property value=".jsp" />

一、对应的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; } }

二、对应的controller类(注解版)

@Controller public class ControllerTest1 { @RequestMapping("/hello") public String index2(Model model){ model.addAttribute("msg", "ControllerTest1"); return "test"; } }

上面的: mv.setViewName("test"); 和 return "test";

访问的网址为:/WEB-INF/jsp/test.jsp

重定向和转发 1.ServletAPI

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

1、通过HttpServletResponse进行输出

2、通过HttpServletResponse实现重定向

3、通过HttpServletResponse实现转发

@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("/index.jsp"); } @RequestMapping("/result/t3") public void test3(HttpServletRequest req, HttpServletResponse rsp) throws Exception { //转发 req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,rsp); } } 2.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:rsm2/t1"; //请求rsm2/t1 即访问上一个方法 } } 数据处理 1.处理提交数据

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

提交数据 : :8080/hello?name=zc

处理方法 :

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

因为提交数据中,网址中的name和定义的name参数名相同,所以后台输出 : zc

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

提交数据 : :8080/hello?username=zc

处理方法 :

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

因为提交的域名称和处理方法的参数名不一致,可以使用@RequestParam,所以后台依然输出 : zc

提交的是一个对象

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

1、实体类

public class User { private int id; private String name; private int age; //构造 //get/set //tostring() }

2、提交数据 : :8080/user?id=1&name=zc&age=20

3、处理方法 :

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

id、name、age和对象User中定义属性名相同,所以后台输出 : User { id=1,, age=20 }

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

例如:提交数据 : :8080/user?id=1&username=zc&age=20

则:后台输出 : User { id=1, name=null, age=20 }

2.数据显示到前端

前端调用方式:${xxx}

第一种 : 通过ModelAndView

前面一直都是如此 . 就不过多解释

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; } }

第二种 : 通过ModelMap

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzfgy.html