springMVC_day02(獲取返回值)

一.獲取返回值

1.返回字符串

isELIgnored="false" 
${user.username}
    ${user.password}

 

 /**
     * 返回String
     * @param model
     * @return
     */
    @RequestMapping("/testString")
    public String testString(Model model){
        System.out.println("testString方法執行了...");
        // 模擬從數據庫中查詢出User對象
        User user = new User();
        user.setUsername("美美");
        user.setPassword("123");
        user.setAge(30);
        // model對象
        model.addAttribute("user",user);
        return "success";
    }

 

2.void類型

/**
     * 是void
     * 請求轉發一次請求,不用編寫項目的名稱
     */
    @RequestMapping("/testVoid")
    public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
        System.out.println("testVoid方法執行了...");
        // 編寫請求轉發的程序
        // request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);

        // 重定向
        // response.sendRedirect(request.getContextPath()+"/index.jsp");

        // 設置中文亂碼
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        // 直接會進行響應
        response.getWriter().print("你好");

        return;
    }

 

*默認狀況下,訪問user/tsetVoid.jspcss

*兩種解決辦法:(1)新建WEB-INF/pages/setVoid.jsphtml

        (2)獲取原生API,編寫底層轉發代碼前端

 

* 請求轉發一次請求,不用編寫項目的名稱 request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);java

*重定向是兩次跳轉,須要完整的項目名字response.sendRedirect(request.getContextPath()+"/index.jsp");jquery

*直接相應(須要設置編寫亂碼)web

3.ModelAndView

*與model功能同樣,寫法不一樣ajax

*springMVC提供的一個類spring

*兩個方法數據庫

 // 把user對象存儲到mv對象中,也會把user對象存入到request對象  mv.addObject("user",user);
// 跳轉到哪一個頁面 mv.setViewName("success");
配合視圖解析器,跳轉到WIN-INF/pages/success.jsp
/**
     * 返回ModelAndView
     * @return
     */
    @RequestMapping("/testModelAndView")
    public ModelAndView testModelAndView(){
        // 建立ModelAndView對象
        ModelAndView mv = new ModelAndView();
        System.out.println("testModelAndView方法執行了...");
        // 模擬從數據庫中查詢出User對象
        User user = new User();
        user.setUsername("小鳳");
        user.setPassword("456");
        user.setAge(30);

        // 把user對象存儲到mv對象中,也會把user對象存入到request對象
        mv.addObject("user",user);

        // 跳轉到哪一個頁面
        mv.setViewName("success");

        return mv;
    }

 

4.關鍵字表示轉發或者重定向(不使用視圖解析器)

*該模式下沒法使用視圖解析器json

*返回字符串

*本身寫對路徑

*在這裏重定向,不須要寫項目名(虛擬路徑),框架底層幫你加上了

/**
     * 使用關鍵字的方式進行轉發或者重定向
     * @return
     */
    @RequestMapping("/testForwardOrRedirect")
    public String testForwardOrRedirect(){
        System.out.println("testForwardOrRedirect方法執行了...");

        // 請求的轉發
         return "forward:/WEB-INF/pages/success.jsp";

        // 重定向
        return "redirect:/index.jsp";根目錄下的jsp,不須要項目名稱
    }

 

5.使用@ResponseBody 註解實現將 controller 方法返回對象轉換爲 json 響應給客戶端。

*前端控制器設置攔截全部請求

<!--配置前端控制器-->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>攔截全部請求
  </servlet-mapping>

 

*告訴dispatchServlet靜態資源不攔截(js/jquery.min.js

<!--前端控制器,哪些靜態資源不攔截-->
    <mvc:resources location="/css/" mapping="/css/**"/>
    <mvc:resources location="/images/" mapping="/images/**"/>
    <mvc:resources location="/js/" mapping="/js/**"/>

 

 <script>
        // 頁面加載,綁定單擊事件
        $(function(){
            $("#btn").click(function(){
                // alert("hello btn");
                // 發送ajax請求
                $.ajax({
                    // 編寫json格式,設置屬性和值
                    url:"user/testAjax",
                    contentType:"application/json;charset=UTF-8",
                    data:'{"username":"hehe","password":"123","age":30}',json格式鍵值對
                    dataType:"json",
                    type:"post",
                    success:function(data){
                        // data服務器端響應的json的數據,進行解析
                        alert(data);
                        alert(data.username);
                        alert(data.password);
                        alert(data.age);
                    }
                });

            });
        });

 

*dataType:服務器返回類型值

type:默認get

/**
     * 模擬異步請求響應
     */
    @RequestMapping("/testAjax")
    public @ResponseBody User testAjax(@RequestBody User user){
        System.out.println("testAjax方法執行了...");
        // 客戶端發送ajax的請求,傳的是json字符串,後端把json字符串封裝到user對象中
        System.out.println(user);
        // 作響應,模擬查詢數據庫
        user.setUsername("haha");
        user.setAge(40);
        // 作響應
        return user;
    }

 

*@RequestBody User user客戶端發送ajax的請求,傳的是json字符串,後端把json字符串封裝到user對象中

*做響應直接return @ResponseBody User

*要求key與javaBean的屬性名同樣

*須要導入相應jar包(json字符串與javaBean轉換)

<dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.9.0</version>
    </dependency>
相關文章
相關標籤/搜索