bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

9.框架SpringMVC-創(chuàng)新互聯(lián)

一、基本概念

Spring MVC 是 Spring 提供的一個基于 MVC 設計模式的輕量級 Web 開發(fā)框架,本質(zhì)上相當于 Servlet。Spring MVC 使用 MVC 架構模式的思想,將 Web 應用進行職責解構,把一個復雜的 Web 應用劃分成模型(Model)、控制器(Contorller)以及視圖(View)三層,有效地簡化了 Web 應用的開發(fā),降低了出錯風險,同時也方便了開發(fā)人員之間的分工配合。

成都創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網(wǎng)站設計、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務,滿足客戶于互聯(lián)網(wǎng)時代的達坂城網(wǎng)站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡建設合作伙伴!

? 導入依賴:

org.springframeworkspring-webmvc5.3.22
二、工作流程

? Spring MVC工作流程如下:

Spring MVC 的常用組件共有 6 個,它們分別是: DispatcherServlet(前端控制器)、HandlerMapping(處理器映射器)、HandlerAdapter(處理器適配器)、Handler(處理器)、ViewResolver(視圖解析器)和 View(視圖)。下表對各個組件的功能說明如下:

組件提供者說明
DispatcherServlet(前端控制器)由框架提供它是 Spring MVC 的核心,其本質(zhì)就是一個 Servlet。
它負責將所有的請求進行統(tǒng)一分發(fā),相當于一個 Spring MVC 的流程控制中心,控制整個流程的執(zhí)行,對各個組件進行統(tǒng)一調(diào)度,以降低組件之間的耦合性,有利于組件之間的拓展。
HandlerMapping(處理器映射器)由框架提供負責根據(jù)請求的 url、method 等信息查找響應的 Handler 處理器(即 Controller 控制器方法)。
Handler(處理器)由開發(fā)人員提供也就是我們常說的 Controller 控制器,負責在 DispatcherServlet 的控制下,對具體的用戶請求進行處理。
HandlerAdapter(處理器適配器)由框架提供它負責根據(jù)?HandlerMapping 映射器找到的處理器(Handler)信息,按照特定規(guī)則執(zhí)行相關的處理器(Handler)方法。
ViewResolver(視圖解析器)由框架提供通過 ModelAndView 對象中的 View 信息對邏輯視圖名進行解析,將其解析成真正的視圖 View(例如 ThymeleafView、InternalResourceView、RedirectView 等),并返回給 DispatcherServlet。
View(視圖)View 對象本身由框架提供,但視圖所對應的前端頁面(例如 JSP、HTML)則需要開發(fā)人員自行編寫將 Model 模型數(shù)據(jù)通過頁面展示給用戶。
三、Servlet配置類

Spring MVC 本質(zhì)就是對 Servlet 的進一步封裝,其核心組件是一個 DispatcherServelt。DispatcherServelt 是 Spring MVC 中請求最先到達的地方,負責請求在其他各個組件間的傳遞和加工。在此之前,像 DispatcherServlet 這樣的 Servlet,都是通過 web.xml 文件來進行配置的。

Spring 提供了一個 DispatcherServelt 的快速配置類AbstractAnnotationConfigDispatcher-ServletInitializer,它就是 WebApplicationInitializer 的實現(xiàn)類之一 ,其常用方法如下表。

方法說明
protected abstract Class[] getRootConfigClasses();該方法用于設置 Spring 的配置類。
protected abstract Class[] getServletConfigClasses();該方法用于設置 Spring MVC 的配置類。
protected abstract String[] getServletMappings();該方法用于指定 DispatcherServelt 的映射規(guī)則,即 web.xml 中的 url-pattern。
protected Filter[] getServletFilters()?該方法用于添加各種過濾器(filter)。

如果我們自定義的初始化類繼承了 AbstractAnnotationConfigDispatcherServletInitializer 并將其部署到 Servlet 容器中,Servelt 容器會自動加載這個初始化類,并使用它來完成對?DispatcherServlet 和 Spring MVC 的配置工作。

