Spring Boot基礎

目錄

Spring Boot

Spring Boot特性

三種創建方式

SpringBoot HelloWorld

1、POM文件

2、啓動類

3、啓動器

4、配置文件

5、SpringBoot核心註解

6、SpringBoot在Controller中的常用註解

7、HelloWorld

SpringBoot整合web層技術

1、整合Servlet方式一

2、整合Servlet方式二

3、整合Filter方式一

4、整合Filter方式二

5、整合Listener方式一

6、整合Listener方式二

SpringBoot訪問靜態資源


Spring Boot

其並不是對Spring功能上的增強,而是一種快速使用Spring的方式

 

Spring Boot特性

  1. 創建獨立的Spring應用程序
  2. 嵌入的Tomcat,無需部署WAR文件
  3. 簡化maven配置
  4. 自動配置Spring
  5. 提供生產就緒型功能,如指標,健康檢查和外部配置
  6. 開箱即用,沒有代碼生成,也無需XML配置。

 

三種創建方式

  1. 從官網創建
  2. idea腳手架創建
  3. maven創建

 

SpringBoot HelloWorld

1、POM文件

1.1 繼承

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.0.RELEASE</version>
        <relativePath></relativePath>
</parent>

SpringBoot的父級依賴,只有繼承他項目纔是SpringBoot項目

 

1.2 依賴

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.2.0.RELEASE</version>
</dependency>

包含了web開發的所有啓動器,打包依賴,這裏不必指定version,會遵從父級。

 

1.3 插件

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
</build>

spring-boot-maven-plugin插件是將springboot的應用程序打包成jar包的插件,將所有應用程序啓動運行所需的jar包都包含進來。

 

2、啓動類

其作用是啓動springboot項目(不同於啓動器),是基於main方法運行,啓動時會做註解掃描(@Controller、@Service....),掃描的位置是同包或者子包下的註解,所以啓動類的位置應放在包的根下。

/**
 * 啓動類*/
//1、啓動類必須加這個註解
@SpringBootApplication
public class SpringBootTestApplication
{
    public static void main(String[] args)
    {
        SpringApplication.run(SpringBootTestApplication.class,args);//2、必須要有
    }
}

@SpringBootApplication和 SpringApplication.run(啓動類類名, args)是固定寫法,標識啓動類。

2.1 啓動類和啓動器區別

  1. 啓動類是一個class,是項目的啓動入口
  2. 啓動器是jar包的座標

 

3、啓動器

SpringBoot將所有的功能場景都抽取出來,做成一個個starter(啓動器),要用什麼功能就導入什麼場景,只需要在項目裏引入這些starter,相關場景的所有依賴都會導入進來,最終實現一站式開發。

其中spring-boot-starter是核心啓動器。一般官方啓動器命名格式spring-boot-starter-xx。

 

4、配置文件

SpringBoot提供一個名爲application的全局配置文件,支持兩種格式:properteis和YAML。兩種配置文件作用一樣,但是書寫格式不同。

4.1、properteis格式

比如配置內嵌的tomcat的監聽端口

server.port=8080

4.2、YAML格式

擴展名爲yaml或者yml。

server:

        port:8080

 

4.3 存放位置

  1. 當前根目錄或者其下的config目錄中
  2. 項目的resourc或者其下的config目錄中

 

4.4 配置文件的加載順序

  • 不同格式:properties格式高於yml,且同一屬性取最先讀取的,後面的不覆蓋前面的。
  • 不同位置:項目根目錄/config > 根目錄 > reource/config > resource

 

4.5 配置文件中的佔位符

語法:${}

作用:

  • 獲取框架提供的方法中的值,如random.int
  • 獲取配置文件中的鍵的值賦給另一個鍵作爲值

server:

       value:8080

       port: ${server.value}    //port:${random.int(1024-9999)}

 

4.6 bootstrap配置文件

SpringBoot有兩種上下文:

  1. bootstrap  : 應用程序的上下文
  2. application

bootstrap是aplication的父對象,且加載優先級bootstrap > bootstrap。兩者共用一個環境

 

5、SpringBoot核心註解

5.1 @SpringBootApplication

是SpringBoot的啓動類,是很多註解的組合。

5.2 @SpringBootConfiguration

相當於Spring中的@Configuration,標註這個類是一個配置類。

5.3 @Configuration

通過對bean對象的操作替代spring中的xml文件。

5.4 @EnableAutoConfiguration

SpringBoot自動配置

5.5 @AutoConfigurationPackage

自動注入主類下所在包下所有的加了註解的類。

5.6 @Import

5.7 @ComponentScan

組件掃描,可自動發現和裝配一些bean。

