Spring Boot底层原理详解及整合

Spring Boot框架

通过Spring Boot 可以构建一个基于Spring框架的Java Application,简化配置,自动装配开箱即用

JavaConfiguration用Java类代替XML的配置方式

Spring Boot对常用的第三方库提供了配置方案,可以很好的和Spring进行整合,一键式搭建功能完备的Java企业级应用,Spring Boot是Java领域的第一框架

Spring Boot

1.创建Spring Boot工程,全部点击菜单操作,不需要手动写配置

2.没有任何XML文件,除了pom.xml,只需要配置数据源YML

3、Controller – > Service -->Repository

4、运行 Application (Spring Boot 内嵌了 Tomcat)IDEA 工程无法读取 java 路径下的 XML 文件,修改 pom.xml 允许读取 java 路径下的 XMLSpring Boot 的功能就是在完成业务的情况下,极大的简化代码的开发写更少的代码,实现更多的功能。

Spring Boot优势:

  • 不需要任何XML配置文件
  • 内嵌Tomcat,可以直接部署
  • 默认支持JSON数据,不需要进行替换
  • 支持RESTFUL
  • 配置文件非常简单,支持YAML格式

Spring Boot是一种只需要极少配置就可以快速搭建Spring应用,并集成了常用第三方类库,让开发者快速进行企业级应用开发

Spring Boot的使用

1.创建Handler

package com.wdzl.springboot.controller;

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

@RestController
@RequestMapping("/hello")
public class HelloHandler {
   
    @GetMapping("/index")
    public String index(){
   
        return "Hello SpringBoot";
    }
}

2.创建启动类

package com.wdzl.springboot;

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

@SpringBootApplication
public class SpringbootApplication {
   

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

}

注意:启动类必须覆盖所有与业务相关的类:启动类所在的包必须是业务类的同包或者父包,如果没有覆盖,业务类就不会自动装配到IOC容器中

Spring Boot整合JSP

Spring Boot与视图层整合

  • JSP
  • Thymeleaf

Java Server Page,是Java提供的一种动态网页技术,底层是Servlet,可以直接在HTML中插入java代码

JSP底层原理:

JSP是一种中间层组件,开发者可以在这个组件中将Java代码与HTML代码进行整合,由JSP引擎将组件转为Servlet,再把开发者定义在组件中的混合代码翻译成Servlet的响应语句,输出给客户端

1.创建基于Maven的Web工程,pom.xml

<parent>
    <artifactId>spring-boot-starter-parent</artifactId>
    <groupId>org.springframework.boot</groupId>
    <version>2.4.5</version>
  </parent>

  <dependencies>

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

    <dependency>
      <groupId>org.apache.tomcat.embed</groupId>
      <artifactId>tomcat-embed-jasper</artifactId>

    </dependency>

2.创建Handler

package com.wdzl.controller;

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

@Controller
@RequestMapping("/hello")
public class HelloHandler {
   

    @GetMapping("/index")
    public ModelAndView index(){
   
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("index");
        modelAndView.addObject("mess","hellospringboot");
        return modelAndView;
    }
}

3.创建JSP

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
    
</head>
<body>
  <h1>Index</h1>
   ${mess}
</body>
</html>

4.创建application.yml配置文件

spring:
  mvc:
    view:
      prefix: /
      suffix: .jsp

5.创建Application启动类

package com.wdzl;

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

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

实际应用

JSTL

1.pom.xml

  <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.10</version>
    </dependency>

Lombok的功能是简化实体类代码的编写工作,常用方法getter,setter,toString等方法都可以由Lombok自动生成,不需要开发者手动编写 ,在idea中下载插件:setting中Plugins中搜索Lombok下载即可

2.创建实体类

package com.wdzl.entity;


import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class User {
   
   private Integer id;
   private String name;
}

3.创建业务方法,返回业务对象

package com.wdzl.controller;

import com.wdzl.entity.User;
import com.wdzl.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.Arrays;
import java.util.List;

@Controller
@RequestMapping("/user")
public class UserHandler {
   
    @Autowired
    private UserService userService;

    @GetMapping("/find")
    public ModelAndView find(){
   
        User user1=new User(1,"赵童");
        User user2=new User(2,"唐康");
        User user3=new User(3,"王必武");
        List<User> List = Arrays.asList(user1, user2, user3);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("index");
        modelAndView.addObject("list",List);
        return modelAndView;
    }

    @GetMapping("/findAll")
    public ModelAndView findAll(){
   
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("index");
        modelAndView.addObject("list",userService.findAll());
        return modelAndView;
    }

    @GetMapping("/findById/{id}")
    public ModelAndView findById(@PathVariable("id") Integer id){
   
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("update");
        modelAndView.addObject("user",userService.findById(id));
        return modelAndView;
    }

    @PostMapping("/save")
    public String save(User user){
   
        userService.save(user);
        return "redirect:/user/findAll";
    }

    @GetMapping("/deleteById/{id}")
    public String deleteById(@PathVariable("id") Integer id){
   
        userService.deleteById(id);
        return "redirect:/user/findAll";
    }

