栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springmvc(四)处理器方法的返回值

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springmvc(四)处理器方法的返回值

一、几种返回值类型

使用@Controller注解的处理器,其返回值常用四种类型:

ModelAndViewString返回自定义类型对象无返回值void 1.1、返回ModelAndView

前后端未分离开发时,返回ModelAndView,即模型+视图。

  
    @RequestMapping("test01")
    public ModelAndView test01(){
        ModelAndView mv=new ModelAndView();
        //相当于request.addAttribute("name","工作1");
        mv.addObject("name","工作1");
        //经过视图解析器InternalResourceViewResolver处理,将逻辑视图名称变为物理资源路径
        mv.setViewName("/jsp/result");
        return mv;
    } 
1.2、返回String

ModelAndView可以拆分两部分,Model和View,在SpringMVC中Model可以直接在参数中指定,然后返回值是逻辑视图名,视图解析器可以将逻辑视图名转换为物理视图地址。

通过内部视图资源解析器InternalResourceViewResolver将字符串与解析器中的prefix和suffix结合形成跳转的URI。

    
    
        
        
    
    
    @RequestMapping("test02")
    public String test02(HttpServletRequest request){
        Job job=new Job();
        job.setId(1);
        job.setName("任务A");
        job.setDescription("紧急且重要任务");
        request.setAttribute("job",job);
        request.getSession().setAttribute("job",job);
        //经过视图解析器InternalResourceViewResolver处理,将逻辑视图名称变为物理资源路径
        return "/jsp/result";
    }

test02-------request作用域:----------${requestScope.job.id}----------${requestScope.job.name} ----------${requestScope.job.description}

test02-------session作用域:----------${sessionScope.job.id}----------${sessionScope.job.name} ----------${sessionScope.job.description}

1.3、返回对象类型

当处理器返回Object对象类型,可以是Integer、String、Map、List,也可以是自定义对象类型。但是不论是什么类型都不是作为逻辑视图出现,而是直接作为数据返回展示的。一般前端发起Ajax时候都会直接使用返回对象的形式。

返回对象的时候,需要使用@RequestBody注解,将转换后的json数据放入到响应体中。

pom文件中添加两个依赖:

        
            com.fasterxml.jackson.core
            jackson-core
            2.11.2
        
        
            com.fasterxml.jackson.core
            jackson-databind
            2.11.2
        
1.3.1、返回基础类型
    
    @ResponseBody
    @RequestMapping("test03-1")
    public Integer test031(){
        return 100;
    }

    @ResponseBody
    @RequestMapping("test03-2")
    public String test032(){
        return "abc";
    }
1.3.2、返回自定义对象类型
 @ResponseBody
    @RequestMapping("test03-3")
    public Job test033(){
        return new Job(1,"任务1","任务描述",new Date());
    }
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title
    

    


ajax请求自定义对象结果:

1.3.3、返回集合list
 @ResponseBody
    @RequestMapping("test03-4")
    public List test034(){
        List jobList=new ArrayList<>();
        int i=10;
        while (i>0){
            jobList.add(new Job(i,"任务"+i,"任务描述"+i,new Date()));
            i--;
        }
        return jobList;
    }

ajax请求list对象结果:

1.3.4、返回Map集合
    
    @ResponseBody
    @RequestMapping("test03-5")
    public Map test035(){
        Map map=new HashMap<>();
        for(int i=0;i<10;i++){
            map.put(String.valueOf(i),new Job(i,"任务"+i,"任务描述"+i,new Date()));
        }
        return map;
    }

ajax请求map对象结果:

1.4、无返回值void

方法的返回值为void并不一定没有返回值,可以通过其他方式返回给前端。这种方式也为servlet中的处理方案。

 
    @RequestMapping("test04-1")
    public void test041(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("直接使用HttpServletRequest进行服务端转发");
        request.getRequestDispatcher("/ok.jsp").forward(request,response);
    }

    
    @RequestMapping("test04-2")
    public void test042(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("直接使用HttpServletResponse进行重定向");
        response.sendRedirect("/ok.jsp");
    }

    
    @RequestMapping("test04-3")
    public void test043(HttpServletResponse response) throws IOException {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter pw= response.getWriter();
        pw.write("112233");
        pw.flush();
        pw.close();
    }

    
    @RequestMapping("test04-4")
    public void test044(HttpServletResponse response) throws IOException {
        response.setStatus(302);
        response.setHeader("Location","/ok.jsp");
    }
二、页面导航方式

页面导航分为两种:1、转发 2、重定向

SpringMVC有两种方式实现页面转发或重定向:

返回字符串使用ModelAndView

在SpingMVC进行页面导航时使用不同前缀指定转发还是重定向

转发: forward:url 默认重定向: redirect:url 2.1、转发

@Controller
@RequestMapping("nav")
public class NavigationController {

    
    @RequestMapping("test01-1")
    public String test011(HttpServletRequest request){
        request.setAttribute("name","come on");
//        return "ok"; //默认:由视图解析器处理后将逻辑视图转换为物理资源路径
        return "forward:/ok.jsp"; //添加了forward之后,视图解析器前后缀就失效了,必须自己编写绝对路径
    }

    
    @RequestMapping("test01-2")
    public ModelAndView test012(){
        ModelAndView mv=new ModelAndView();
        mv.addObject("name","go go go");
//        mv.setViewName("ok");   //默认:由视图解析器处理后将逻辑视图转换为物理资源路径
        mv.setViewName("forward:/ok.jsp"); //添加了forward之后,视图解析器前后缀就失效了,必须自己编写绝对路径
        return mv;
    }

}
2.2、重定向
 
    @RequestMapping("test02-1")
    public String test021(HttpServletRequest request){
        request.setAttribute("name","come on"); //页面上无法获取到request作用域上的值,请求中断了
        return "redirect:/ok.jsp"; //添加了redirect之后,视图解析器前后缀就失效了,必须自己编写绝对路径
    }

    
    @RequestMapping("test02-2")
    public ModelAndView test022(){
        ModelAndView mv=new ModelAndView();
        mv.addObject("name","go go go"); //存储在request作用域中的值以参数形式添加在url上
        mv.setViewName("redirect:/ok.jsp"); //添加了redirect之后,视图解析器前后缀就失效了,必须自己编写绝对路径
        return mv;
    }
2.3、重定向或转发到控制器
@RequestMapping("test03-1")
    public ModelAndView test031(){
        System.out.println("test03-1转发到控制器");
        ModelAndView mv=new ModelAndView();
        mv.addObject("name","哈哈哈");
        mv.setViewName("forward:/nav/test01-1");
        return mv;
    }


    @RequestMapping("test03-2")
    public ModelAndView test032(){
        System.out.println("test03-2重定向到控制器");
        ModelAndView mv=new ModelAndView();
        mv.addObject("name","哈哈哈");
        mv.setViewName("redirect:/nav/test01-1");
        return mv;
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/732088.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号