1. 程式人生 > 實用技巧 >SpringMvc響應資料和結果檢視

SpringMvc響應資料和結果檢視

響應資料和結果檢視

返回值分類

字串

controller 方法返回字串可以指定邏輯檢視名,通過檢視解析器解析為物理檢視地址。
//指定邏輯檢視名,經過檢視解析器解析為 jsp 物理路徑:/WEB-INF/pages/success.jsp
@RequestMapping("/testReturnString")
public String testReturnString() {
System.out.println("AccountController 的 testReturnString 方法執行了。。。。");
return "success"; }

執行結果:

void

在昨天的學習中,我們知道 Servlet 原始 API 可以作為控制器中方法的引數:

@RequestMapping("/testReturnVoid")
public void testReturnVoid(HttpServletRequest request,HttpServletResponse response) 
throws Exception {
}在 controller 方法形參上可以定義 request 和 response,使用 request 或 response 指定響應結果:

1、使用 request 轉向頁面,如下:
request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,
response);
2、也可以通過 response 頁面重定向:

response.sendRedirect("testRetrunString") 3、也可以通過 response 指定響應結果,例如響應 json 資料:
response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("json 串");

ModelAndView

ModelAndView 是 SpringMVC 為我們提供的一個物件,該物件也可以用作控制器方法的返回值。
該物件中有兩個方法:


例項程式碼:

//返回值為ModelAndView
    @RequestMapping("/test01")
    public ModelAndView test01(){
        User user = new User();
//        user.setUname("張三");
        user.setAge(12);

        ModelAndView mv=new ModelAndView();
        mv.addObject("user",user);
        mv.setViewName("ok");
        return mv;

    }


ok.jsp程式碼:
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1>入門成功</h1>
    ${user.uname}
    ${user.age}
</body>
</html>

forward轉發

 //forward轉發方式
    @RequestMapping("/test02")
    public String test02(){
        System.out.println("forward");
        return "forward:/WEB-INF/pages/ok.jsp";
    }

需要注意的是,如果用了 formward:則路徑必須寫成實際檢視 url,不能寫邏輯檢視。
它相當於“request.getRequestDispatcher("url").forward(request,response)”。使用請求
轉發,既可以轉發到 jsp,也可以轉發到其他的控制器方法。

Redirect 重定向

 @RequestMapping("/test03")
    public String test03(){
        System.out.println("redirect");
        return "redirect:/index.jsp";
    }

它相當於“response.sendRedirect(url)”。需要注意的是,如果是重定向到 jsp 頁面,則 jsp 頁面不
能寫在 WEB-INF 目錄中,否則無法找到。

ResponseBody 響應 json 資料

作用:
該註解用於將 Controller 的方法返回的物件,通過 HttpMessageConverter 介面轉換為指定格式的
資料如:json,xml 等,通過 Response 響應給客戶端

需求:
使用@ResponseBody 註解實現將 controller 方法返回物件轉換為 json 響應給客戶端。
前置知識點:
Springmvc 預設用 MappingJacksonHttpMessageConverter 對 json 資料進行轉換,需要加入
jackson 的包。

 @RequestMapping("/test04")
    public @ResponseBody User test04(@RequestBody User user){
        System.out.println("執行");
        user.setAge(13);
        user.setUsername("張三");
        user.setPassword("12346845");
        return user;

    }

Jsp中的程式碼:
    <script src="${pageContext.request.contextPath}/js/jquery.min.js"></script>

    <script type="text/javascript">
        $(function () {
            $("#open").click(function () {
                $.ajax({
                    url:"${pageContext.request.contextPath}/user/test04",
                    contentType:"application/json;charset=UTF-8",
                    data:'{"username":"hehe","password":"123456","age":12}',
                    type:"post",
                    dataType:"json",
                    success:function (data) {

                        alert(data);
                        alert(data.username);
                        alert(data.password);
                        alert(data.age);

                    }
                });
            });
        })
  

結果: