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