//繼承加載 springMVC前端控制器 和 web容器加載監(jiān)聽器
public class WebConfig extends AbstractAnnotationConfigDispatcherServletInitializer {

    //加載spring配置
    @Override
    protected Class[] getRootConfigClasses() {
        return new Class []{SpringConfig.class};
    }
    //加載springMVC配置
    @Override
    protected Class[] getServletConfigClasses() {
        return new Class[]{SpringMVCConfig.class};
    }
    //為dispatcherServlet設置請求路徑
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
    //添加請求和響應過濾器
    @Override
    protected Filter[] getServletFilters() {
        return null;
    }
}
四、SpringMVC配置類?

我們可以通過一個實現(xiàn)了 WebMvcConfigurer 接口的配置類(標注 @Configuration 的類)對 Spring MVC 的部分組件進行配置,例如攔截器、格式化程序、視圖控制器等。

方法說明
default void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {}將靜態(tài)文件交給?Servlet 容器(Tomcat)內(nèi)置的默認 Servlet 處理。
default void addInterceptors(InterceptorRegistry registry) {}添加 Spring MVC 攔截器,對請求進行攔截處理。
default void addResourceHandlers(ResourceHandlerRegistry registry) {}添加或修改靜態(tài)資源(例如圖片,js,css 等)映射;
Spring Boot 默認設置的靜態(tài)資源文件夾就是通過重寫該方法設置的。
default void addViewControllers(ViewControllerRegistry registry) {}主要用于實現(xiàn)無業(yè)務邏輯跳轉,例如主頁跳轉,簡單的請求重定向,錯誤頁跳轉等
default void configureMessageConverters(List>converters) {}用于配置默認的消息轉換器(轉換 HTTP 請求和響應)。
default void extendMessageConverters(List>converters) {}直接添加消息轉換器,會關閉默認的消息轉換器列表;
實現(xiàn)該方法即可在不關閉默認轉換器的起提下,新增一個自定義轉換器。
default void configureHandlerExceptionResolvers(Listresolvers) {}配置異常解析器。
//核心配置類
@Configuration
//SpringMVC注解掃描
@ComponentScan("com.lulu.controller")
//開啟注解驅(qū)動
//會自動向 Spring MVC 中注冊
// RequestMappingHandlerMapping RequestMappingHandlerAdapter 以及 ExceptionHandlerExceptionResolver 三個Bean
// 其中 RequestMappingHandlerMapping 和 RequestMappingHandlerAdapter 都是控制器方法對請求進行分發(fā)的必須組件,為讀寫 JSON 數(shù)據(jù)提供支持
// 而 ExceptionHandlerExceptionResolver 則是 Spring MVC 的異常處理組件
// 除此之外標簽還默認注冊了一個 FormattingConversionServiceFactoryBean類型的Bean
// ConversionService 通過它,可以滿足我們大多數(shù)的類型轉換需求
@EnableWebMvc
public class SpringMVCConfig implements WebMvcConfigurer {}
五、Controller

DispatcherServlet 會攔截用戶發(fā)送來的所有請求進行統(tǒng)一處理,但不同的請求有著不同的處理過程,例如登陸請求和注冊請求就分別對應著登陸過程和注冊過程,因此我們需要 Controller 來對不同的請求進行不同的處理。

@Controller//聲明為controller
@RequestMapping("")//在類和方法上設置請求映射

獲取請求參數(shù):

@RequestParam("")//在方法參數(shù)上設置參數(shù)映射,參數(shù)名相同可省略
@PathVariable("")//將請求路徑以{}包括可通過該注解傳遞到參數(shù)上
@RequestBody//該注解將json字符串參數(shù)轉換為對象

? 獲取cookie和session:

@CookieValue("")
@SessionAttribute("")

轉發(fā)與重定向:

//轉發(fā)
//1.直接返回以forward:開頭的轉發(fā)路徑字符串
//2.通過ModelAndView.setViewName("")設置1中的轉發(fā)路徑

//重定向
//1.直接返回以redirect:開頭的重定向路徑字符串
//2.通過ModelAndView.setViewName("")設置1中的重定向路徑

????????響應數(shù)據(jù):

