別人的springmvc

Spring MVC 簡介前端

  • MVC概述
    • MVC 是 Model-View-Control 的簡稱,即模型-視圖-控制器。它是一個存在於服務器表達層的模型,它將應用分開,改變應用之間的高度耦合。
    • 視圖
      • 數據的展示。視圖是用戶看到並與之交互的界面。視圖向用戶顯示相關的數據,並能接收用戶的輸入數據,可是它並不進行任何實際的業務處理。視圖能夠向模型查詢業務狀態,但不能改變模型。視圖還能接受模型發出的數據更新事件,從而對用戶界面進行同步更新。
    • 模型
      • 應用對象。模型是應用程序的主體部分。 模型表明了業務數據和業務邏輯; 當數據發生改變時,它要負責通知視圖部分;一個模型能爲多個視圖提供數據。因爲同一個模型能夠被多個視圖重用,因此提升了應用的可重用性。
    • 控制器
      • 邏輯處理、控制實體數據在視圖上展現、調用模型處理業務請求。當 Web 用戶單擊 Web 頁面中的提交按鈕來發送 HTML 表單時,控制器接收請求並調用相應的模型組件去處理請求,而後調用相應的視圖來顯示模型返回的數據。
    • MVC 模型運行機制 在 MVC 模式中,Web 用戶向服務器提交的全部請求都由控制器接管。接受到請求以後,控制器負責決定應該調用哪一個模型來進行處理;而後模型根據用戶請求進行相應的業務邏輯處理,並返回數據;最後控制器調用相應的視圖來格式化模型返回的數據,並經過視圖呈現給用戶。

