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项目及启动器讲解

  1. 使用maven构建springboot项目


2. 修改pom文件 设置jdk版本



1.8


3. 注入springboot启动坐标




org.springframework.boot



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 showHelloWorld() {

Map map = new HashMap<>();
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 方式一 FirstServlet
com.bjsxt.servlet.FirstServlet
FirstServlet
/first
*
@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方式一

FirstFilter
com.tjc.filter.FirstFilter


FirstFilter
/first

@author 陶佳成

/
//@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. 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 {
}

}
  1. 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

com.tjc.listener.FirstListener

*
@author taojiacheng

/
@WebListener
public class FirstListener implements ServletContextListener{

@Override
public void contextDestroyed(ServletContextEvent arg0) {

}

@Override
public void contextInitialized(ServletContextEvent arg0) {
System.
out**.println(“Listener—-init—-“);
}

}
  1. 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方式二
com.tjc.listener.FirstListener

@author taojiacheng

/
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 getServletListenerRegistrationBean(){
ServletListenerRegistrationBean bean = new 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 fileUpload(MultipartFile filename) throws IllegalStateException, IOException {
System.
out.println(filename.getOriginalFilename()); // 上传的文件名
filename.transferTo(
new File(“G:/“ + filename.getOriginalFilename())); // 文件的保存路劲以及文件名
Map map =
new HashMap();
map.put(“msg”, “ok”);
return map;
}
}
**

**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

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”>
4.0.0

org.springframework.boot
spring-boot-starter-parent
1.5.10.RELEASE

com.tjc
08-spring-boot-view-jsp
0.0.1-SNAPSHOT




1.8





org.springframework.boot
spring-boot-starter-web




javax.servlet
jstl




org.apache.tomcat.embed
tomcat-embed-jasper
provided




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 =
new ArrayList<>();
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”>


_"_>

















ID Name Age
${user.userid } ${user.username } ${user.userage }




**6.

/
SpringBoot启动类
@author taojiacheng

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


二. SpringBoot整合Freemarker

1.创建项目


2.修改pom,添加坐标

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”>
4.0.0

org.springframework.boot
spring-boot-starter-parent
1.5.10.RELEASE

com.tjc
09-spring-boot-view-framemarker
0.0.1-SNAPSHOT




1.8





org.springframework.boot
spring-boot-starter-web




org.springframework.boot
spring-boot-starter-freemarker




3. 编写视图
注意:SpringBoot要求模板形式的视图层技术的文件必须要放到src/main/resources目录下的templates文件夹中














<#list list as user>





</#list>
ID Name Age
${user.id} ${user.username} ${user.userage}



4. 创建Controller

@Controller
public class UserController {

@RequestMapping(“/showUser”)
public String showUser(Model model) {
List list = new ArrayList<>();
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坐标

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”>
4.0.0

org.springframework.boot
spring-boot-starter-parent
1.5.10.RELEASE

com.tjc
10-spring-boot-view-thymeleaf
0.0.1-SNAPSHOT




1.8





org.springframework.boot
spring-boot-starter-web




org.springframework.boot
spring-boot-starter-thymeleaf



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以上的版本



1.8

3.0.2.RELEASE
2.0.4



3. Thymeleaf语法详解

3.1变量输出与字符串操作
3.1.1 th:text

th:text 在页面当中输出某个值
  1. **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