• 1

  • 1

【Java劝退师】SpringMVC 知识脑图 - 表现层开源框架

1星期前

SpringMVC

SpringMVC

表現層開源框架

一、解決的問題

  1. 根據使用者輸入來構造 Bean
  2. 自動轉換數據類型
  3. 校驗 使用者輸入
  4. URL 到 控制器 的靈活映射
  5. 支持 Restful 風格

目的 : 簡化 Servlet 開發

二、架構

1. 經典三層

  1. 表現層 Controller : 接收客戶端請求、響應結果
  2. 業務層 Service : 處理業務邏輯、控制事務
  3. 持久層 Dao : 訪問數據庫

2. MVC 架構模式

  1. Model 模型 : 業務模型 - 處理業務、 數據模型 - 封裝數據
  2. View 視圖 : 數據展示 - Html、JSP
  3. Controller 控制器 : 資源流轉 - Servlet

三、請求處理流程

1. 流程

  1. 請求發送至 DispatcherServlet (前端控制器)
  2. DispatcherServlet 調用 HandlerMapping (處理器映射器)
  3. 返回 Handler (處理器) 地址 與 HandlerExecutionChain (處理器執行鏈)
  4. DispatcherServlet 調用 HandlerAdapter (處理器適配器)
  5. HandlerAdapter 調用 Handler
  6. Handler 返回 ModelAndView(視圖對象) 到 HandlerAdapter
  7. HandlerAdapter 返回 ModelAndView 到 DispatcherServlet
  8. DispatcherServlet 調用 ViewResolver (視圖解析器) 解析
  9. 返回 View (視圖對象)
  10. DispatcherServlet 對 View 進行渲染
  11. DispatcherServlet 返回響應結果

2. 角色

  1. DispatcherServlet 前端控制器 : 將請求分派給對應的處理物件
  2. HandlerMapping 處理器映射器 : 根據 URL 找到對應的 Handler 與 Interceptor
  3. HandlerAdapter 處理器適配器 : 解決同一個 Handler 使用不同方式配置的問題
  4. Handler 處理器 : 具體的請求處理
  5. ViewResolver 視圖解析器 : 將 String 類型的視圖名解析為 View類型的視圖

四、支持參數

  1. HttpServletRequest
  2. HttpServletResponse
  3. HttpSession
  4. 八大基本數據類型及其包裝類型 - 布爾值可以為 true、false、1、0
  5. POJO 類 - 傳值參數名與POJO屬性需保持一致,可以用 " . " 進行進一步定位
  6. 日期 - 需自定義類型轉換器
  7. Multipart - Form表單
    1. method = post
    2. enctype = multipart/form-data
    3. file 組件

五、參數校驗

可以作用在 POJO類的屬性 或 形參上。

搭配 @Valid 使用,校驗失敗會拋出 MethodArgumentNotValidException,可以在全局異常處理器中攔截。

  1. @NotEmpty : 被註解的字符串的不能為 null 也不能為空 (允許空白字符)
  2. @NotBlank : 被註解的字符串非 null,並且必須包含一個非空白字符
  3. @Null : 被註解的屬性必須為 null
  4. @NotNull : 被註解的屬性必須不為 null
  5. @AssertTrue : 被註解的屬性必須為 true
  6. @AssertFalse : 被註解的屬性必須為 false
  7. @Pattern(regex=,flag=) : 被註解的屬性必須符合指定的正則表達式
  8. @Email : 被註解的屬性必須是 Email 格式
  9. @Min(value) : 被註解的屬性必須是一個數字,其值必須大於等於指定的最小值
  10. @Max(value) : 被註解的屬性必須是一個數字,其值必須小於等於指定的最大值
  11. @DecimalMin(value) : 被註解的屬性必須是一個數字,其值必須大於等於指定的最小值
  12. @DecimalMax(value) : 被註解的屬性必須是一個數字,其值必須小於等於指定的最大值
  13. @Size(max=, min=) : 被註解的屬性的大小必須在指定的範圍內
  14. @Digits (integer, fraction) : 被註解的屬性必須是一個數字,其值必須在可接受的範圍內
  15. @Past : 被註解的屬性必須是一個過去的日期
  16. @Future : 被註解的屬性必須是一個將來的日期

mp.weixin.qq.com/s/hGBTtXlnc…

@ControllerAdvice(assignableTypes = {PersonController.class})
public class GlobalExceptionHandler {
    
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<Map<String, String>> handleValidationExceptions(MethodArgumentNotValidException ex) {
        
        Map<String, String> errors = new HashMap<>();
        
        ex.getBindingResult().getAllErrors().forEach((error) -> {
            String fieldName = ((FieldError) error).getField();
            String errorMessage = error.getDefaultMessage();
            errors.put(fieldName, errorMessage);
        });
        
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errors);
    }
}
复制代码
@Service
@Validated
public class PersonService {

    public void validatePerson(@Valid Person person){
        // do something
    }
}
复制代码

六、註解

  1. @RestController("路徑") : @Controller + @ResponseBody
  2. @RequestMapping("路徑") : 映射 URL 路徑
    1. @GetMapping("路徑")
    2. @PostMapping("路徑")
    3. @PutMapping("路徑")
    4. @DeleteMapping("路徑")
    5. @PatchMapping("路徑")
  3. @RequestParam("參數名") : 將傳值參數與形參進行映射
  4. @RequestBody : 僅接收 JSON 格式的媒體類型
  5. @ResponseBody : 返回結果為 JSON 格式字符串,不會再走視圖處理器
  6. @ControllerAdvice : 定義全局異常處理類,捕獲所有 Controller 對象 handler() 方法拋出的異常
  7. @ExceptionHandler : 處理特定異常,如果寫在 Controller 中,將只對當前 Controller 生效
  8. @Valid : 告知此形參需要進行參數校驗
  9. @ModelAttribute : 從Model中取出屬性

七、過濾器、監聽器、攔截器

  1. Filter 過濾器 : 作用在 Servlet 執行前,可以對所有資源進行訪問
  2. Listener 監聽器 : 只初始化一次,隨 Web應用停止而銷毀
    1. 做初始化工作
    2. 監聽特定事件 - Request、Session 創建、銷毀 - 在線人數統計
  3. Interceptor 攔截器 : SpringMVC 框架自己的,只會攔截 Handler 方法,不會攔截靜態資源
免责声明:文章版权归原作者所有,其内容与观点不代表Unitimes立场,亦不构成任何投资意见或建议。

java

1

相关文章推荐

未登录头像

暂无评论