MVC 模型運行機制

  • 三層架構概述
    • Presentation tier + Application tier + Data tier (展示層 + 應用層 + 數據訪問層)
    • 實際上MVC只存在三層架構的展示層,M實際商是數據模型,是包含數據的對象.
    • Service和Dao層反饋在應用層和數據訪問層
  • Spring MVC 介紹
    • Spring Web MVC處理請求的流程 具體執行步驟以下:java

      • 首先用戶發送請求----->前端控制器,前端控制器根據請求信息(如URL)來決定選擇哪個頁面控制器進行處理並把請求委託給它,即之前的控制器的控制邏輯部分;圖2-1中的一、2步驟;web

      • 頁面控制器接收到請求後,進行功能處理,首先須要收集和綁定請求參數到一個對象,這個對象在Spring Web MVC中叫命令對象,並進行驗證,而後將命令對象委託給業務對象進行處理;處理完畢後返回一個ModelAndView(模型數據和邏輯視圖名);圖2-1中的三、四、5步驟;spring

      • 前端控制器收回控制權,而後根據返回的邏輯視圖名,選擇相應的視圖進行渲染,並把模型數據傳入以便視圖渲染;圖2-1中的步驟六、7;編程

      • 前端控制器再次收回控制權,將響應返回給用戶,圖2-1中的步驟8;至此整個結束 Spring Web MVC處理請求的流程json

    • Spring MVC的優點服務器

    • 清晰的角色劃分:前端控制器(DispatcherServlet)、請求處處理器映射(HandlerMapping)、處理器適配器(HandlerAdapter)、視圖解析器(ViewResolver)、處理器或頁面控制器(Controller)、驗證器( Validator)、命令對象(Command 請求參數綁定到的對象就叫命令對象)、表單對象(Form Object 提供給表單展現和提交到的對象就叫表單對象)。架構

    • 分工明確,並且擴展點至關靈活,能夠很容易擴展,雖然幾乎不須要;app

    • 因爲命令對象就是一個POJO,無需繼承框架特定API,可使用命令對象直接做爲業務對象;框架

    • 和Spring 其餘框架無縫集成,是其它Web框架所不具有的;

    • 可適配,經過HandlerAdapter能夠支持任意的類做爲處理器;

    • 可定製性,HandlerMapping、ViewResolver等可以很是簡單的定製;

    • 功能強大的數據驗證、格式化、綁定機制;

    • 利用Spring提供的Mock對象可以很是簡單的進行Web層單元測試;

    • 本地化、主題的解析的支持,使咱們更容易進行國際化和主題的切換。

    • 強大的JSP標籤庫,使JSP編寫更容易。

    • ………………還有好比RESTful風格的支持、簡單的文件上傳、約定大於配置的契約式編程支持、基於註解的零配置支持等等。

    • Spring MVC的經常使用註解

      • @ Controller 代表這個類是Spring MVC裏的Controller.Dispatcher Servlet 會自動掃描註解了此註解的類.在聲明普通Bean的時候,使用@Component,@Service,@Repository和@Controller是等同的,由於@Service,@Repository,@Controller都組合了@Component元註解.但在Spring MVC聲明控制器Bean的時候,只能使用@Controller.
      • @RequestMapping 用來映射Web請求(訪問路徑和參數),處理類和方法.其支持Servlet的request和response做爲參數.
      • @ResponseBody 支持將返回值放在response體內,而不是返回一個頁面,此註解可放置在返回值前或者方法上.
      • @RequestBody 容許request的參數在request體中,而不是直接連接在地址後面.此註解放置在參數前.
      • @PathVariable 用來接收路徑參數,此註解放置在參數前.
      • @RestController 這是一個組合註解,組合了@Controller和@ResponseBody
      • 延伸閱讀: 什麼是request,response
    • Spring MVC 基本配置 Spring MVC的定製配置須要咱們的配置類集成一個WebMvcConfigurerAdapter類,並在此類使用@EnableWebMvc註解,來開啓Spring MVC的配置支持.

    • Spring MVC 靜態資源配置 Spring Boot默認的靜態資源配置 若是須要直接訪問靜態資源,能夠在咱們的配置類中重寫 addResourceHandlers方法

    • 快捷的ViewController 無需作任何業務處理,只是簡單的頁面轉向,可使用addViewControllers方法來實現.

      package com.wangge.buzmgt.config;
      
      	import com.wangge.json.JSONFormatMethodProcessor;
      	import org.springframework.context.annotation.Bean;
      	import org.springframework.context.annotation.Configuration;
      	import org.springframework.http.converter.ByteArrayHttpMessageConverter;
      	import org.springframework.http.converter.HttpMessageConverter;
      	import org.springframework.http.converter.ResourceHttpMessageConverter;
      	import org.springframework.http.converter.StringHttpMessageConverter;
      	import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
      	import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter;
      	import org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter;
      	import org.springframework.http.converter.xml.SourceHttpMessageConverter;
      	import org.springframework.web.method.support.HandlerMethodReturnValueHandler;
      	import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
      	import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
      	import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
      
      	import java.util.ArrayList;
      	import java.util.List;
      
      	@Configuration
      	@EnableWebMvc
      	public class WebMvcConfig extends WebMvcConfigurerAdapter {
      	  @Override
      	  public void addViewControllers (ViewControllerRegistry registry) {
      	    registry.addViewController ("/").setViewName ("index");
      	    registry.addViewController ("/left").setViewName ("left");
      	  }
      
      	  @Override
      	  public void addReturnValueHandlers (List<HandlerMethodReturnValueHandler> returnValueHandlers) {
      	    returnValueHandlers.add (new JSONFormatMethodProcessor (messageConverter ()));
      	  }
      
      	  private List<HttpMessageConverter<?>> messageConverter () {
      	    List<HttpMessageConverter<?>> converters = new ArrayList<> ();
      	    converters.add (new ByteArrayHttpMessageConverter ());
      	    converters.add (new StringHttpMessageConverter ());
      	    converters.add (new ResourceHttpMessageConverter ());
      	    converters.add (new SourceHttpMessageConverter<> ());
      	    converters.add (new AllEncompassingFormHttpMessageConverter ());
      	    converters.add (new Jaxb2RootElementHttpMessageConverter ());
      	    converters.add (new MappingJackson2HttpMessageConverter ());
      	    return converters;
      	  }
      
      	  @Override
      	  public void addResourceHandlers (ResourceHandlerRegistry registry) {
      	    registry.addResourceHandler ("/static/**").addResourceLocations ("classpath:/static/");
      	  }
      	}

      其中 addResourceLocations 指的是文件放置的目錄,addResourceHandler指的是對外暴露的訪問路徑.

相關文章
相關標籤/搜索