SpringBoot学习

 一.SpringBoot主流的原因

1.敏捷开发(整合框架)
2.无需Tomcat(java应用程序运行,实际jar包),内置Tomcat
3.减少xml配置(没有xml),配置文件properties
4.SpringCloud+SpringBoot

5.注解
SpringBoot之环境搭建:http://bbs.itmayiedu.com/article/1491835651684
视频学习网站:http://www.itmayiedu.com/front/showcoulist

 

二.SpringBoot和微服务有什么关联?
  目前来说SpringCloud(http接口+rest),基于SpringBoot web组件封装SpringMVC

  之后互联网项目,面向服务架构(SOA)转变成微服务架构
  springdata(操作持久层框架,类似于MyBatis)与springmvc
  springboot安不安全?安全的

 

三.第一个SpringBoot项目

1.系统要求

  Java1.8及以上

  Spring Framework4.1.5及以上

  这里采用Java1.8.0、Spring Boot1.3.2调试通过。

2.快速入门

  SpringBoot封装jar依赖原理,Maven继承依赖管理,所有jar全部都在parent依赖。

  使用SpringBoot写一个接口(服务)

  当然,前提条件是Maven环境搭建,具体可以参考《Maven安装教程详解》、《使用Eclipse构建Maven项目

pom.xml

<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.bijian</groupId>
  <artifactId>springboot-helloworld</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <!-- 引入SpringBoot父类依赖  -->
  <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.3.3.RELEASE</version>
  </parent>
  <dependencies>
    <!-- springboot-web组件 -->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
  </dependencies>
</project>

HelloWorldController.java

package com.bijian.controller;

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

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

//表示该接口全部都返回json格式
@EnableAutoConfiguration
@RestController
public class HelloWorldController {

    @RequestMapping("/index")
    public String index() {
        return "success";
    }
    
    @RequestMapping("/getMap")
    public Map<String, Object> getMap() {
        Map<String, Object> result = new HashMap<String, Object>();
        result.put("errorCode", "200");
        result.put("errorMsg", "成功");
        return result;
    }
    
    public static void main(String[] args) {
        //主函数运行Springboot项目
        SpringApplication.run(HelloWorldController.class, args);
    }
}

运行HelloWorldController.java中的main方法,正常启出如下所示:

  在浏览器中输入如下url,运行结果如下所示:

3.SpringBoot第二种启动方式

   有多个Controller.java时,新建App.java,从App.java中写main方法启动服务。

App.java

package com.bijian.app;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;

@ComponentScan("com.bijian.controller")
@EnableAutoConfiguration
public class App {

    public static void main(String[] args) {
        //主函数运行Springboot项目
        SpringApplication.run(App.class, args);
    }
}

HelloWorldController.java

package com.bijian.controller;

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

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

//表示该接口全部都返回json格式
@RestController
public class HelloWorldController {

    @RequestMapping("/index")
    public String index() {
        return "success";
    }
    
    @RequestMapping("/getMap")
    public Map<String, Object> getMap() {
        Map<String, Object> result = new HashMap<String, Object>();
        result.put("errorCode", "200");
        result.put("errorMsg", "成功");
        return result;
    }
}

IndexController.java

package com.bijian.controller;

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

@RestController
public class IndexController {

    @RequestMapping("/indexController")
    public String indexController() {
        return "IndexController";
    }
}

   启动后,访问原来的url正常,访问http://localhost:8080/indexController也正常。

  附:@SpringBootApplication注解存在,在当前同级包下不用加任何框架注解了,它全部集成好了,这个在后面再讲。

4.SpringBoot访问静态资源

  在我们开发Web应用的时候,需要引用大量的js、css、图片等静态资源。
  默认配置:
  Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则:
  /static
  /public
  /resources
  /META-INF/resources
  举例:我们可以在src/main/resources/目录下创建static,在该位置放置一个图片文件。启动程序后,尝试访问http://localhost:8080/D.jpg,如能显示图片,配置成功。

   实例,在src/main/resources目录下新建static目录并拷贝pn.png,如下所示:

  启动服务,输入http://localhost:8080/pn.png,正常访问图片如下所示:(SpringBoot静态资源默认的目录是static,所以访问url无需加static,加static反而不可以正常访问,即http://localhost:8080/static/pn.png无法正常访问)

  动静分离,即后台服务与前台页面分离,静态资源CDN加速。