    @PostMapping("/update")
    public String update(User user){
   
        userService.update(user);
        return "redirect:/user/findAll";
    }




}

JSP

​ index.jsp

<%--
  Created by IntelliJ IDEA.
  User: 14355
  Date: 2021/5/7
  Time: 17:30
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
    <title>Title</title>

</head>
<body>
  <h1>Index</h1>
   ${mess}

<table>
    <tr>
        <th>编号</th>
        <th>姓名</th>
        <th>操作</th>
    </tr>
    <c:forEach items="${list2}" var="user">
        <tr>
            <td>${user.id}</td>
            <td>${user.name}</td>
            <td>
                <a href="/user/deleteById/${user.id}">删除</a>
                <a href="/user/findById/${user.id}">修改</a>
            </td>
        </tr>
    </c:forEach>
</table>
</body>
</html>

​ save.jsp

<%--
  Created by IntelliJ IDEA.
  User: 14355
  Date: 2021/5/7
  Time: 19:03
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java"  %>
<html>
<head>
    <title>Title</title>
    <!-- Bootstrap -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
    <!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
    <script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
    <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
</head>
<body>
<form action="/user/save" method="post">
    编号 <input type="text" name="id"><br/>
    姓名 <input type="text" name="name"><br/>
    提交 <input type="submit"/>
</form>
</body>
</html>

​ update.jsp

<%--
  Created by IntelliJ IDEA.
  User: 14355
  Date: 2021/5/7
  Time: 19:07
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
    <!-- Bootstrap -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
    <!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
    <script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
    <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
</head>
<body>
<form action="/user/update" method="post" >
    编号 <input type="text" name="id" value="${user.id}" readonly><br/>
    姓名 <input type="text" name="name" value="${user.name}"><br/>
    提交 <input type="submit"/>
</form>
</body>
</html>

Respository类

​ 接口

package com.wdzl.repository;

import com.wdzl.entity.User;

import java.util.Collection;

public interface UserRepository {
   
    public Collection<User> findAll();
    public User findById(Integer id);
    public void save(User user);
    public void deleteById(Integer id);
    public void update(User user);

}

​ 实现类

package com.wdzl.repository.impl;

import com.wdzl.entity.User;
import com.wdzl.repository.UserRepository;
import org.springframework.stereotype.Repository;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
@Repository
public class UserRepositoryImpl implements UserRepository {
   

    private static Map<Integer,User> map;
    static {
   
        map=new HashMap<>();
        map.put(1,new User(1,"赵童"));
        map.put(2,new User(2,"唐康"));
        map.put(3,new User(3,"王必武"));
    }

    @Override
    public Collection<User> findAll() {
   
        return map.values();
    }

    @Override
    public User findById(Integer id) {
   
        return map.get(id);
    }

    @Override
    public void save(User user) {
   
        map.put(user.getId(),user);

    }

    @Override
    public void deleteById(Integer id) {
   
        map.remove(id);

    }

    @Override
    public void update(User user) {
   
        map.put(user.getId(),user);

    }
}

Service类

​ 接口

package com.wdzl.service;

import com.wdzl.entity.User;

import java.util.Collection;

public interface UserService {
   
    public Collection<User> findAll();
    public User findById(Integer id);
    public void save(User user);
    public void deleteById(Integer id);
    public void update(User user);

}

​ 实现

package com.wdzl.service.impl;

import com.wdzl.entity.User;
import com.wdzl.repository.UserRepository;
import com.wdzl.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Collection;
@Service
public class UserServiceImpl implements UserService {
   

    @Autowired
    private UserRepository userRepository;

    @Override
    public Collection<User> findAll() {
   
        return userRepository.findAll();
    }

    @Override
    public User findById(Integer id) {
   
        return userRepository.findById(id);
    }

    @Override
    public void save(User user) {
   
        userRepository.save(user);

    }

    @Override
    public void deleteById(Integer id) {
   
        userRepository.deleteById(id);

    }

    @Override
    public void update(User user) {
   
        userRepository.update(user);

    }
}

Spring Boot整合Theymeleaf

Thymeleaf是目前较为流行的视图层技术,Spring BootguanfangtuijianshiyongThymeleaf

什么是Thymeleaf

Thymeleaf是一个支持HTML文件的Java模板,可以实现前后端分离的交互方式,即视图层与业务数据分开响应,它可以直接将服务器返回的数据生成HTML文件,同时也可以处理XML,JavaScript,CSS等格式。

Thyemleaf最大的特点是既可以在浏览器打开(静态方式),也可以结合服务器端将业务数据填充到HTML之后动态生成页面(动态方式)

如何使用

1.创建Maven工程,不需要创建web工程

<parent>
        <artifactId>spring-boot-starter-web</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.4.5</version>
    </parent>

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

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

2.application.yml

spring:  thymeleaf:    prefix: classpath:/templates/ #模板路径    suffix: .html #模板后缀    servlet:      content-type: test/html #设置书写格式      encoding: UTF-8 #编码方式      mode: HTML5 #校验H5格式      cache: #关闭缓存,修改后可以立即看到修改结果

3.创建Handler

package com.wdzl.controller;

import org.springframework.stereotype.Controller;
import org
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值