//方法返回字符串時,會默認進行請求轉發(fā),配置視圖解析器后會進行頁面跳轉
//方法返回對象時,需要聲明以下注解,對象會被解析為json字符串返回
@ResponseBody

//注意!當控制器方法的返回類型為void時,會把RequestMapping中指定的映射路徑作為邏輯視圖名稱然后解 //析為物理地址去訪問。此時,可以通過在void方法上聲明HttpServletResponse對象避免解析

共享數(shù)據(jù):

//使用ModelAndView向request域?qū)ο笾泄蚕頂?shù)據(jù),ModelAndView主要由 model(模型)和 view(視圖)兩 
//部分組成;其中,model負責數(shù)據(jù)共享,而view則主要用于設置視圖,實現(xiàn)頁面跳轉,轉發(fā),重定向
public ModelAndView share(){
    ModelAndView mv=new ModelAndView();
    mv.addObject("",new Object());
    mv.setViewName("");
    return mv;
}

//使用Model向request域?qū)ο笾泄蚕頂?shù)據(jù)
@GetMapping("/share")
public String share(Model model){
    model.addAttribute("book",new Book());
    return "";
}


//此外還可以在方法上聲明HttpServletRequest向request域?qū)ο笾泄蚕頂?shù)據(jù),
//聲明HttpSession向sesion域?qū)ο笾泄蚕頂?shù)據(jù),
//通過兩者獲取ServletContext對象可以向application域?qū)ο笾泄蚕頂?shù)據(jù),
//其他方法通過聲明域?qū)ο髤?shù)即可獲取共享數(shù)據(jù)
六、RESTful

RESTful(REST 風格)是一種當前比較流行的互聯(lián)網(wǎng)軟件架構模式,它充分并正確地利用 HTTP 協(xié)議的特性,為我們規(guī)定了一套統(tǒng)一的資源獲取方式,以實現(xiàn)不同終端之間(客戶端與服務端)的數(shù)據(jù)訪問與交互。

七、配置組件

類型轉換器:一般情況下,Spring MVC 內(nèi)置的類型轉換器就可以滿足我們?nèi)粘5拈_發(fā)需求,但對于一些較為復雜類型的轉換,例如 String 轉換 Date 類型,以及開發(fā)人員自定義格式的數(shù)據(jù)的轉換等,需要我們根據(jù)自身的需求開發(fā)自定義類型轉換器來轉換。

public class MyConverter implements Converter{
    @Override
    public String convert(String s) {
        return null;
    }
}

攔截器:在 Spring MVC 中,攔截器的作用與 Servlet 中的過濾器類似,它主要用于攔截用戶請求并做相應的處理,例如通過攔截器,我們可以執(zhí)行權限驗證、記錄請求信息日志、判斷用戶是否已登錄等操作。

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return HandlerInterceptor.super.preHandle(request, response, handler);
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }

}

? 視圖解析器:Spring MVC 的控制器方法支持 ModelAndView、ModelMap、View、String 多種類型的返回值,但無論控制器方法的返回值是哪種類型,Spring MVC 內(nèi)部最終都會將它們封裝成一個 ModelAndView 對象。ModelAndView 對象由 model(模型數(shù)據(jù))和 view(視圖)兩部分組成,但這里的 view 通常并不是一個真正的 View 視圖對象,而僅僅是一個 String 類型的邏輯視圖名(View Name)而已,例如“success”、“index”等。這種情況下,Spring MVC 就需要借助?ViewResolver(視圖解析器)將 ModelAndView 對象中邏輯視圖名解析為真正的 View 視圖對象,然后才能響應給客戶端展示。

? 異常處理器:Spring MVC 提供了一個名為?HandlerExceptionResolver 的異常處理器接口,它可以對控制器方法執(zhí)行過程中出現(xiàn)的各種異常進行處理。Srping MVC 為 HandlerException- Resolver 接口提供了多個不同的實現(xiàn)類,其中最常用的實現(xiàn)類如下。

  • DefaultHandlerExceptionResolver
  • ResponseStatusExceptionResolver
  • ExceptionHandlerExceptionResolver
  • SimpleMappingExceptionResolver