4.SpringBoot全局捕获异常

   IndexController.java增加1/0代码如下,运行时将会抛出运行时异常。

package com.bijian.controller;

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

@RestController
public class IndexController {

    @RequestMapping("/indexController")
    public String indexController() {
        int i=1/0;
        return "IndexController";
    }
}

  新增全局捕获异常类GlobalExceptionHandler.java

package com.bijian.controller;

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

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

//全局捕获异常类
@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(RuntimeException.class)
    @ResponseBody
    public Map<String, Object> resultError() {
        Map<String, Object> result = new HashMap<String, Object>();
        result.put("errorCode", "500");
        result.put("errorMsg", "系统错误");
        return result;
    }
}

  启动访问此url结果如下:

   全实现原理通过AOP机制,在方法之前做拦截,通过异常通知做通知管理。

5.SpringBoot整合FreeMarker

  渲染Web页面,即SpringBoot整合页面,SpringBoot优先模板引擎,不建议使用jsp。

  什么是模板引擎?springboot推荐,伪html格式,提高搜索引擎搜索,动态页面静态化。

  常用的模板引擎有freemark、velocity、Thymeleaf、Groovy、Mustache等。

pom.xml加入freemark依赖包

<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.bijian</groupId>
  <artifactId>springboot-helloworld</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <!-- 引入SpringBoot父类依赖  -->
  <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.3.3.RELEASE</version>
  </parent>
  <dependencies>
    <!-- springboot-web组件  springmvc+spring+mybatis -->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-freemarker</artifactId>
      </dependency>
  </dependencies>
</project>

  在src/main/resources下新建templates目录,并在其下面新建index.ftl

this is freemarker<br/>
${name}
<#if sex==1><#elseif sex==2><#else>
其他
</#if>
<#list userlist as user>
  ${user}
</#list>

  修改IndexController.java如下所示:

package com.bijian.controller;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

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

@Controller
public class IndexController {

    @RequestMapping("/indexController")
    public String indexController(Map<String, Object> result) {
        
        result.put("name", "springboot freemark");
        result.put("sex", 1);
        List<String> list = new ArrayList<String>();
        list.add("zhangsan");
        list.add("lisi");
        result.put("userlist", list);
        return "index";
    }
}

  运行结果如下所示:

  当然,Freemarker还有一些配置,在application.properties文件中,如下所示:

6.SpringBoot整合JSP视图

  SpringBoot整合JSP比较特殊,新建一个Maven工程,Packaging必须选择war,如下所示:

  项目结构如下所示:

pom.xml必须引入spring-boot-starter-tomcat、tomcat-embed-jasper,如下所示:

<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.bijian</groupId>
  <artifactId>springboot-jsp</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <!-- 引入SpringBoot父类依赖  -->
  <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>1.3.3.RELEASE</version>
  </parent>
  <dependencies>
    <!-- springboot-web组件  springmvc+spring+mybatis -->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <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>
  </dependencies>
</project>

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
   springboot整合jsp成功,注意(创建项目一定要为war类型)
</body>
</html>

application.properties

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

IndexController.java

package com.bijian.controller;

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

@Controller
public class IndexController {

    @RequestMapping("/index")
    public String index() {
        return "index";
    }
}

AppJsp.java

package com.bijian.app;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;

@ComponentScan("com.bijian.controller")
@EnableAutoConfiguration
public class AppJsp {

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

  运行AppJsp.java,打开页面结果如下所示:

7.SpringBoot整合使用JdbcTemplate

  

 

视频学习地址:https://ke.qq.com/course/260513

 

三大视频学习地址:

1.蚂蚁课堂:http://www.mayikt.com/front/showcoulist

2.腾讯课堂:https://ke.qq.com/

3.幕课网:https://www.imooc.com/

posted on 2018-06-19 22:09  bijian1013  阅读(248)  评论(0)    收藏  举报

导航