5.8 @ConfigurationPropertiesScan

掃描配置屬性

 

6、SpringBoot在Controller中的常用註解

6.1 @RestController

相當於@Controller + @ResponsBody, 直接返回return的內容

6.2 @GetMapping

是@RequestMapping(method = RequestMethod.GET)的縮寫

6.3 @PostMapping

6.4 @PutMapping

6.5 @DeleteMapping

 

 

7、HelloWorld

1、創建一個maven工程

2、修改pom文件,引入依賴,變成SpringBoot項目

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.0.RELEASE</version>
        <relativePath></relativePath>
    </parent>

    <groupId>xiaobin_springboot</groupId>
    <artifactId>spring-boot-test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

3、修改tomcat監聽端口

默認8080,也可以不修改,僅以此演示配置文件的使用。創建配置文件:

server.port=8080

 

4、創建啓動類

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 啓動類*/
//1、啓動類必須加這個註解
@SpringBootApplication
public class SpringBootTestApplication
{
    public static void main(String[] args)
    {
        SpringApplication.run(SpringBootTestApplication.class,args);//2、必須要有
    }
}

 

5、創建Controller

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 處理請求controller*/
@RestController    //@Controller + @ResponsBody 直接返回json串
public class HelloWorldController
{
    @RequestMapping("/helloWorld")
    public String showHelloWorld()
    {
        return "HelloWorld";
    }
}

到此helloworld編寫完了。

啓動啓動類,出現下圖說明啓動成功

在瀏覽器鍵入http://localhost:8888/helloWorld,出現:

至此,第一個helloworld就成功了。

 

SpringBoot整合web層技術

1、整合Servlet方式一

通過註解掃描完成Servlet組件的註冊

1.1 創建Servlet

/**
 * 整合Servlet方式一
 * */
@WebServlet(name = "FirstServlet",urlPatterns = "/first")
public class FirstServlet extends HttpServlet
{
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    {
        System.out.println("第一個Servlet...");
    }
}

1.2 修改啓動類

/**
 * 啓動類*/
//1、啓動類必須加這個註解
@SpringBootApplication
@ServletComponentScan //在SpringBoot啓動時會掃描@WebServlet註解,並將該類實例化
public class SpringBootTestApplication
{
    public static void main(String[] args)
    {
        SpringApplication.run(SpringBootTestApplication.class,args);//2、必須要有
    }
}

在瀏覽器輸入http://localhost:8888/first即可在控制檯輸出"第一個Servlet...",即成功。

 

2、整合Servlet方式二

通過方法完成Servlet組建的註冊

2.1 創建Servlet

/**
 * 整合servlet方式二
 * */
public class SecondServlet extends HttpServlet
{
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    {
        System.out.println("第二個Servlet...");
    }
}

2.2 創建Servlet配置類


//Servlet配置類,該方法也可以放到啓動類當中
@Configuration
public class ServletConfig
{
    //完成Servlet組件的註冊
    @Bean
    public ServletRegistrationBean getServletRegistrationBean()
    {
        ServletRegistrationBean bean = new ServletRegistrationBean(new SecondServlet());
        bean.addUrlMappings("/second");
        return bean;
    }
}

在瀏覽器輸入http://localhost:8888/first即可在控制檯輸出"第二個Servlet...",即成功。

 

3、整合Filter方式一

通過註解掃描完成Filter組件註冊

3.1 創建Filter