其中,ExceptionHandlerExceptionResolver、ResponseStatusExceptionResolver 和 DefaultHandlerExceptionResolver 是 Spring MVC 的默認異常處理器。如果程序發(fā)生異常,Spring MVC 會按照?ExceptionHandlerExceptionResolver → ResponseStatusExceptionResolver → DefaultHandlerExceptionResolver 的順序,依次使用這三個異常處理器對異常進行解析,直到完成對異常的解析工作為止。

? 文件上傳解析器:Spring MVC 提供了一個名為 MultipartResolver 的文件解析器,來實現(xiàn)文件上傳功能。MultipartResolver?本身是一個接口,該接口共有兩個實現(xiàn)類:StandardServlet- MultipartResolver 和 CommonsMultipartResolver 。注意:當我們在 Spring MVC 的配置文件中對?CommonsMultipartResolver 的 Bean 進行定義時,必須指定這個 Bean 的 id為 multipart- Resolver,否則就無法完成文件的解析和上傳工作。

? Spring MVC 主要配置如下:

//核心配置類
@Configuration
//springMVC注解掃描
@ComponentScan({"web.controller"})
//開啟注解驅(qū)動
//會自動向 Spring MVC 中注冊
// RequestMappingHandlerMapping RequestMappingHandlerAdapter 以及 ExceptionHandlerExceptionResolver 三個Bean
// 其中 RequestMappingHandlerMapping 和 RequestMappingHandlerAdapter 都是控制器方法對請求進行分發(fā)的必須組件,為讀寫 JSON 數(shù)據(jù)提供支持
// 而 ExceptionHandlerExceptionResolver 則是 Spring MVC 的異常處理組件
// 除此之外標簽還默認注冊了一個 FormattingConversionServiceFactoryBean類型的Bean
// ConversionService 通過它,可以滿足我們大多數(shù)的類型轉換需求
@EnableWebMvc
public class SpringMVCConfig implements WebMvcConfigurer {
    //視圖解析器解析視圖后需要在應用內(nèi)部訪問靜態(tài)資源,
    //這時請求路徑無需進行映射,DispatcherServlet找不到該映射,會交給Tomcat提供的默認的servlet處理
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
    //配置類型轉換器和格式化器(輸入數(shù)據(jù)轉換為對象)
    @Override
    public void addFormatters(FormatterRegistry registry) {
        WebMvcConfigurer.super.addFormatters(registry);
    }
    //配置攔截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        WebMvcConfigurer.super.addInterceptors(registry);
    }
    //配置視圖控制器(直接進行頁面跳轉)
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/index").setViewName("index");
        registry.addViewController("/error").setViewName("error");
    }
    //配置視圖解析器(解析邏輯視圖并返回)
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        InternalResourceViewResolver viewResolver =new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/page/");
        viewResolver.setSuffix(".html");
        registry.viewResolver(viewResolver);
    }
    //配置默認異常處理器
    @Override
    public void configureHandlerExceptionResolvers(Listresolvers) {
        WebMvcConfigurer.super.configureHandlerExceptionResolvers(resolvers);
    }
    //配置文件上傳解析器
    @Bean
    public MultipartResolver multipartResolver(){
        CommonsMultipartResolver resolver=new CommonsMultipartResolver();
        resolver.setDefaultEncoding("utf-8");
        resolver.setMaxUploadSize(1024);
        return resolver;
    }
    //配置靜態(tài)資源訪問映射
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        WebMvcConfigurer.super.addResourceHandlers(registry);
    }
    //配置默認響應信息轉換器
    @Override
    public void configureMessageConverters(List>converters) {
        WebMvcConfigurer.super.configureMessageConverters(converters);
    }
    //處理跨域
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        WebMvcConfigurer.super.addCorsMappings(registry);
    }
}

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)頁標題:9.框架SpringMVC-創(chuàng)新互聯(lián)
文章源于:http://vcdvsql.cn/article46/ddgheg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供ChatGPT網(wǎng)站改版網(wǎng)站維護全網(wǎng)營銷推廣商城網(wǎng)站外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)