u1 springboot入门
一. SpringBoot介绍
1.如果使用spring开发一个“helloworld”的web应用
1.1创建一个web项目并且导相关的jar
1.2创建一个web.xml
1.3编写一个控制类controller
1.4部署一个web应用的服务器
2. springboot特点
2.1 springboot设计目的是为了简化新spring应用的初始搭建以及开发过程
2.2嵌入式tomcat,无需部署WAR文件
2.3 springboot 并不是对spring功能上的增强,而是提供一种快速使用spring的方式
二. 构建SpringBoot项目及启动器讲解
- 使用maven构建springboot项目
2. 修改pom文件 设置jdk版本
3. 注入springboot启动坐标
4.springboot启动器
其实就是一些jar包集合,springboot一共提供了44个启动器。
4.1 spring-boot-starter-web
支持全栈式的web开发,包括了tomcat和springmvc等jar
4.2 spring-boot-starter-jdbc
支持spring以jdbc方式操作数据库的jar包的集合
4.3 spring-boot-starter-redis
支持redis键值存储的数据库的操作
三. SpringBoot入门HelloWorld
1.编写返回Helloworld的Controller
@Controller public class HelloWorld { @RequestMapping(“/hello”) @ResponseBody public Map Map map.put(“msg”, “HelloWorld”); return map; } } |
---|
2. 启动SrpingBoot 编写启动类
/ SpringBoot启动类 @author taojiacheng / @SpringBootApplication public class App { public static void main(String[] args) { / 一个参数是当前类的.class,另一个参数是main传来的参数args / SpringApplication.run(App.class, args); } } |
---|
3. 关于编写启动器时需要注意的问题
启动器存放的位置:启动器可以和controller位于同一个包下,或者位于controller的上一级包中,但是不能放到controller的平级以及子包下。
U2 SpringBoot整合WEB开发
一. 整合servlet
1.通过注解扫描完成Servlet组件的注册
1.1编写servlet
/ SpringBoot 整合 Servlet 方式一 * @author 陶佳成 */ @WebServlet(name = “FirstServlet”, urlPatterns = “/first”) public class FirstServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super**.doGet(req, resp); } } |
---|
1.2.通过方法完成Servlet组件的注册
/ SpringBoot整合Servlet方式一 * @author 陶佳成 / @SpringBootApplication @ServletComponentScan // 在springboot启动时会扫描@webservlet,并将该类实例化 public class App { public static void main(String[] args) { SpringApplication.run(App.class**, args); } } |
---|
2.通过方法完成Servlet组件的注册
2.1 编写servlet
/ SpringBoot整合servlet方式二 @author 陶佳成 / public class SecondServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out**.println(“SecondServlet”); } } |
---|
2.2 编写启动类
@SpringBootApplication public class App2 { public static void main(String[] args) { SpringApplication.run(App2.class, args); } @Bean public ServletRegistrationBean getServletRegistrationBean() { ServletRegistrationBean bean = new ServletRegistrationBean(new SecondServlet()); bean.addUrlMappings(“/second”); return bean; } } |
---|
二. 整合Filter
1. 通过注解扫描完成Filter组件注册
1.1 编写Filter
/ SpringBoot整合Filter方式一 / //@WebFilter(filterName=”FirstFilter”,urlPatterns={“.do”,”.jsp”}) @WebFilter(filterName=”FirstFilter”,urlPatterns=”/first”) public class FirstFilter implements Filter{ @Override public void destroy() { } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { System.out.println(“进入Filter”); arg2.doFilter(arg0, arg1); System.out.println(“离开Filter”); } @Override public void init(FilterConfig arg0) throws** ServletException { } } |
---|
1.2编写启动类
/ SpringBoot整合Filter方式一 * @author 陶佳成 / @SpringBootApplication @ServletComponentScan public class App { public static void main(String[] args) { SpringApplication.run(App.class**, args); } } |
---|
2. 通过方法完成Filter组件注册
2.1 编写Filter
/ SpringBoot整合Filter方式二 @author 陶佳成 / public class SecondFilter implements Filter{ @Override public void destroy() { } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { System.out.println(“进入Filter”); arg2.doFilter(arg0, arg1); System.out.println(“离开Filter”); } @Override public void init(FilterConfig arg0) throws** ServletException { } } |
---|
2.2编写启动类
/ SpringBoot整合Filter方式二 * @author 陶佳成 / @SpringBootApplication public class App2 { public static void main(String[] args) { SpringApplication.run(App2.class, args); } @Bean public FilterRegistrationBean getFilterRegistrationBean() { FilterRegistrationBean bean = new FilterRegistrationBean(new SecondFilter()); // bean.addUrlPatterns(new String[] {“.do”,”.jsp”}); bean.addUrlPatterns(“/second”); return** bean; } } |
---|
三. 整合Listener
1.通过注解扫描完成Listerner组件的注册
1. 编写Listener
/ SpringBoot整合Listener * / @WebListener public class FirstListener implements ServletContextListener{ @Override public void contextDestroyed(ServletContextEvent arg0) { } @Override public void contextInitialized(ServletContextEvent arg0) { System.out**.println(“Listener—-init—-“); } } |
---|
1.2编写启动类
@SpringBootApplication @ServletComponentScan public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } } |
---|
2. 通过方法完成Listener组件注册
2.1 编写Listener
/ SpringBoot整合Listener方式二 / public class SecondListener implements ServletContextListener { @Override public void contextDestroyed(ServletContextEvent arg0) { } @Override public void contextInitialized(ServletContextEvent arg0) { System.out**.println(“SecondListener—-init——“); } } |
---|
2.2编写启动类
/ SpringBoot整合Listener方式二 @author taojiacheng */ @SpringBootApplication public class App2 { public static void main(String[] args) { SpringApplication.run(App2.class, args); } / 注册listener / public ServletListenerRegistrationBean ServletListenerRegistrationBean return bean; } } |
---|
四. 访问静态资源
1. SpringBoot从classpath/static
注意:目录名称必须为static
http://localhost:8080/image/a.pnghttp://localhost:8080/index.html
2. ServletContext
在src/main/webapp 目录名称必须叫webapp
http://localhost:8080/image/a.png http://localhost:8080/index.html
五. 文件上传
1.编写Controller
/ springboot文件上传 * @author taojiacheng */ //@Controller @RestController // 表示该类下的方法的返回值都会做json格式的转换,相当于给每个方法添加了@ResponseBody public class FileUploadController { / 文件上传 */ @RequestMapping(“/fileUploadController”) public Map System.out.println(filename.getOriginalFilename()); // 上传的文件名 filename.transferTo(new File(“G:/“ + filename.getOriginalFilename())); // 文件的保存路劲以及文件名 Map map.put(“msg”, “ok”); } } ** |
---|
**2.
@SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } } |
---|
3.
**3.1 在src/main/sources 文件夹中新建application.properties
# single File Size spring.http.multipart.maxFileSize=200MB # total Size spring.http.multipart.maxRequestSize=200MB |
---|
**4.
<!DOCTYPE html> enctype=“multipart/form-data”> 上传文件 value=“__提交” /> |
---|
U3 SpringBoot整合视图层技术
一. SpringBoot整合jsp技术(springboot已经不推荐使用jsp)
**1.
**2. 修改pom
xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”> |
---|
3. 创建springboot的全局配置文件 application.properties
# the same as ViewResolver spring.mvc.view.prefix=/WEB-INF/jsp/ spring.mvc.view.suffix=.jsp |
---|
4. 创建Controller
/ SpringBoot整合jsp * @author taojiacheng / @Controller public class UserController { / 处理请求,产生数据 */ @RequestMapping(“/showUser”) public String showUser(Model model) { List list.add(new Users(1, “张三”, 20)); list.add(new Users(2, “李四”, 22)); list.add(new Users(3, “王五”, 24)); // 需要一个Model对象 model.addAttribute(“list”, list); // 跳转视图 return** “userlist”; } } |
---|
5. 创建jsp
<%@ page language=“java” import=“java.util.*” pageEncoding=“ISO-8859-1”%> <% String path = request.getContextPath(); String basePath = request.getScheme() + “://“ + request.getServerName() + “:” + request.getServerPort() + path + “/“; %> <%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core“%> <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
|
||||||
---|---|---|---|---|---|---|
**6.
/ SpringBoot启动类 @author taojiacheng / @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class**, args); } } |
---|
二. SpringBoot整合Freemarker
1.创建项目
2.修改pom,添加坐标
xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”> |
---|
3. 编写视图
注意:SpringBoot要求模板形式的视图层技术的文件必须要放到src/main/resources目录下的templates文件夹中
<#list list as user> </#list>
|
||||||
---|---|---|---|---|---|---|
4. 创建Controller
@Controller public class UserController { @RequestMapping(“/showUser”) public String showUser(Model model) { List list.add(new Users(1,”张三”,20)); list.add(new Users(2,”李四”,22)); list.add(new Users(3,”王五”,24)); //需要一个Model对象 model.addAttribute(“list”,list); //跳转视图 return “userList”; } } |
---|
5. 创建启动器
/ * @author 陶佳成 */ @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } } ** |
---|
三. SpringBoot 整合Thymeleaf(重点)
1.创建Thymeleaf的入门项目
1.1创建项目
1.2修改pom.xml文件,添加thymeleaf坐标
xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”> |
---|
1.3 创建存放视图的目录
目录位置src/main/resources/templates(模板形式的视图层资源都放在这里)
templates:该目录是安全的。意味着该目录下的内容是不允许外界直接访问的
2.Thymeleaf的基本使用
2.1 Thymeleaf特点:
Thymeleaf是通过特定的语法对html的标记做渲染
2.2编写 Controller
/ Themeleaf入门案例 * @author 陶佳成 / @Controller public class DemoController { @RequestMapping(“/show”) public ModelAndView showInfo() { ModelAndView mav = new ModelAndView(“index”); //对应templates中的index.html mav.addObject(“msg”, “Themeleaf第一个案例”); return** mav; } } |
---|
2.3创建视图 .html;
<!DOCTYPE html> |
---|
2.4编写启动类
/ Thymeleaf入门案例 @author 陶佳成 / @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class**, args); } } |
---|
2.5解决异常
2.5.1解决异常方式1
让html的标记按照严谨的语法编写
2.5.2解决异常方式2
更换thymeleaf的jar的版本
Thymeleaf更新为3.0以上的版本
Thymeleaf-layout-dialect.jar更新为2.0以上的版本
3. Thymeleaf语法详解
3.1变量输出与字符串操作
3.1.1 th:text
th:text | 在页面当中输出某个值 |
---|---|
**3.1.2 th:value**
th:value | 可以将一个值放入input标签的value中 |
---|---|
3.1.3 判断字符串是否为空
thymeleaf内置对象
注意语法:
1. 调用内置对象一定要加 #
2. 大部分的内置对象都以s结尾,strings,numbers,dates等
判断字符串是否为空,如果为空返回true,否则返回false |
判断字符串是否包含指定的字串,如果包含返回true,否则返回false |
判断当前字符串是否以字串开头,如果是返回true,不是返回false |
判断当前字符串是否以字串结尾,如果是返回true,不是返回false |
返回字符串的长度 |
返回子字符串的位置,返回该字串的下标,如果没找到返回-1 |
1: 2: |
截取子串,1.从12截取到最后,2:从1截取到4(包前不包后) 与jdk String下subString方法相同 |
字符串的大小写转换 |
3.2日期格式化处理
格式化日期,默认以浏览器默认语言为格式化标准 |
按照自定义的格式做日期转换 |
年: 月: 日: |
分别按照年月日取值 |
3.3条件判断
3.4迭代遍历
3.5域对象操作
3.6 URL表达式
u4 springboot 整合持久层技术
**1. 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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.10.RELEASE</version> </parent> <groupId>com.tjc</groupId> <artifactId>resource</artifactId> <version>0.0.1-SNAPSHOT</version> <build/> <properties> <json.version>1.8</json.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.thetransactioncompany</groupId> <artifactId>cors-filter</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.9</version> </dependency> </dependencies> </project> |
---|
**2. 添加application.properties
| server.port=10111
#配置数据库驱动连接
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/manage
spring.datasource.username=root
spring.datasource.password=123456
#数据源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#mybatis实体类别名
mybatis.type-aliases-package=com.tjc.pojo** ** |
| —- |
**3.
create table NEWS_LIST( STATUS VARCHAR(1) COMMENT “状态标记”, ID VARCHAR(20) PRIMARY KEY COMMENT “ID”, TITLE VARCHAR(100) COMMENT “标题”, ADD_TIME DATE COMMENT “添加时间”, SUMMARY VARCHAR(200) COMMENT “摘要”, CLICK VARCHAR(30) COMMENT “点击数”, IMG_URL VARCHAR(200) COMMENT “图片路径” ) |
---|
**4.
| package com.tjc.mapper;
import com.tjc.pojo.Users;
import org.springframework.stereotype.Repository;
@Repository/springboot2引入的注解/
public interface UsersMapper {
int insUser(Users users);
} |
| —- |
| <?xml version=”1.0” encoding=”UTF-8” ?> <!DOCTYPE mapper PUBLIC “-//mybatis.org//DTD Mapper 3.0//EN”
“http://mybatis.org/dtd/mybatis-3-mapper.dtd"_> _
<mapper namespace=”com.tjc.mapper.UsersMapper”>
<insert id=”insUser” parameterType=”users”>
insert into users(name,age) values(#{name},#{age})
</insert>
</mapper> |
**3.
| package com.tjc.service.impl;
import com.tjc.mapper.UsersMapper;
import com.tjc.pojo.Users;
import com.tjc.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional/表示在这个类下的所有方法都受事物的控制/
public class UsersServiceImpl implements UsersService {
@Autowired
private UsersMapper usersMapper;
@Override
public int addUser(Users users) {
return this.usersMapper.insUser(users);
}
} |
| —- |
**5.
| package com.tjc;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan(“com.tjc.mapper”)/用于扫描mybatis的mapper接口,根据扫描后的接口生成代理对象/
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
} |
| —- |
注意:
使用idea时,需要将 .xml文件放在resource
**application.properties
| server.port=10111
#配置数据库驱动连接
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/manage?useunicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
#数据源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#mybatis实体类别名
mybatis.type-aliases-package=com.tjc.pojo
#指定.xml文件位置
mybatis.mapper-locations=classpath:mybatis/mapper/.xml* ** |
| —- |
**.xml