国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Learn Spring - Spring MVC

DesGemini / 2438人閱讀

摘要:例如,將請求信息中的字符串格式參數轉換為對應方法中的類類型入參可通過的屬性注冊自定義轉換器。

1. 處理流程

請求提交給DispatchServlet

查找HandlerMapping

調用由HandlerAdapter封裝后的Handler

返回ModelAndViewDispatcherServlet

借由ViewResolver完成邏輯視圖到真實視圖的轉換

返回響應

2. 配置DispatcherServlet

web.xml


    
    
        contextConfigLocation
        
            /WEB-INF/applicationServlet.xml,
        
    
    
        org.springframework.web.context.ContextLoaderListener
    

    
    
        app
        org.springframework.web.servlet.DispatcherServlet
        
            logLevel
            FINE
        
        1
    

    
    
        app
        /api/*
    

子容器可以訪問父容器的bean,父容器不能訪問子容器的bean

默認采用org.springframework.web.context.ContextLoaderListener

默認使用/WEB-INF/{servlet-name}-*.xml加載子容器

3. DispatcherServlet的初始化

DispatcherServlet初始化

protected void initStrategies(ApplicationContext context) {
    initMultipartResolver(context);
    initLocaleResolver(context);
    initThemeResolver(context);
    initHandlerMappings(context);
    initHandlerAdapters(context);
    initHandlerExceptionResolvers(context);
    initRequestToViewNameTranslator(context);
    initViewResolvers(context);
    initFlashMapManager(context);
}

默認配置: DispatcherServlet.properties

# Default implementation classes for DispatcherServlet"s strategy interfaces.
# Used as fallback when no matching beans are found in the DispatcherServlet context.
# Not meant to be customized by application developers.

org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver

org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver

org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,
    org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping

org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,
    org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter

org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,
    org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,
    org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver

org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator

org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver

org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager
4. Controller注解 4.1 類注解

@Controller(由Spring識別Handler實例)

@RequestMapping(value=, method=, params=)

4.2 方法注解

@RequestMapping(value=, method=, params=)

@PathVariable,配合占位符{parameter}

@RequestParam(value=, required=, defaultValue=)

@CookieValue(value=, required=, defaultValue=)

@RequestHeader(value=, required=, defaultValue=)

5. 封裝入參

HttpServletRequest, WebRequest, ServletRequestInputStream / Reader

HttpServeltResponse, ServletResponse的OutputStream / Writer

6. 請求信息和對象的轉換 6.1 基本

HttpMessageConverter

使用@RequestBody / @ResponseBody;使用HttpEntity / ResponseEntity

Spring根據HTTP報文頭部的Accept指定的MIME類型,查找匹配的HttpMessageConverter

Spring MVC默認裝配AnnotationMethodHandlerAdapter,調用HttpMessageConverter

mvc命名空間的標簽會創建并注冊一個默認的DefaultAnnotationHandlerMapping和一個AnnotationMethodHandlerAdapter實例,如果上下文中存在自定義的對應組件bean,則覆蓋默認配置

6.2 樣例

app-servlet.xml


    
    
        
            
            
            
                
    



    
        
            
            
                
            
            
            
            
                
                    
                        
                            
                            
                            
                                  
                                      
                                
                            
                        
                    
                
            
        
    
7. 處理模型數據

Spring MVC在調用方法前會創建一個隱含的模型對象

ModelAndView:返回值類型為ModelAndView時,方法體通過該對象添加模型數據

@ModelAttribute:入參對象添加到數據模型中

Map和Model:入參為org.springframework.ui.Modelorg.springframework.ui.ModelMapjava.util.Map時,處理方法返回時,Map中的數據會自動添加到模型中

@SessionAttributes:將模型中的某個屬性暫存到HttpSession中,以便多個請求共享

8. 數據綁定 8.1 基本

Spring MVC將ServletRequest對象及處理方法的入參實例傳遞給DataBinder

DataBinder調用ConversionService組件進行數據類型轉換、數據格式化等工作,將ServletRequest中的消息填充到入參對象中;

然后再調用Validator組件對已經綁定了請求消息數據的入參對象進行數據合法性校驗,并最終生成綁定結果BindingResult對象,其中還包含相應的校驗錯誤對象

抽取BindingResult中的入參對象及校驗錯誤對象,賦給處理方法的相應入參

8.2 數據轉換

例如:將請求信息中A類型參數轉換并綁定到Controller對應的處理方法的B類型入參中

基于ConversionService接口,Spring將自動識別其實現類,用于入參類型轉換,類似于C++中的自定義類型轉換。例如,將http請求信息中的字符串格式參數轉換為Controller對應方法中的類類型入參

可通過ConversionServiceFactoryBeanconverters屬性注冊自定義轉換器。可接受ConverterConverterFacotoryGenericConverterConditionalConverterFactory的實現類,并統一封裝到一個ConversionService的實例(即GenericConversionService)中


    
        
            
        
    

標簽還會注冊一個默認的ConversionService,即FormattingConversionServiceFactoryBean

8.3 數據格式化

例如:將請求信息中字符串類型參數轉換并綁定到Controller對應的處理方法入參中的Date類型屬性中

格式化框架定義了Formatter接口,擴展于PrinterParser接口

Srping提供AnnotationFormatterFactory接口及兩個實現類:NumberFormatAnnotationFormatterFactoryJodaDateTimeFormatAnnotationFormatterFactory

在入參類屬性上使用注解:@DateTimeFormat@NumberFormat

Spring通過標簽創建FormattingConversionServiceFactoryBean作為FormattingConversionService的實例,自動裝配NumberFormatAnnotationFormatterFactoryJodaDateTimeFormatAnnotationFormatterFactory

8.4 數據驗證

標簽會默認裝配LocalValidatorFactoryBean,實現了Spring的Validator接口,通過在入參上標注@Valid注解即可讓Spring在完成數據綁定后執行數據校驗

@Valid注解標注的入參和其后的BindingResultErrors入參成對出現,后者保存前者的校驗結果

校驗結果也保存在MVC的隱含模型中

樣例

public Class User {
    private String userId;

    @Pattern(regexp="w{4,30}")
    private String userName;

    @Length(min=2, max=100)
    private String nickName;

    @Past
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birthday;

    @DecimalMin(value = "1000.00")
    @DecimalMax(value = "10000.00")
    @NumberFormat(pattern = "#,###.##")
    pirvate Long salary;
}


@RequestMapping(value = "/handle")
public void handle(@Valid User uer, BindingResult bindingResult) {
    //do something
}
9. 視圖解析 9.1 基本

視圖對象是一個bean,由視圖解析器負責實例化。

不同的視圖實現技術對應于不同的View實現類

所有的視圖解析器都實現了ViewResolver接口

9.2 樣例

app-servlet.xml



    






    
    
    
    
        text/html; charset=UTF-8
    
    



    
    
        
            UTF-8
            UTF-8
            
            true
            loopCursor
            0
        
    
10. 靜態資源處理

需要對項目中的圖片、html靜態資源等多帶帶處理

配置后,會裝配一個DefaultServletHttpRequestHandler,對靜態資源做檢查

配置,允許對靜態資源文件路徑作映射,并提供文件在瀏覽器端的緩存控制,例如

11. 攔截器 11.1 基本

DispatcherServlet將請求交給處理器映射(HandlerMapping),找到對應的HandlerExecutionChain

找到對應的HandlerExecutionChain包含若干HandlerInterceptor,和一個Handler

HandlerInterceptor接口:

public interface HandlerInterceptor {

  boolean preHandle (HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;

  void postHandle (HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception;

  void afterCompletion (HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception;
}
11.2 樣例

app-servlet.xml:


    
      
      
    
12. 異常處理 12.1 基本

Spring MVC通過HandlerExceptionResolver處理異常

HandlerExceptionResolver接口:

public interface HandlerExceptionResolver {
  ModelAndView resolveException (HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex);
}

Spring MVC默認裝配了DefaultHandlerExceptionResolver

Spring MVC默認注冊了AnnotationMethodHandlerExceptionResolver,允許通過@ExceptionHandler指定處理特定異常

12.2 樣例

web.xml


    
    
        404
        /error
    
    
        403
        /error
    
    
        java.lang.Throwable
        /error
    

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66615.html

相關文章

  • Spring Boot (一)helloworld

    摘要:第二個類級別注解是。將引導應用程序,啟動,從而啟動自動配置服務器。比如想使用不同版本的,具體如下在標簽中還可以指定編譯的版本和項目的編碼格式指定項目編碼為使用插件可以為項目提供的操作方式,的個,默認。 引言 Spring 框架對于很多 Java 開發人員來說都不陌生。Spring 框架包含幾十個不同的子項目,涵蓋應用開發的不同方面。如此多的子項目和組件,一方面方便了開發人員的使用,另外...

    go4it 評論0 收藏0
  • Spring Boot - 表單校驗(JSR303&Hibernate Validator)

    摘要:初步使用主要使用注解的方式對進行校驗,第一個例子在需要校驗的字段上指定約束條件然后在中可以這樣調用,加上注解即可。如果校驗失敗,默認會返回框架的出錯信息。指定到的分組名會全部進行校驗,不指定的不校驗。 Spring Boot - 表單校驗(JSR303&Hibernate Validator) 回顧 Spring Boot - 初識 Hello World Spring Boot -...

    tinyq 評論0 收藏0
  • Spring框架之我見(四)——Spring MVC

    摘要:是結構在框架中的一種表現形式。這句話聽起來有點繞,我們可以看一下下面這張圖,大家可以吧容器中的理解為全局變量,吧容器中的理解為局部變量。在方法體中可以訪問局部變量和全局變量,但是在方法外,就只能訪問全局變量,是不能訪問局部變量的。 聊完了Spring,我們來看看Spring在web方面的應用Spring MVC。 MVC 首先我們來看什么是mvc? 大家知道在jsp里面也是可以寫jav...

    shiina 評論0 收藏0
  • SpringSpring Boot和TestNG測試指南 - 測試Spring MVC

    摘要:地址提供了,能夠很方便的來測試。同時也提供了更進一步簡化了測試需要的配置工作。本章節將分別舉例說明在不使用和使用下如何對進行測試。例子測試的關鍵是使用對象,利用它我們能夠在不需啟動容器的情況下測試的行為。 Github地址 Spring Testing Framework提供了Spring MVC Test Framework,能夠很方便的來測試Controller。同時Spring...

    andong777 評論0 收藏0
  • Spring Boot支持Crontab任務改造

    摘要:雖然本身支持定時任務,但都是服務一直運行時支持。監聽目標對象借助容器刷新事件來監聽目標對象即可,可以認為,定時任務其實每次只是執行一種操作而已。 在以往的 Tomcat 項目中,一直習慣用 Ant 打包,使用 build.xml 配置,通過 ant -buildfile 的方式在機器上執行定時任務。雖然 Spring 本身支持定時任務,但都是服務一直運行時支持。其實在項目中,大多數定時...

    fou7 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<