springmvc Controller詳解

簡介

  在SpringMVC 中,控制器Controller 負責處理由DispatcherServlet 分發的請求,它把用戶請求的數據通過業務處理層處理以後封裝成一個Model ,而後再把該Model 返回給對應的View 進行展現。java

示例

不適用註解修飾

返回ModelAndView

controller方法中定義ModelAndView對象並返回,對象中可添加model數據、指定view。web

package com.cyb.ssm.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.cyb.ssm.po.Item;
import com.cyb.ssm.service.ItemService;

@Controller
public class ItemController {
    @Autowired
    private ItemService Service;
    
    @RequestMapping("queryItem")
    public ModelAndView queryItem() {
        List<Item> itemList = Service.queryItemList();
        ModelAndView mvAndView = new ModelAndView();
        mvAndView.addObject("itemList", itemList);
        mvAndView.setViewName("item/item-list");
        return mvAndView;
    }
}

返回void

  在controller方法形參上能夠定義request和response,使用request或response指定響應結果:spring

void service(HttpServletRequest request,HttpServletResponse response){}

一、使用request轉發向頁面,以下:json

request.getRequestDispatcher("頁面路徑").forward(request, response);

二、也能夠經過response頁面重定向:數組

response.sendRedirect("url")

三、也能夠經過response指定響應結果,例如:瀏覽器

response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("json串");

返回字符串

邏輯視圖名

return "item/item-list";

redirect重定向

return "redirect:testRedirect";

redirect:app

  至關於「response.sendRedirect()」模塊化

  遊覽器URL發生改變url

  Request域不能共享spa

forward轉發

return "forward:testForward";

forward:

  至關於「request.getRequestDispatcher().forward(request,response)」

  瀏覽器URL不發送改變

  Request域能夠共享

使用註解修飾

返回帶ResponseBody註解的值

@ResponseBody註解和@RequestBody註解介紹

@ResponseBody的做用:

  ResponseBody註解能夠經過內置9種HttpMessageConverter,匹配不一樣的Controller返回值類型,而後進行不一樣的消息轉換處理

  將轉換以後的數據放到HttpServletResponse對象的響應體返回到頁面,

  不一樣的HttpMessageConverter處理的數據,指定的ContentType值也不一樣。

@RequestBody註解的做用和@ResponseBody註解正好相反,它是處理請求參數的Http消息轉換的。

 經常使用的 HttpMessageConverter

 MappingJacksonHttpMessageConverter處理POJO類型返回值

 MappingJacksonHttpMessageConverter是專門處理POJO類型的。

默認使用MappingJackson的JSON處理能力,將後臺返回的Java對象(POJO類型),轉爲JSON格式輸出到頁面。

將響應體的Content-Type設置爲application/json;charset=utf-8

StringHttpMessageConverter處理String類型返回值

StringHttpMessageConverter是專門處理String類型的。

調用response.getWriter()方法將String類型的字符串寫回給調用者。

將響應體的Content-Type設置爲text/plain;charset=utf-8

@RequestMapping

  經過RequestMapping註解能夠定義不一樣的處理器映射規則

URL路徑映射

  @RequestMapping(value="/item")或@RequestMapping("/item")

  value的值是數組,能夠將多個url映射到同一個方法

  @RequestMapping(value={"/item","/queryItem"})

窄化請求映射

  在class上添加@RequestMapping(url)指定通用請求前綴,限制此類下的全部方法的訪問請求url必須以請求前綴開頭,經過此方法對url進行模塊化分類管理。

example

  商品模塊

    /item/add

    /item/update

    /item/delete

  用戶模塊

    /user/add

    /user/update

    /user/delete

請求方法限定

  限定GET方法

  @RequestMapping(method=RequestMethod.GET)

若是經過Post訪問則報錯:

  HTTP Status 405 - Request method 'POST' not supported

例如:

  @RequestMapping(value="/editItem",mtthod=RequestMethod.GET)

  限定POST方法

  @RequestMapping(method=RequestMethod.POST)

如何經過Post訪問則報錯:

  HTTP Status 405 - Request method 'GET' not supported

  GET和POST均可以

  @RequestMapping(mthod={RequestMethod.GET,RequestMethod.POST})

相關文章
相關標籤/搜索