首页 > 编程语言 > 详细

SpringBoot

时间:2020-04-02 18:19:53      阅读:54      评论:0      收藏:0      [点我收藏+]

一:SpringBoot入门

1.SpringBoot简介

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

2.SpringBoot特性

 

1. SpringBoot并不是对Spring功能上的增强,而是提供了一种快速创建独立的Spring应用程序的框架

2. 嵌入的Tomcat,无需部署WAR文件

3. 简化Maven配置

4. 自动配置Spring

5. 绝对没有代码生成和对XML没有要求配置

6.备受关注,是下一代框架,已经是不争的事实,不需要学习springmvc

7.微服务的入门级微框架,springboot是springcloud的基础

3.SpringBoot环境搭建

方案一:通过Spring官网进行项目构建,然后下载到本地,导入到IDE当中   http://start.spring.io/

方案二:通过IDE编译器创建一个SpringBoot工程

方案三:创建普通的Maven工程,然后导入SpringBoot依赖

<!--导入SpringBoot依赖-->

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.1.4.RELEASE</version>

</parent>

 

<dependency>

<!-- spring-boot-starter-web是为我们提供了包括mvc,aop等需要的一些jar -->

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

<!-- 因为我们已经配置了 parent 中的version 所以这里不需要指定version-->

</dependency>

4.SpringBootHelloSpringBoot

