SpringMvc基礎知識

1.SpringMvc是什麼前端

   Spring Web MVC是一種基於Java的實現了Web MVC設計模式的請求驅動類型的輕量級Web框架,即便用了MVC架構模式的思想,將web層進行職責解耦,基於請求驅動指的就是使用請求-響應模型,框 架的目的就是幫助咱們簡化開發,Spring Web MVC也是要簡化咱們平常Web開發的。java

  Spring Web MVC也是服務到工做者模式的實現,但進行可優化。前端控制器是DispatcherServlet;應用控制器其實拆爲處理器映射器(Handler Mapping)進行處理器管理和視圖解析器(View Resolver)進行視圖管理;頁面控制器/動做/處理器爲Controller接口(僅包含ModelAndView handleRequest(request, response) 方法)的實現(也能夠是任何的POJO類);支持本地化(Locale)解析、主題(Theme)解析及文件上傳等;提供了很是靈活的數據驗證、格式化和數據綁定機制;提供了強大的約定大於配置(慣例優先原則)的契約式編程支持。
2.Spring Web MVC  能幹什麼
web

 √讓咱們能很是簡單的設計出乾淨的Web層和薄薄的Web層;spring

 √進行更簡潔的Web層的開發;編程

 √天生與Spring框架集成(如IoC容器、AOP等);設計模式

 √提供強大的約定大於配置的契約式編程支持;瀏覽器

 √能簡單的進行Web層的單元測試;服務器

 √支持靈活的URL到頁面控制器的映射;session

 √很是容易與其餘視圖技術集成,如Velocity、Thymeleaf、FreeMarker等等,由於模型數據不放在特定的API裏,而是放在一個Model裏(Map  數據結構實現,所以很容易被其餘框架使用);數據結構

 √很是靈活的數據驗證、格式化和數據綁定機制,能使用任何對象進行數據綁定,沒必要實現特定框架的API;

 √提供一套強大的JSP標籤庫,簡化JSP開發;

 √支持靈活的本地化、主題等解析;

 √更加簡單的異常處理;

 √對靜態資源的支持;

 √支持Restful風格。

3.Spring Web MVC 核心架構

    核心架構的具體流程步驟以下:

 一、  首先用戶發送請求——>DispatcherServlet,前端控制器收到請求後本身不進行處理,而是委託給其餘的解析器進行處理,做爲統一訪問點,進行全局的流程控制;

 二、  DispatcherServlet——>HandlerMapping, HandlerMapping將會把請求映射爲HandlerExecutionChain對象(包含一個Handler處理器(頁面控制器)對象、多個 HandlerInterceptor攔截器)對象,經過這種策略模式,很容   易添加新的映射策略;

 三、  DispatcherServlet——>HandlerAdapter,HandlerAdapter將會把處理器包裝爲適配器,從而支持多種類型的處理器,即適配器設計模式的應用,從而很容易支持不少類型的處理器;

 四、  HandlerAdapter——>處理器功能處理方法的調用,HandlerAdapter將會根據適配的結果調用真正的處理器的功能處理方法,完成功能處理;並返回一個ModelAndView對象(包含模型數據、邏輯視圖名);

 五、  ModelAndView的邏輯視圖名——> ViewResolver, ViewResolver將把邏輯視圖名解析爲具體的View,經過這種策略模式,很容易更換其餘視圖技術;

 六、  View——>渲染,View會根據傳進來的Model模型數據進行渲染,此處的Model實際是一個Map數據結構,所以很容易支持其餘視圖技術;

 七、返回控制權給DispatcherServlet,由DispatcherServlet返回響應給用戶,到此一個流程結束。

4.SpringBoot對SpringMvc簡單使用

1.建立一個Springboot項目(省略)

2.添加maven庫

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>

3.在使用方法前加入@Controller 控制器註解

@Controller
public class DemoApplication {

}

4.使用@RequestMapping註解 映射Url訪問地址

@RequestMapping("/")
public String tohome(Model model, RedirectAttributes  redirectAttributes){
   model.addAttribute("test","帶參數訪問成功");
   //redirectAttributes.addFlashAttribute("test","帶參數跳轉到控制器成功");
   return "index";
}


5.映射多個請求地址

@RequestMapping(value={"index","index1"},method = RequestMethod.GET)

6.使用RESTful url風格

@RequestMapping("index/{id}")
public String  doIndex(@PathVariable("id") Integer id, Model model){
   model.addAttribute("id",id);
   return "index";
}

7.解決rest返回@ResponseBody亂碼

   在使用SpringMvc的時候,須要使用 Rest ,最簡單的方法是將 @Controller改成@RestController,還能夠在    @RequestMapping下面添加@ResponseBody註解。不過有時候使用@ResponseBody時候會出現亂碼問題。

   解決方法:

    在@RequestMapping 註解上添加 produces = MediaType.APPLICATION_JSON_VALUE+";charset=UTF-8" 屬性值

    或者將方法返回值改爲Object  

8.重定向(redirect)和轉發(forward)

   forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,而後把這些內容再發給瀏覽器.瀏覽器根本不知道服務器發送的內容從哪裏來的,因此它的地址欄仍是原來的地址.(攜帶參數)

   redirect是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器從新去請求那個地址.因此地址欄顯示的是新的URL.(不攜帶參數,能夠本身拼接url參數)


    1:使用ModelAndView對象轉發或者重定向

return new ModelAndView("redirect:/index");

    2:直接返回String  轉發或者重定向

return "forward:/index";

   3:forward攜帶參數

model.addAttribute("test","帶參數訪問成功");
return "forward:/index";
@RequestMapping("/index")
public  String  formHome(Model model,RedirectAttributes redirectAttributes){
   //model.addAttribute("test","帶參數訪問成功");//從上面的方法轉發過來 等於隱式的把test參數放在 Model裏
   return "index";
}

     在index方法裏想獲取放在model裏的test 使用 request.getAttribute("test");

  4:redirect攜帶參數

@RequestMapping("/")
public String tohome(RedirectAttributes  redirectAttributes){
   redirectAttributes.addFlashAttribute("test","帶參數跳轉到控制器成功");
  return "redirect:/index";
}
@RequestMapping("/index")
public  String  formHome(Model model,RedirectAttributes redirectAttributes){
  //隱式的取session裏的test參數放在Model裏
   return "index";
}

  5.跳轉到外部url 

return 「redirect:http://www.baidu.com」;

  6.在沒有RequestMapping的方法中使用獲取request對象

HttpServletRequest request1 = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();

博客地址:http://my.oschina.net/wangnian

相關文章
相關標籤/搜索