//整合Filter方式一
@WebFilter(filterName = "FirstFilter",urlPatterns = "/first")
public class FirstFilter implements Filter
{
    public void destroy()
    {

    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException
    {
        System.out.println("進入Filter...");
        chain.doFilter(req, resp);
        System.out.println("離開Filter...");
    }


    public void init(FilterConfig config) throws ServletException
    {

    }

}

3.2修改啓動類

/**
 * 啓動類*/
//1、啓動類必須加這個註解
@SpringBootApplication
@ServletComponentScan //在SpringBoot啓動時會掃描@WebServlet,@WebFilter註解,並將該類實例化
public class SpringBootTestApplication
{
    public static void main(String[] args)
    {
        SpringApplication.run(SpringBootTestApplication.class,args);//2、必須要有
    }
}

在瀏覽器鍵入http://localhost:8888/first,控制檯出現下圖則成功:
 

 

4、整合Filter方式二

通過方法完成Filter組件註冊

4.1 創建Filter

//整合Filter方式二
public class SecondFilter implements Filter 
{
    public void destroy() 
    {
        
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException 
    {
        System.out.println("進入第二個Filter...");
        chain.doFilter(req, resp);
        System.out.println("離開第二個Filter...");
    }

    public void init(FilterConfig config) throws ServletException
    {

    }

}

4.2 創建Filter配置類

//Filter配置類
@Configuration
public class FilterConfig
{
    @Bean
    public FilterRegistrationBean getFilterRegistrationBean()
    {
        FilterRegistrationBean bean = new FilterRegistrationBean(new SecondFilter());
        bean.addUrlPatterns("/second");
        return bean;
    }
}

 

5、整合Listener方式一

通過註解掃描

5.1 創建Listener

//整合Listener方式一
@WebListener
public class FirstListener implements ServletContextListener
{
    public void contextDestroyed(ServletContextEvent event)
    {
        
    }
    public void contextInitialed(ServletContextEvent event)
    {
        System.out.println("Listener 初始化...");
    }
}

5.2 修改啓動類

/**
 * 啓動類*/
//1、啓動類必須加這個註解
@SpringBootApplication
@ServletComponentScan //在SpringBoot啓動時會掃描@WebServlet,@WebFilter,@WebLisener註解,並將該類實例化
public class SpringBootTestApplication
{
    public static void main(String[] args)
    {
        SpringApplication.run(SpringBootTestApplication.class,args);//2、必須要有
    }
}

6、整合Listener方式二

通過方法,和前面組件類似,只不過不需要addUrl...不一一贅述。

 

 

SpringBoot訪問靜態資源

在項目目錄並沒有WebContent目錄,springboot默認在static下存放靜態資源templates下存放動態頁面(推薦Thymeleaf)。

也可以自定義位置。

 

SpringBoot整合動態資源(Thymeleaf

1、添加依賴

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
 </dependency>

2、創建Controller和Html

//頁面跳轉controller
@Controller
public class PageController
{
    //頁面跳轉方法
    @GetMapping("/show")
    public String showPage(Model model)
    {
        model.addAttribute("msg","Hello Thymeleaf");
        return "indexThymeleaf";
    }
}
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>XB</title>
</head>
<body>
    <span th:text="你好XB"></span>
    <hr>
    <span th:text="${msg}"></span>
</body>
</html>

訪問http://localhost:8080/show

 

3、SpringBoot中配置Thymeleaf

spring.thymeleaf.prefix=classpath:/templates/  #默認路徑
spring.thymeleaf.suffix=.html    
spring.thymeleaf.encoding=utf-8    

 

SpringBoot 整合jdbc和mybatis

 

SpringBoot異常處理

五種處理方式

1、自定義錯誤頁面

如果要所有異常都跳轉到統一頁面則需要在src/main/resources/templates目錄下創建error.html(名稱必須爲error.html)

2、通過@ExceptionHandler註解處理異常

創建Controller

@Controller
public class UsersController
{
    @RequestMapping("showInfo")
    public String showInfi()
    {//人爲製造異常
        String str = null;
        str.length();
        return "ok";
    }

    //處理空指針異常
    @ExceptionHandler(value = {NullPointerException.class})
    public ModelAndView nullpointExceptionHandler(Exception e)
    {
        ModelAndView mv = new ModelAndView();
        mv.addObject("err",e.toString());
        mv.setViewName("error1");  //異常下跳轉
        return mv;
    }
}

 

3、通過@ControllerAdvice和@ExceptionHandler處理異常(全局處理)

這種方式異常和處理方法不必在同一類下

@ControllerAdvice
public class GlobalException
{
    @ExceptionHandler(value = {NullPointerException.class})
    public ModelAndView nullpointExceptionHandler(Exception e)
    {
        ModelAndView mv = new ModelAndView();
        mv.addObject("err",e.toString());
        mv.setViewName("error1.html");//異常下跳轉
        return mv;
    }
}

4、通過SimpleMappingExceptionResolver

處理類

@Configuration
public class GlobalException2
{
    public SimpleMappingExceptionResolver getException()
    {
        SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver();
        Properties properties = new Properties();
        //參數1:異常全名   參數2:跳轉視圖
        properties.put("java.lang.NullPointerException","error1");
        properties.put("java.lang.NullPointerException","error2");

        resolver.setExceptionMappings(properties);

        return resolver;
    }
}

5、通過HandlerExceptionResolver接口自定義異常處理類(最好)

@Configuration
public class GlobalException3 implements HandlerExceptionResolver
{

    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        //必須實現該方法
        ModelAndView mv = new ModelAndView();
        //判斷不同類型異常
        if(ex instanceof NullPointerException)
        {
            mv.setViewName("error1");
        }
        if(ex instanceof ArithmeticException)
        {
            mv.setViewName("error2");
        }
        
        mv.addObject("error", ex.toString());
        return mv;
    }
}

 

 

 

 

更新中......

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章