(1. 创建了一个控制器

@RestController
/**
 * 如果早controller类上加RestController注解代表该controller当中的所有方法都返回json
 */
@RequestMapping("/first")
public class FirstController {

    @RequestMapping("firstRequest")
    public String firstRequest(){
        System.out.println("第一个请求到达Controller");
        return "Hello SpringBoot";
    }
}

(2. 创建了一个启动类:

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

问题:启动类需要注意其位置,默认只能扫描它所在包下的所有注解,启动类默认通过@ComponentScan扫描当前启动类所在包下的所有注解。如果其他的包和启动类不在一层的情况下,是默认扫描不到的,可以通过@ComponentScan("com.wdksoft")扫描指定的包,一般情况下都会将启动类放在与其他包相同目录的一层当中,但是启动类不能使用默认包Default

(3. SpringBoot访问静态资源

SpringBoot一般是一各普通的MavaenJava工程,如果涉及到静态资源则需要将静态资源放在resources配置目录下,与以往操作不同,静态资源需要在resources目录下创建static文件夹或者public文件夹,将静态资源放到static或者public当中,根据层级目录进行访问,但是不需要加static目录或者pulbic目录

利用Contrller做资源定向:

@Controller

@RequestMapping("/resources")

public class ResourcesContrller {

 

@RequestMapping("/getResource")

public String getResource(){

return "/html/index.html";

}

}

(4. SpringBoot设置异常处理器

4.1 局部(在controller内部)

/**

 * 局部异常处理

 * @param ex

 * @return

 */

@ExceptionHandler(RuntimeException.class)

@ResponseBody

public String exceptionHandler(Exception ex){

if(ex instanceof ArithmeticException){

return "服务器内部错误~";

}

return "发生错误,请稍后重试~";

}

4.2 全局1

@ControllerAdvice       //利用AOP思想增强每一个Controller

public class MyException {

/**

 * 局部异常处理

 * @param ex

 * @return

 */

@ExceptionHandler(RuntimeException.class)

@ResponseBody

public String exceptionHandler(Exception ex){

if(ex instanceof ArithmeticException){

return "服务器内部错误~";

}

return "发生错误,请稍后重试~";

}

}

全局2

@ControllerAdvice
public class exceptionHandler {

    //捕获运行时异常
    @org.springframework.web.bind.annotation.ExceptionHandler(RuntimeException.class)
    @ResponseBody
    public Map<String,Object> exceHandler(){
        Map<String,Object> map=new HashMap<>();
        map.put("error","500");
        map.put("msg","您好,服务器出现异常,请稍后重试!");
        return map;
    }
}

5. 热部署

IDEA实现热部署:

1.加入devtools依赖

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-devtools</artifactId>

<optional>true</optional>

</dependency>

2.加入springboot插件

<plugin>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-maven-plugin</artifactId>

            <configuration>

             <fork>true</fork>

             /configuration>

         </plugin>

3.配置自动编译

File---->Settings---->Build,Execution,.....---->Compiler

Build Project automatically勾选上

4.ctrl+shift+a找到registry

从列表中找到compiler.automake.allow.when.app.running将其勾选

6. SpringBoot整合JSP

1.引入依赖

<!-- 配置servlet需要的依赖  -->

<dependency>

  <groupId>javax.servlet</groupId>

  <artifactId>javax.servlet-api</artifactId>

</dependency>

<!-- 配置jstl标签库需要的依赖  -->

<dependency>

  <groupId>javax.servlet</groupId>

  <artifactId>jstl</artifactId>

</dependency>

<!-- 添加tomcat的支持 -->

<dependency>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-starter-tomcat</artifactId>

</dependency>

<dependency>

  <groupId>org.apache.tomcat.embed</groupId>

  <artifactId>tomcat-embed-jasper</artifactId>

</dependency>

2. 创建配置文件,修改SpringBoot的默认配置,如Tomcat端口

第一种形式:application.properties

server.port=8081

第二种形式:application.yml 格式要求非常严格(阶梯式)

server

port: 8081

第三种:bootstrap.propertiesbootstrap.yml

 

bootstrapapplication区别:

Spring Cloud 构建于 Spring Boot 之上,在 Spring Boot 中有两种上下文,一种是 bootstrap, 另外一种是 application, bootstrap 是应用程序的父上下文,也就是说 bootstrap 加载优先于 applicaton

bootstrap 主要用于从额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。这两个上下文共用一个环境,它是任何Spring应用程序的外部属性的来源。bootstrap 里面的属性会优先加载,

它们默认也不能被本地相同配置覆盖。

 

创建SpringBoot配置文件:

application.properties

##配置视图解析器
spring:
  mvc:
    view:
      prefix: /jsp/
      suffix: .jsp

3. 创建控制器,实现请求的转发

@Controller
@RequestMapping("/jspRequestController")
public class JspRequestController {

    @RequestMapping("/jspRequest")
    public String jspRequest(Model model){
        System.out.println("进入到控制器,准备转发页面~");
        model.addAttribute("name","张三");
        return "index";
    }
}

4. 页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>SpringBoot整合Jsp</title>
</head>
<body>
    欢迎:${name}
</body>
</html>

 

5.创建了一个启动类:

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

注意问题:启动类所启动的工程如果是父子工程的情况下,默认找父工程,但是内容写入到了子工程,这时就需要让启动类将当前子工程作为工作目录,找到

Working dirctory选择$model......

use classpath of model 选择当前工程即可

7. SpringBoot整合freemarker

1.引入依赖

<dependency>

<groupId>org.springframework.boot</groupId>  

<artifactId>spring-boot-starter-freemarker</artifactId>  

</dependency>

2.新建一个freemarker模板

首先在resources下创建一个templates文件夹,在该文件夹下创建一个html文件,将html后缀改为ftl即可,在模板中可以采用${xxx}进行取值

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>SpringBoot整合FreeMarker</title>
</head>
<body>
    欢迎:${name}
   <#-- <#list userList as userName>
        ${userName}
    </#list>-->
</body>
</html>

3. 在配置文件中添加freemarker配置

## Freemarker 配置
spring.freemarker.template-loader-path=classpath:/templates/
spring.freemarker.cache=false
spring.freemarker.charset=UTF-8
spring.freemarker.check-template-location=true
spring.freemarker.content-type=text/html
spring.freemarker.expose-request-attributes=false
spring.freemarker.expose-session-attributes=false
spring.freemarker.request-context-attribute=request

4. 新建一个Controller控制器,通过控制方法传递数据以及跳转到模板页面

@Controller
@RequestMapping("/free")
public class FreeController {

    @RequestMapping("/freeFirst")
    public String freeFirst(ModelMap map){
        map.put("name","张三");
        return "helloFreeMarker";
    }

    @RequestMapping("/freeSecond")
    public String freeSecond(ModelMap map){
        List<String> list =new ArrayList<>();
        list.add("李四");
        list.add("王五");
        map.put("userList",list);
        return "helloFreeMarker";
    }
}

博客:

https://www.cnblogs.com/jingwhale/p/4644566.html

https://www.cnblogs.com/xiufengchen/p/10404872.html

 

8. SpringBoot整合thymeleaf

概念:

动静结合:Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。

这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式。浏览器解释 html 时会忽略未定义的标签属性,

所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。

1.引入依赖

<!-- 添加thymeleaf模版的依赖 -->

<dependency>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-starter-thymeleaf</artifactId>

</dependency>

2. 新建一个模板

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>springboot_thymeleaf</title>
</head>
<body>
    <ul th:each="stu:${stuList}">
        <li><span th:text="${stu.stu_id}"></span><span th:text="${stu.stu_name}"></span></li>
    </ul>
</body>
</html>

3. 配置thymeleaf,不配置也可以

##配置thymeleaf
#springboot 官方文档建议我们关闭thymeleaf的缓存
spring:
  thymeleaf:
    cache: false

4. 新建控制方法进行转发

@Controller
@RequestMapping("/thymeleafController")
public class ThymeleafController {

    @RequestMapping("/thymeleaf")
    public String ThymeleafhashCode(Model model){
        List<Student> list=new ArrayList<>();
        Student stu1=new Student(1,"张三");
        Student stu2=new Student(1,"李四");
        Student stu3=new Student(1,"王五");
        list.add(stu1);
        list.add(stu2);
        list.add(stu3);
        model.addAttribute("stuList",list);
        return "index";
    }
}

博客:https://www.cnblogs.com/msi-chen/p/10974009.html

SpringBoot

原文:https://www.cnblogs.com/zhaoyun01/p/12621349.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!