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

資訊專欄INFORMATION COLUMN

springboot學習(二)——springmvc配置使用

hiyayiji / 1361人閱讀

摘要:中添加攔截器配置如下攔截所有請求,也就是,只攔截開頭的請求。在中并沒有提供配置文件的方式來配置攔截器,因此需要使用的代碼式配置,配置如下這個屬性通常并不需要手動配置,高版本的會自動檢測第四點講下靜態資源映射。

以下內容,如有問題,煩請指出,謝謝

上一篇講解了springboot的helloworld部分,這一篇開始講解如何使用springboot進行實際的應用開發,基本上尋著spring應用的路子來講,從springmvc以及web開發講起。
官方文檔中在helloworld和springmvc之間還有一部分內容,主要講了spring應用的啟動、通用配置以及日志配置相關的內容,其中關于通用配置的部分對于springboot來說是個很重要的內容,這部分等到后面在細說下,有了一定的應用能力,到時候理解起來輕松些。

先來回顧下springmvc是怎么使用的。
首先需要配置DispatcherServlet,一般是在web.xml中配置


    dispatcherServlet
    org.springframework.web.servlet.DispatcherServlet
    1


    dispatcherServlet
    /

這一點在springboot中就不需要手動寫xml配置了,springboot的autoconfigure會默認配置成上面那樣,servlet-name并不是一個特別需要注意的屬性,因此可以不用太關心這個屬性是否一致。
具體的初始化是在 org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration中完成的,對應的一些配置在 org.springframework.boot.autoconfigure.web.ServerProperties 以及
org.springframework.boot.autoconfigure.web.WebMvcProperties,后面講一些常用的配置,不常用的就自己看源碼了解吧,就不細說了。

然后是ViewResolver,也就是視圖處理的配置。在springmvc中,一般是在springmvc的xml配置中添加下列內容



    
    
    

低版本的spring需要加上viewClass,高版本的spring會自動檢測是否使用JstlView,因此這個屬性通常并不需要手動配置,主要關心prefix和suffix。另外高版本的springmvc也不需要手動指定 HandlerMapping 以及
HandlerAdapter ,這兩個也不需要顯式聲明bean。

如何在springboot中配置ViewResolver,主要有兩種方法。
一種是在application.properties中配置,這是springboot中標準的配置方法。

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

另外一種是springmvc中的代碼式配置,這種也是現在比較流行的配置方式,不顯式指定配置文件,配置即代碼的思想,腳本語言python js scala流行的配置方式。
代碼是配置的主要操作就是自己寫代碼來為mvc配置類中的某個方法注入bean或者直接覆蓋方法,如下:

package pr.study.springboot.configure.mvc;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
public class SpringMvcConfigure extends WebMvcConfigurerAdapter {

    @Bean
    public InternalResourceViewResolver viewResolver(){
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/jsp/");
        viewResolver.setSuffix(".jsp");
        // viewResolver.setViewClass(JstlView.class); // 這個屬性通常并不需要手動配置,高版本的Spring會自動檢測
        return viewResolver;
    }
}

上面的視圖使用的是jsp,這時需要在pom.xml中添加新的依賴。


    org.apache.tomcat.embed
    tomcat-embed-jasper
    provided

代碼也相應的改寫下,返回視圖時,不能使用@ResponseBody,也就是不能使用@RestController

package pr.study.springboot.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

//@RestController
@Controller
public class HelloWorldController {

    @RequestMapping("/hello")
    public ModelAndView hello() {
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg", "this a msg from HelloWorldController");
        mv.setViewName("helloworld");;
        return mv;
    }
}

還要新建jsp文件,路徑和使用普通的tomcat部署一樣,要在src/main/webapp目錄下新建jsp的文件夾,這里路徑不能寫錯。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>




helloworld


  

${msg}

springboot使用嵌入式Servlet容器,對jsp支持有限,官方是推薦使用模板引擎來代替jsp。

第三點講下比較重要的springmvc攔截器(HandlerInterceptor)。
攔截器在springmvc中有重要的作用,它比servlet的Filter功能更強大(攔截器中可以編程的地方更多)也更好使用,缺點就是它只能針對springmvc,也就是dispatcherServlet攔截的請求,不是所有servlet都能被它攔截。
springmvc中添加攔截器配置如下:


      
    
        
        
        
    

