SpringBoot学习(一)(简介、入门程序、静态资源访问、异常处理)

一、SpringBoot简介

        SpringBoot是一个快速开发的框架,用来简化新Spring应用的初始搭建以及开发过程 ,它能够快速的整合第三方框架,简化XML配置,全部采用注解形式开发,内置Http服务器,SpringBoot的Web组件默认集成的是SpringMVC框架

二、SpringBoot和SpringCloud区别

    SpringBoot是一个快速开发框架,而SpringCloud依赖于SpringBoot组件,是一套完整的微服务解决框架。

三、快速入门

        多说无益,先来看一个入门程序

        1、新建一个maven项目,目录结构如图

            685aefd1358caa7be9863b2fa1905efe140.jpg

    2、pom.xml文件

<?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>

    <groupId>com.caofanqi</groupId>
    <artifactId>stuspringboot</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <!-- 添加父工程,就能受益于maven的依赖管理功能,在项目中引入很多依赖,就不需要添加版本号了,会从parent中继承得到 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
    </parent>

    <dependencies>
        <!-- 添加springboot web 组件依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- 打包构建jar文件 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

    3、IndexController

package com.caofanqi.controller;


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

/**
 * 因为web组件采用的是SpringMVC,所以控制层编写与SpringMVC类似。
 */
@RestController
public class IndexController {

    @RequestMapping(value = {"/","/index"})
    public String index() {
        return "Hello SpringBoot!";
    }

}

    4、Application启动类

package com.caofanqi;

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

/**
 * @SpringBootApplication = @SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan ,一个注解顶三个,
 * @SpringBootConfiguration:里面包含@Configuration,表示是javaConfig配置类;
 * @ComponentScan:扫描包;
 * @EnableAutoConfiguration :表示开启自动配置;
 */
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

    5、运行main方法可以看到如下所示,启动成功,默认服务器Tomcat,默认端口8080

a23eac02c99c8aa4719309a4e78e3682d79.jpg780ce435e594998aa0a086904a840f8eed6.jpg

访问 http://127.0.0.1:8080/ 或 http://127.0.0.1:8080/index 如下:

        6200abe16e6953f6affef6af60e83927019.jpg

好啦,第一个SpringBoot程序完成了,是不是比以前的开发简单快速很多呢?

四、静态资源访问

    开发Web应用的时候,需要引用大量的js、css、图片等静态资源。Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则:

        /static

        /public

        /resources        

        /META-INF/resources

我们分别在如下位置添加两张图片

d400a9c3041e5ed22bd8fe6944582e2f2f8.jpg

访问 http://127.0.0.1:8080/1.jpg 可以正常访问到图片,但是http://127.0.0.1:8080/2.jpg 会报404。

五、渲染Web页面

    在动态HTML实现上Spring Boot依然可以完美胜任,并且提供了多种模板引擎的默认配置支持,所以在推荐的模板引擎下,我们可以很快的上手开发动态网站。

    Spring Boot提供了默认配置的模板引擎主要有以下几种:

  • Thymeleaf
  • FreeMarker
  • Velocity
  • Groovy
  • Mustache

Spring Boot建议使用这些模板引擎,避免使用JSP,若一定要使用JSP将无法实现Spring Boot的多种特性,具体可见后文:支持JSP的配置

当你使用上述模板引擎中的任何一个,它们默认的模板配置路径为:src/main/resources/templates

       1、使用FreeMarker:

            ①pom中引入依赖:

<!-- 引入freeMarker的依赖包. -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

        ②controller

package com.caofanqi.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/freemarker")
public class freemarkerController {

    @RequestMapping("/hello")
    public String helloFreeMarker(Model model){
        model.addAttribute("hello","Hello,FreeMarker!");
        return "hello";
    }

}

    ③在/src/main/java/resources/templates中添加模板

        d1c74c9d5615d83143e4033f13e7977af83.jpg

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8" />
    <title></title>
</head>
<body>
${hello}
</body>
</html>

    ④启动程序,访问http://127.0.0.1:8080/freemarker/hello 如下:

    1a339422b4ed7995fa4a198bfe45c96935b.jpg

六、异常处理

        自定义一个异常

/**
 * 在自定义类上添加@ResponseStatus 可以将异常映射为Http状态码
 */
@ResponseStatus(code= HttpStatus.NOT_FOUND,reason = "my custom exception!!!")
public class MyNotFoundException extends RuntimeException {

}

        1、单个Controller范围的处理,对于@ExceptionHandler注解标注的方法来说,它能处理同一个控制器中所有处理器方法抛出的指定异常。

        2、全局Controller范围异常处理, 使用@ControllerAdvice编写控制器通知,它会处理所有带有@RequestMapping注解的处理器。

代码如下:

errorController:

package com.caofanqi.controller;

import com.caofanqi.exception.MyNotFoundException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

/**
 * 测试异常处理器
 */
@RestController
public class errorController {


    /**
     * 抛出MyNotFoundException异常
     */
    @RequestMapping(value = "/merror")
    public String testMError(){
        throw  new MyNotFoundException();
    }

    /**
     * 抛出RuntimeException
     */
    @RequestMapping(value = "/gerror")
    public String testGError(){
        throw new RuntimeException("测试处理全局运行时异常");
    }


    /**
     * 该方法会处理该Controller类中所有的MyNotFoundException异常
     */
    @ExceptionHandler(MyNotFoundException.class)
    public Map<String,Object> exceptionHandler(){
        Map<String,Object> reason =  new HashMap<>();
        reason.put("errorCode","404");
        reason.put("errorMsg","我自定义的404异常");
        return reason;
    }

}

全局异常处理通知:

package com.caofanqi.exception;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.Map;

/**
 * 异常通知类,该类可以包含多个带有@ExceptionHandler注解的方法,可以指定扫描范围。
 */
@ControllerAdvice
public class GlobalExceptionHandler {


    @ResponseBody
    @ExceptionHandler(RuntimeException.class)
    public Map<String, Object> exceptionHandler() {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("errorCode", "10000");
        map.put("errorMsg", "全局异常!");
        return map;
    }


}

注意:

  • 同一个异常被局部范围异常处理器和全局范围异常处理器同时覆盖,会选择小范围的局部范围处理器
  • 同一个异常被小范围的异常类和大范围的异常处理器同时覆盖,会选择小范围的异常处理器

 

项目源码:https://gitee.com/itcaofanqi/CaoFanqiStudyRepository/tree/master/stuspringboot/

转载于:https://my.oschina.net/caofanqi/blog/3010212

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值