返回值类型:String、void、ModelAndView。

一)字符串

Controller方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。

<a href="${pageContext.request.contextPath}/returnValue/returnString">String</a>
    //指定逻辑视图名,经过视图解析器解析为jsp物理路径:/WEB-INF/page/success.jsp
    @RequestMapping("/returnString")
    public String returnString(){
        System.out.println("return String");
        return "success";
    }

二)void

Servlet原始API可以作为控制器方法的参数

<a href="${pageContext.request.contextPath}/returnValue/returnVoid">void</a>
    @RequestMapping("/returnVoid")
    public void returnVoid(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
        System.out.println("return void");
        //在Controller是方法上可以定义request和response,使用request和response指定响应结果。
        //1,使用request转向页面
        httpServletRequest.getRequestDispatcher("/WEB-INF/page/success.jsp").forward(httpServletRequest,httpServletResponse);
        //2,使用response页面重定向
        httpServletResponse.sendRedirect("returnString");
        //3,使用response指定响应结果,如响应json数据
        httpServletResponse.setCharacterEncoding("utf-8");
        httpServletResponse.setContentType("application/json;charset=utf-8");
        httpServletResponse.getWriter().write("json数据");
    }

三)ModelAndView

ModelAndView是SpringMVC提供的一个对象,该对象也可以用作控制器方法的返回值。

该对象中有两个方法:

 

<a href="${pageContext.request.contextPath}/returnValue/returnModelAndView">ModelAndView</a>
    @RequestMapping("/returnModelAndView")
    public ModelAndView returnModelAndView(ModelAndView modelAndView){
        modelAndView.setViewName("success");
        modelAndView.addObject("message","return ModelAnd View");
        return modelAndView;
    }

页面上可以使用${requestScope.message}获取。

 

转发和重定向

forward转发

    @RequestMapping("/forward")
    public String testForward(){
        System.out.println("forward method");
        return "forward:/WEB-INF/page/success.jsp";
    }

需要注意的是,如果用了forward:则路径必须写成实际视图url,不能写逻辑视图。它相当于“request.getRequestDispatcher("url").forward(request,response)”。使用转发,既可以转发到jsp, 也可以转发到其他的控制器方法。

redirect 重定向

    @RequestMapping("/redirect")
    public String testRedirect(){
        System.out.println("redirect method");
        return "redirect:returnString";
    }

它相当于“response.sendRedirect(url)”。需要注意的是,如果重定向到jsp页面,则jsp页面不能写在WEB-INF目录中,否则无法找到。

 

 posted on 2019-11-28 10:20  会飞的金鱼  阅读(262)  评论(0)    收藏  举报