Interceptor1攔截所有請求,也就是/**,Interceptor2只攔截/users開頭的請求。
在springboot中并沒有提供配置文件的方式來配置攔截器(HandlerInterceptor),因此需要使用springmvc的代碼式配置,配置如下:

package pr.study.springboot.configure.mvc;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

import pr.study.springboot.aop.web.interceptor.Interceptor1;
import pr.study.springboot.aop.web.interceptor.Interceptor2;

@Configuration
public class SpringMvcConfigure extends WebMvcConfigurerAdapter {

    @Bean
    public InternalResourceViewResolver viewResolver(){
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/jsp/");
        viewResolver.setSuffix(".jsp");
        // viewResolver.setViewClass(JstlView.class); // 這個屬性通常并不需要手動配置,高版本的Spring會自動檢測
        return viewResolver;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new Interceptor1()).addPathPatterns("/**");
        registry.addInterceptor(new Interceptor2()).addPathPatterns("/users").addPathPatterns("/users/**");
        super.addInterceptors(registry);
    }
}

第四點講下靜態資源映射。
一些簡單的web應用中都是動靜混合的,包含許多靜態內容,這些靜態內容并不需要由dispatcherServlet進行轉發處理,不需要進行攔截器等等的處理,只需要直接返回內容就行。springmvc提供了靜態資源映射這個功能,在xml中配置如下:

springboot中有兩種配置,一種是通過配置文件application.properties指定

# default is: /, "classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"
#spring.resources.static-locations=classpath:/res/
# the "staticLocations" is equal to "static-locations"
#spring.resources.staticLocations=classpath:/res/

# default is /**
#spring.mvc.staticPathPattern=/**

另外一種是springmvc的代碼式配置

@Configuration
public class SpringMvcConfigure extends WebMvcConfigurerAdapter {

    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/jsp/");
        viewResolver.setSuffix(".jsp");
        // viewResolver.setViewClass(JstlView.class); // 這個屬性通常并不需要手動配置,高版本的Spring會自動檢測
        return viewResolver;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new Interceptor1()).addPathPatterns("/**");
        registry.addInterceptor(new Interceptor2()).addPathPatterns("/users").addPathPatterns("/users/**");
        super.addInterceptors(registry);
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // addResourceHandler指的是訪問路徑,addResourceLocations指的是文件放置的目錄  
        registry.addResourceHandler("/**").addResourceLocations("classpath:/res/");
    }
}

兩種方式效果一樣,配置后訪問正確的靜態文件都不會被攔截器攔截。
當然,靜態文件不被攔截的方法還有很多,比如使用其他的servlet來轉發靜態文件,攔截器(HandlerInterceptor)的exclude,dispatcherServlet攔截/*.do等等方式,這里就不細說了。

今天就到此為止,springmvc以及Web的還有不少內容,下期在說
因為Demo比較簡單,這里就沒有貼運行結果的圖,相關代碼如下:
https://gitee.com/page12/stud...
https://github.com/page12/stu...

一些有既可以通過application.properties配置,又可以使用代碼式配置的,都注釋掉了application.properties中的配置,試運行時可以切換下。

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

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

相關文章

  • Java后端

    摘要:,面向切面編程,中最主要的是用于事務方面的使用。目標達成后還會有去構建微服務,希望大家多多支持。原文地址手把手教程優雅的應用四手把手實現后端搭建第四期 SpringMVC 干貨系列:從零搭建 SpringMVC+mybatis(四):Spring 兩大核心之 AOP 學習 | 掘金技術征文 原本地址:SpringMVC 干貨系列:從零搭建 SpringMVC+mybatis(四):Sp...

    joyvw 評論0 收藏0
  • Spring Boot 《一》開發一個“HelloWorld”的 web 應用

    摘要:一概括,如果使用開發一個的應用創建一個項目并且導入相關包。創建一個編寫一個控制類需要一個部署應用的服務器如,特點設計目的是用來簡化新應用的初始搭建以及開發過程。啟動器可以和位于同一個包下,或者位于的上一級包中,但是不能放到的平級以及子包下。 一,Spring Boot 介紹 Spring Boot不是一個新的框架,默認配置了多種框架使用方式,使用SpringBoot很容易創建一個獨立運...

    chaosx110 評論0 收藏0
  • 慕課網_《2小時學會SpringBoot學習總結

    摘要:小時學會學習總結時間年月日星期六說明本文部分內容均來自慕課網。慕課網教學示例源碼暫無。數據庫操作下第六章事務管理事務管理只有查詢的時候不加事務,其它任何操作都要加事務。第七章課程回顧課程回顧總結介紹安裝配置的使用數據庫操作 《2小時學會SpringBoot》學習總結 時間:2017年2月18日星期六說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示...

    aisuhua 評論0 收藏0
  • springboot學習(三)——使用HttpMessageConverter進行http序列化和反

    摘要:序列化反序列化主要體現在程序這個過程中,包括網絡和磁盤。如果是開發應用,一般這兩個注解對應的就是序列化和反序列化的操作。協議的處理過程,字節流內部對象,就涉及這兩種序列化。進行第二步操作,也就是序列化和反序列化的核心是。 以下內容,如有問題,煩請指出,謝謝! 對象的序列化/反序列化大家應該都比較熟悉:序列化就是將object轉化為可以傳輸的二進制,反序列化就是將二進制轉化為程序內部的...

    stackfing 評論0 收藏0

發表評論

0條評論

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