成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Learn Spring - Spring MVC

DesGemini / 2445人閱讀

摘要:例如,將請求信息中的字符串格式參數(shù)轉(zhuǎn)換為對應(yīng)方法中的類類型入?yún)⒖赏ㄟ^的屬性注冊自定義轉(zhuǎn)換器。

1. 處理流程

請求提交給DispatchServlet

查找HandlerMapping

調(diào)用由HandlerAdapter封裝后的Handler

返回ModelAndViewDispatcherServlet

借由ViewResolver完成邏輯視圖到真實(shí)視圖的轉(zhuǎn)換

返回響應(yīng)

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

默認(rèn)采用org.springframework.web.context.ContextLoaderListener

默認(rèn)使用/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);
}

默認(rèn)配置: 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實(shí)例)

@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. 封裝入?yún)?/b>

HttpServletRequest, WebRequest, ServletRequestInputStream / Reader

HttpServeltResponse, ServletResponse的OutputStream / Writer

6. 請求信息和對象的轉(zhuǎn)換 6.1 基本

HttpMessageConverter

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

Spring根據(jù)HTTP報(bào)文頭部的Accept指定的MIME類型,查找匹配的HttpMessageConverter

Spring MVC默認(rèn)裝配AnnotationMethodHandlerAdapter,調(diào)用HttpMessageConverter

mvc命名空間的標(biāo)簽會創(chuàng)建并注冊一個(gè)默認(rèn)的DefaultAnnotationHandlerMapping和一個(gè)AnnotationMethodHandlerAdapter實(shí)例,如果上下文中存在自定義的對應(yīng)組件bean,則覆蓋默認(rèn)配置

6.2 樣例

app-servlet.xml


    
    
        
            
            
            
                
    



    
        
            
            
                
            
            
            
            
                
                    
                        
                            
                            
                            
                                  
                                      
                                
                            
                        
                    
                
            
        
    
7. 處理模型數(shù)據(jù)

Spring MVC在調(diào)用方法前會創(chuàng)建一個(gè)隱含的模型對象

ModelAndView:返回值類型為ModelAndView時(shí),方法體通過該對象添加模型數(shù)據(jù)

@ModelAttribute:入?yún)ο筇砑拥綌?shù)據(jù)模型中

Map和Model:入?yún)?b>org.springframework.ui.Model、org.springframework.ui.ModelMapjava.util.Map時(shí),處理方法返回時(shí),Map中的數(shù)據(jù)會自動添加到模型中

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

8. 數(shù)據(jù)綁定 8.1 基本

Spring MVC將ServletRequest對象及處理方法的入?yún)?shí)例傳遞給DataBinder;

DataBinder調(diào)用ConversionService組件進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換、數(shù)據(jù)格式化等工作,將ServletRequest中的消息填充到入?yún)ο笾校?/p>

然后再調(diào)用Validator組件對已經(jīng)綁定了請求消息數(shù)據(jù)的入?yún)ο筮M(jìn)行數(shù)據(jù)合法性校驗(yàn),并最終生成綁定結(jié)果BindingResult對象,其中還包含相應(yīng)的校驗(yàn)錯(cuò)誤對象

抽取BindingResult中的入?yún)ο蠹靶r?yàn)錯(cuò)誤對象,賦給處理方法的相應(yīng)入?yún)?/p>

8.2 數(shù)據(jù)轉(zhuǎn)換

例如:將請求信息中A類型參數(shù)轉(zhuǎn)換并綁定到Controller對應(yīng)的處理方法的B類型入?yún)⒅?/p>

基于ConversionService接口,Spring將自動識別其實(shí)現(xiàn)類,用于入?yún)㈩愋娃D(zhuǎn)換,類似于C++中的自定義類型轉(zhuǎn)換。例如,將http請求信息中的字符串格式參數(shù)轉(zhuǎn)換為Controller對應(yīng)方法中的類類型入?yún)?/p>

可通過ConversionServiceFactoryBeanconverters屬性注冊自定義轉(zhuǎn)換器??山邮?b>Converter,ConverterFacotory,GenericConverterConditionalConverterFactory的實(shí)現(xiàn)類,并統(tǒng)一封裝到一個(gè)ConversionService的實(shí)例(即GenericConversionService)中


    
        
            
        
    

標(biāo)簽還會注冊一個(gè)默認(rèn)的ConversionService,即FormattingConversionServiceFactoryBean

8.3 數(shù)據(jù)格式化

例如:將請求信息中字符串類型參數(shù)轉(zhuǎn)換并綁定到Controller對應(yīng)的處理方法入?yún)⒅械腄ate類型屬性中

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

Srping提供AnnotationFormatterFactory接口及兩個(gè)實(shí)現(xiàn)類:NumberFormatAnnotationFormatterFactoryJodaDateTimeFormatAnnotationFormatterFactory

在入?yún)㈩悓傩陨鲜褂米⒔猓?b>@DateTimeFormat,@NumberFormat

Spring通過標(biāo)簽創(chuàng)建FormattingConversionServiceFactoryBean作為FormattingConversionService的實(shí)例,自動裝配NumberFormatAnnotationFormatterFactoryJodaDateTimeFormatAnnotationFormatterFactory

8.4 數(shù)據(jù)驗(yàn)證

標(biāo)簽會默認(rèn)裝配LocalValidatorFactoryBean,實(shí)現(xiàn)了Spring的Validator接口,通過在入?yún)⑸蠘?biāo)注@Valid注解即可讓Spring在完成數(shù)據(jù)綁定后執(zhí)行數(shù)據(jù)校驗(yàn)

@Valid注解標(biāo)注的入?yún)⒑推浜蟮?b>BindingResult或Errors入?yún)⒊蓪Τ霈F(xiàn),后者保存前者的校驗(yàn)結(jié)果

校驗(yàn)結(jié)果也保存在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 基本

視圖對象是一個(gè)bean,由視圖解析器負(fù)責(zé)實(shí)例化。

不同的視圖實(shí)現(xiàn)技術(shù)對應(yīng)于不同的View實(shí)現(xiàn)類

所有的視圖解析器都實(shí)現(xiàn)了ViewResolver接口

9.2 樣例

app-servlet.xml



    






    
    
    
    
        text/html; charset=UTF-8
    
    



    
    
        
            UTF-8
            UTF-8
            
            true
            loopCursor
            0
        
    
10. 靜態(tài)資源處理

需要對項(xiàng)目中的圖片、html靜態(tài)資源等多帶帶處理

配置后,會裝配一個(gè)DefaultServletHttpRequestHandler,對靜態(tài)資源做檢查

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

11. 攔截器 11.1 基本

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

找到對應(yīng)的HandlerExecutionChain包含若干HandlerInterceptor,和一個(gè)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默認(rèn)裝配了DefaultHandlerExceptionResolver

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

12.2 樣例

web.xml


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

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/66615.html

相關(guān)文章

  • Spring Boot (一)helloworld

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

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

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

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

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

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

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

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

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

    fou7 評論0 收藏0

發(fā)表評論

0條評論

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