springBoot入门_csdn博客 zhiyikeji-程序员宅基地

技术标签: 框架  

springBoot入门到精通

1.springBoot前期准备

  • 1.环境配置:jdk,maven
  • 2.编写工具:sts(Spring Tool Suite)
  • 3.在sts里面配置maven
    以上百度自行解决

2.使用springBoot APi自动创建第一个maven项目

  • 1.进入这个网址:https://start.spring.io/
  • 2.进行如下配置:点击查看
  • 3.下载好刚刚创建的Maven项目止之后进行导入:
    右单击->import->maven->exsiting Maven projects->选中项目文件夹 点击导入即可

判断是否导入成功的标志是:

打开java目录下的.java文件,运行,控制台出现以下内容即视为导入成功 点击查看运行结果

下面讲一下创建的项目每一个文件夹所存放以及用于存放的内容

springBoot运行程序时如果发现端口号被占用的问题,请参考文档
如果在浏览器上运行时出现:
Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Tue Jun 30 17:24:02 CST 2015 There was an unexpected error (type=Not Found, status=404). No message available

     
     
      
     
     
      
  • 1

那么就是因为你所创建的包不在springboot的主配置类所在包内,点击查看详情

  • 什么叫做springboot的主配置类

    含有注解@SpringBootApplication的类,比如默认创建好的主配置类是这样子的:

package com.test.HelloWord;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HelloWordApplication {
	public static void main(String[] args) {
		SpringApplication.run(HelloWordApplication.class, args);
	}
}

     
     
      
     
     
      
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

要想使用注解,创建的包必须全部在package com.test.HelloWord内部

举一个例子

  • 有效的包名:package com.test.HelloWord.controller;
  • 无效的包名:package com.test.controller;
下面讲一下常见的一些注解:
  • @SpringBootApplication:springboot的主配置类,该注解包含:

1.@SpringBootConfiguration ------- 2. @EnableAutoConfiguration

1.@SpringBootConfiguration

这个注解又包含:

@Configuration,它表示配置类:

  • 该类是一个配置类
  • 加了这个注解会自动放入spring 容器
  1. @EnableAutoConfiguration:使用springBoot可以自动配置,摆脱了ssm中使用spring.xml,mybatis.xml,以及springmvc.xml文件配置的繁琐,工作原理就是就是找到主配置类所在的包,并将该包以及所在的子包纳入控制器

spring 在启动时会根据D:\MAVENRes\org\springframework\boot\spring-boot-autoconfigure\2.1.0.RELEASE\spring-boot-autoconfigure-2.1.0.RELEASE.jar下面的/META-INF/spring.factories自动加载第三方jar包

@Conditional注解:

  • @ConditionalOnBean(仅仅在当前上下文中存在某个对象时,才会实例化一个Bean)
  • @ConditionalOnClass(某个class位于类路径上,才会实例化一个Bean)
  • @ConditionalOnExpression(当表达式为true的时候,才会实例化一个Bean)
  • @ConditionalOnMissingBean(仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean)
  • @ConditionalOnMissingClass(某个class类路径上不存在的时候,才会实例化一个Bean)
  • @ConditionalOnNotWebApplication(不是web应用)
  • 更多注解请参考 @Controller扩展注解

如何知道系统中开启了那些自动装配,或者禁止了哪些自动装配

在application.properties加入debug=true即可

  • Positive matches:中包含了所有开启的配置
  • Negative matches:中包含了所有未开启的配置

3.配置文件以及ymls使用

1.配置文件的作用:就是对默认的配置进行修改

2.默认的全局配置文件:

  • 1.application.properties 如何使用:key=value的形式
  • 2.application.yml key:空格value(注意yml不是文本标记语言,什么是文本标记语言:xml文件就是文本标记语言,因为xml文件符合下面这种格式:)
<server>
    <port>8888</port>
    </server>

     
     
      
     
     
      
  • 1
  • 2
  • 3

而yml如何实现更改端口,参考下面代码:

server:
       port: 8888   注意‘:’与8888之间存在空格

     
     
      
     
     
      
  • 1
  • 2

要注意port要与server垂直对齐

3.具体如何修改默认配置举一个小例子:

默认端口是8080,如果我想修改成其他的端口号只需要这步操作即可:
server.port=8081,只需要这一句话即可以把端口号改为8081

     
     
      
     
     
      
  • 1
  • 2

4.在yml文件中对象属性进行操作:

直接看代码:

package com.test.HelloWord.po;
@Component//作用是将此bean放入spring容器
@ConfigurationProperties(prefix="StudentPo")//作用是将StudentPo能够被yml文件识别,并能对其进行属性的注入
public class StudentPo {
	private String name;
	private int age;
	private boolean sex;
	private Data birthday;
	private Map<String, Object> location;
	private String hobbbies[];
	private List<String> skills;
	private PetPo pet;
	此处省略构造函数以及get set方法
}

     
     
      
     
     
      
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

而yml文件中的内容如下:

StudentPo:
 name: zx
 age: 21
 sex: true 
 birthday: 2018/11/21
 location: {province: 江苏省,city: 南京市,zone: 玄武区}//注:这种是对map函数的赋值方法,此处虽然没有加引号,但是如果字段里面有转意符,比如\n,\t等,要想使转意生效,就必须加双引号
 hobbbies: 
  - 唱歌
  - 运动         //这种是对数组进行赋值的方法
 skills:
  - 计算机
  - 软件开发    //这种是对数组进行赋值的方法
 pet:
  nickName: luckliy
  strain: 哈士奇      //这种是对属性为对象的赋值方法

     
     
      
     
     
      
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

测试语句如下:

@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloWordApplicationTests {
	@Autowired
	StudentPo stu;//由于已经将student加上注解:@Component//作用是将此bean放入spring容器,所以可以进行自动注入
	@Test
	public void contextLoads() {
		System.out.println(stu.toString());
	}

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

4.yml通过@ConfigurationProperties 和@Value方式注入值

  • @ConfigurationProperties:是为了能够让配置文件识别这个对象
  • @Value:是给单个属性赋值
    @Value用法:
public class StudentPo {
	@Value("zx")//加上这条注解之后name的值就变为zx
	private String name;
	@Value("23")//age就变为23
	private int age;
	}

 
 
  
 
 
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
# @ConfigurationProperties @Value
注值 批量注入 单个
spEL 不支持 支持
JSR303 支持 不支持
注入复杂类型 支持 不支持

复杂类型:除了(8个基本类型,String,Date类型以外的都是复杂类型)

下面重点讲解一下JSR303校验的用法:

@Component//作用是将此bean放入spring容器
@ConfigurationProperties(prefix="student")//作用是将StudentPo能够被yml文件识别,并能对其进行属性的注入
@Validated//开启jsr303数据校验
public class StudentPo {
	@Email
	private String emial
	}

 
 
  
 
 
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

通过注解@PropertySource来加载不是默认配置文件的文件,注:默认配置文件只有两种:

  • application.properties
  • application.yml
  • 除此之外都不是默认配置文件
    具体如何使用@PropertySource,参考下面代码

先看看conf.properties

student.age=66

 
 
  
 
 
  
  • 1

再接着看如何使用:

@Component//作用是将此bean放入spring容器
@ConfigurationProperties(prefix="student")//作用是将StudentPo能够被yml文件识别,并能对其进行属性的注入
@Validated//开启jsr303数据校验
@PropertySource(value= {"classpath:conf.properties"})//作用是引入配置文件
public class StudentPo {
	private int age
	}

 
 
  
 
 
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

但是这个注解有个缺陷就是仅支持.properties文件

5.@ImportResource,配置类 ,占位符表达式

1.@ImportResource的使用:

  • 用于引入xml配置文件,由于springBoot已经帮我们配置好了类似于spring.xml类型的配置文件,所以当我们直接获取spring容器时就会出现错误,但是如果我们就是想使用自己的配置文件,此时只有在主程序中加入@ImportResource注解,详情如下:
@SpringBootApplication
@ImportResource({"classpath:spring.xml"})//此处是新加入的
public class HelloWordApplication {
	public static void main(String[] args) {
		SpringApplication.run(HelloWordApplication.class, args);
	}
}

 
 
  
 
 
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

具体如何调用这个xml文件,我们先看看这个xml文件的内容:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="
   http://www.springframework.org/schema/beans 
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/aop 
   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
   http://www.springframework.org/schema/tx 
   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
   http://www.springframework.org/schema/context      
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">
	<bean id="PetPo" class="com.test.HelloWord.po.PetPo">
	<property name="nickName" value="zhuxu"></property>
	<property name="strain" value="哈士奇"></property>
	</bean>
</beans>

 
 
  
 
 
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

对应的PetPo对象:

package com.test.HelloWord.po;

public class PetPo {
private String nickName;
private String strain;
对应的get set方法已经省略,但是一定要加进去,否则属性就无法注入
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

对应的测试程序:

@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloWordApplicationTests {
	@Autowired
	ApplicationContext ac;//此处是为了获取spring容器
	@Test
	public void test1() {
		PetPo petPo= (PetPo)ac.getBean("PetPo");
		System.out.println(petPo.toString());
	}}

 
 
  
 
 
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

但是并不推荐这种方式进行属性的注入,太麻烦,推荐使用配置类

2.配置类

配置类就是配置文件(.xml文件)配上注解的形式,如何创建配置类:

  • 在原来普通的类的基础上加上注解:@Configuration
  • 但是一般配置类要和@Bean同时使用,@Bean就是为了能够像spring.xml中标签一样,能够创建多个
    具体怎么使用参考下面代码:
@Configuration//加上他之后这个类就是配置类
public class AppConfig {
	@Bean//加上它之后就相当于创建了一个<bean></bean>标签
	public PetPo ppp() {/*ppp相当于<bean id="" class=""></bean>中的id*/
		PetPo p=new PetPo();
		return p;
	/*返回的结果类型就相当于<bean id="" class=""></bean>中的class*/
	}
}

 
 
  
 
 
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

下面写一个测试方法自己感受一下

@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloWordApplicationTests {
	@Autowired
	ApplicationContext ac;//此处是为了获取spring容器
	@Test
	public void test1() {
		PetPo petPo= (PetPo)ac.getBean("p");
		System.out.println(petPo.toString());
	}
}

 
 
  
 
 
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

3.占位符表达式

student.age=${}

 
 
  
 
 
  
  • 1

6.springBoot多环境设置及切换

  • 默认情况下boot会读取application.propertiesh环境下的端口
  • 多个环境:application-环境名.properties,比如:
application-dev.properties
application-test.properties

 
 
  
 
 
  
  • 1
  • 2

至于具体怎么切换:就是在主配置文件(application.properties)中加入:

spring.profiles.active=dev

 
 
  
 
 
  
  • 1

表示切换到dev下的端口环境

通过yml文件切换环境:

server:
  port: 1234
---
server:
  port: 8880
spring:
  profiles: dev//用于声明环境名为dev
---
server:
  port: 8881
spring:
  profiles: test  //用于声明环境名test

 
 
  
 
 
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

这样的话就创建好了三个环境,但是至于使用哪一个环境,就得使用这样的配置:

在主端口中这样声明:
server:
  port: 1234
spring:
  profiles:
    active: dev    //切换到端口到dev环境

 
 
  
 
 
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

如何动态切换环境:

  • 1.使用命令行:
右单击 ->Run As->RunConfigurations->Arguments->在里面输入--spring.profiles.active=环境名
比如:--spring.profiles.active=dev

 
 
  
 
 
  
  • 1
  • 2
  • 2.打成jar在cmd里面执行,下面先讲解一下如何打成jar包
右单击项目->Run As->maven build,进入之后在package即可

 
 
  
 
 
  
  • 1

下面再接着叙述如何在cmd中运行打成的jar包

  • 进入cmd
  • 先进入这个jar包所在的目录 然后输入指令
java -jar HelloWord-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

 
 
  
 
 
  
  • 1
  • 3.通过jvm参数指定
右单击 ->Run As->RunConfigurations->Java Application->HellowdApplication(此处为项目名,项目不同名字也不一样)->右边的Argument,
输入 -Dspring.profiles.active=dev

 
 
  
 
 
  
  • 1
  • 2

7.SpringBoot配置文件位置

springBoot能够默认读取的文件有两种,一个是application.properties以及application.yml文件
但是这两个文件可以存放在哪一个位置,就是在

  • file:项目根目录/config
  • file:项目根目录
  • classpath:项目根目录/config
  • classpath:项目根目录
    file与classpath的区别就是
  • file指普通目录
  • classpath指构建路径(构建路径的文件夹上面有一个小标识)
    如果项目配置冲突,优先级从上往下

8.外部配置文件以及加载顺序问题

配置项目运行名

在主配置文件application.properties中加入:

server.servlet.context-path=/springBoot

 
 
  
 
 
  
  • 1

注意:此处的springBoot就是新加入的项目名,在未加入之前访问是这样的:

http://localhost:8888/HelloWord?name=zhuxu

 
 
  
 
 
  
  • 1

加了之后就变成了这样的:

http://localhost:8888/springBoot/HelloWord?name=zhuxu

 
 
  
 
 
  
  • 1

如何使用外部的配置文件

比如说在我的这个路径下C:\Users\17732\Desktop\test\application.properties有一个application.properties文件,那么怎么使用里面的配置:

右单击 ->Run As->RunConfigurations->Arguments->在里面输入--spring.config.location=路径名
比如:--spring.config.location=C:\Users\17732\Desktop\test\application.properties

 
 
  
 
 
  
  • 1
  • 2

如果内部外部配置有冲突,优先选择外部的

接着学习一下如何通过cmd命令调用外部配置文件

java -jar HelloWord-0.0.1-SNAPSHOT.jar --spring.config.location=C:\Users\17732\Desktop\test\application.properties

 
 
  
 
 
  
  • 1

设置某一个参数,还是按照这个步骤(右单击 ->Run As->RunConfigurations->Arguments)到Arguments下
比如说只更改端口:–server.port=8882

9.springBoot的日志处理

目前springBoot用的是slf4j以及logback日志

具体如何使用日志参照下面代码:

@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloWordApplicationTests {
	Logger logger=LoggerFactory.getLogger(HelloWordApplicationTests.class);
	@Test
	public void testLog() {
		logger.trace("测试Logger_Trace");
		logger.debug("测试Logger_debug");
		logger.info("测试Logger_Info");
		logger.warn("测试Logger_warn");
		logger.error("测试logger_error");
	}}

 
 
  
 
 
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

但是在测试时发现只能输出info warn 以及error中的内容,其他的内容均为输出,这是由于日志级别的问题
日志级别有:

trace debug info warn error fail off 

 
 
  
 
 
  
  • 1

其中默认的级别是 info,只打印info以后的,而Info以前的不给予打印

下面继续认识一下如何自定义日志级别

在主配置文件application.properties中设置:

logging.level.com.test.HelloWord=debug
其中com.test.HelloWord是主配置类的包名

 
 
  
 
 
  
  • 1
  • 2

这样的话就把日志的默认级别也就是最低级别调到debug

继续深入————如何把日志输出信息打印到文件中呢

在主配置文件application.properties中设置:
logging.file=D:/program/springBoot/HelloWord/log/springBoot.Log
这样的话就可以把日志信息加入到上面目录下的springBoot.Log文件中
当然还有logging.path=D:/
这样的话就直接把日志输出指定的文件夹中,默认的文件名是spring.log

 
 
  
 
 
  
  • 1
  • 2
  • 3
  • 4
  • 5

下面接着看如何更改日志输出的格式

指定日志显示格式:

  • 1.日志显示在控制台:
在主配置文件application.properties中设置:
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} -%msg%n

 
 
  
 
 
  
  • 1
  • 2

下面解释一下上面这串代码的意思:

  • %d:日期时间
  • %thread:打印线程名
  • %-5level:显示日志级别,-5表示从左显示5个字符宽度
  • %logger{50}:设置日志宽度,50表示最多只能有50个日志
  • %msg:日志消息
  • %n:表示显示完自动换行
  • 2.日志显示在文件中:
在主配置文件application.properties中设置:
logging.pattern.file=%d{yyyy-MM-dd} ** [%thread] **  %-5level **  %logger{50} **  %msg%n

 
 
  
 
 
  
  • 1
  • 2

10.springBoot处理web静态资源

1.先pom.xml文件中导入jquery,Bootstrap等静态资源文件:

  • jquery:
<dependency>
		<groupId>org.webjars</groupId>
		<artifactId>jquery</artifactId>
		<version>3.3.1-1</version>
	</dependency>

 
 
  
 
 
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • BootStrap
<!-- https://mvnrepository.com/artifact/org.webjars/bootstrap -->
<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>bootstrap</artifactId>
    <version>4.1.3</version>
</dependency>

 
 
  
 
 
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

下面简单的进行对jquery.js进行访问:

http://localhost:1234/zhiyi/webjars/jquery/3.3.1-1/jquery.js

 
 
  
 
 
  
  • 1

注意:开始的是从webjars开始的

下面在看一下怎么引入自己写的静态资源,自己写的静态资源放在哪里

  • 首先自定义的资源只能放在构建路径下的static或者resources目录下面
  • 在访问静态资源时不用写前缀目录,比如有一个文件a.html在resources目录下,那么在访问时:
http://localhost:1234/zhiyi/Hello.html

 
 
  
 
 
  
  • 1

欢迎页的实现:

在任意静态资源目录下,只要文件名叫做index.html,它就是主页,直接访问即可:

http://localhost:1234/zhiyi

 
 
  
 
 
  
  • 1

下面接着看看如何更改网站的logo,任何一个网站中的logo都有一个固定名字:favicon.ico

那么如何进行更改favicon.ico呢

我们只需要将favicon.ico放在任何静态资源目录中即可
如何自定静态资源位置:

在主配置文件application.properties中设置:
spring.resources.static-locations=classpath:/res/

 
 
  
 
 
  
  • 1
  • 2

然后在src/main/resources下创建对应的res目录,这样的话静态资源目录除了默认的resources以及static目录,res现在也是静态资源目录了
同样访问的时候也不需要加前缀res,直接输入文件名即可:

http://localhost:1234/zhiyi/res.html

 
 
  
 
 
  
  • 1

如果创建多个资源路径就这样:

spring.resources.static-locations=classpath:/res/ ,classpath:/img/

 
 
  
 
 
  
  • 1

注意:一旦自定义了,默认的静态资源文件夹就会全部失效

11.引入模板引擎thymeleaf

上面学习了如何引入静态资源,那么如何引入动态资源

springBoot是不支持动态页面jsp,但是如何来替换jsp页面呢,那么就使用我们的动态模板引擎thymeleaf
那么到底什么是模板引擎:
模板引擎就是将一个网友分为两部分:

  • 模板
  • 数据
    如何引用这个数据引擎:
在pom文件中添加依赖,这个依赖可以在maven里面直接搜索,也可以在这个网址:

https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/#using-boot-starter

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		<dependency>
			<groupId>org.thymeleaf</groupId>
			<artifactId>thymeleaf-spring5</artifactId>
		</dependency>
		<dependency>
			<groupId>org.thymeleaf.extras</groupId>
			<artifactId>thymeleaf-extras-java8time</artifactId>
		</dependency>

 
 
  
 
 
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

导入之后我们来研究第一个问题:引入thymeleaf 代码应该往哪里写

thymeleaf的代码全部放在构建路径(src/main/resources/)下的templete目录下
下面先看一个模板:
templete目录下的html:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Thymleaf</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head> 
<body>
<p th:text="${welcome}">Welcome to thymeleaf!</p>
</body>
</html>

 
 
  
 
 
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

先看一下上面这个代码片段,其他的都是模板,以后直接拿着用,但是p中有一个th:text="${welcome},会优先显示welcome中的内容
那么总结一下:th:就是替换的意思,比如:

<p id="aaa" class="aaa" th:id="${welcome}" th:class="${welcome}"  th:text="${welcome}">Welcome to thymeleaf!</p>

 
 
  
 
 
  
  • 1

那么如果${welcome}中有值,那么就就会有优先使用welcome中的值
在写一个controller:

@Controller
public class BootController {
	@RequestMapping("/wecome")
	public String wecome(Map<String, Object> map) {
		map.put("welcome", "welcome_Thymeleaf");
		return "result";
	}}

 
 
  
 
 
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

th后面到底可以存放哪些内容呢:

Order Feature Attributes
1 Fragment inclusion th:insert th:replace
2 Fragment iteration
3 Conditional evaluation th:if th:unless th:switch th:case
4 Local variable definition th:object th:with
5 General attribute modification th:attr th:attrprepend th:attrappend
6 Specific attribute modification th:value th:href th:src …
7 Text (tag body modification) th:text th:utext
8 Fragment specification th:fragment
9 Fragment removal th:remove

下面重点讲一下 th:text,th:untext

  • th:text:表示转义,何为转义,举一个小小的例子:
th:text="<h1>hello</h1>"
th:untext="<h1>hello</h1>"

 
 
  
 
 
  
  • 1
  • 2

第一个显示的是大大的标题hello,而第二个显示的是‘《h1》hello《/h1》’
下面写一个关于th:each的用法:
html页面:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Thymleaf</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet"
	href="webjars/bootstrap/4.1.3/css/bootstrap.min.css">
<link rel="stylesheet"
	    href="webjars/bootstrap/4.1.3/css/css/bootstrap-theme.min.css">
<script src="webjars/jquery/3.3.1-1/jquery.js"></script>
<script src="webjars/bootstrap/4.1.3/css/js/bootstrap.min.js"></script>
</head>
<body>
	<div class="container">
		<table class="table table-striped table-bordered">
			<thead>
				<tr>
					<th>姓名</th>
					<th>年龄</th>
				</tr>
			</thead>
			<tbody>
				<tr th:each="student : ${Students}">
					<td th:text="${student.name}">姓名</td>
					<td th:text="${student.age}">年龄</td>
				</tr>
			</tbody>
		</table>
	</div>
</body>
</html>

 
 
  
 
 
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

对应的controller:

@Controller
public class BootController {
	@RequestMapping("/wecome")
	public String wecome(Map<String, Object> map) {
		map.put("welcome", "welcome_Thymeleaf");
		List<Student> lStudents = new ArrayList<Student>();
		lStudents.add(new Student("zx", 21));
		lStudents.add(new Student("zx1", 22));
		lStudents.add(new Student("zx3", 23));
		lStudents.add(new Student("zx4", 24));
		map.put("Students", lStudents);
		return "result";
	}}

 
 
  
 
 
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

对应的Po:

public class Student {
	private String name;
	private Integer age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public Student() {
		super();
	}
	public Student(String n,Integer a) {
		super();
		this.name=n;
		this.age=a;
	}}

 
 
  
 
 
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

12.SpringBoot整合外置tomcat以及使用jsp开发

springBoot是不支持jsp开发的,因为jsp页面需要打成war包部署到tomcat,但是springBoot是不用打成war包就能运行,这个时候就需要使用外置的tomcat

下面接着讲一个maven的小知识:

如果pom中的依赖中有provided字样,那么在打包时不会将q以对应的插件或者文件一起打包

接着进入我们的主题:如何使用外置的tomcat,参考 点击此处
然后进行下面几个步骤:

  • 1.建立基本的web目录结构:在src/main/webapp里面建立一个目录:WEB-INF
  • 2.在src/main/webapp下面写jsp页面
    下面讲一下如何在springBoot中配置视图解析器;
    在主配置文件application.properties中添加如下代码:
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp

 
 
  
 
 
  
  • 1
  • 2

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=utf-8">
<title>Insert title here</title>
</head>
<body>
Hello ${requestScope.name} Welcome to Index.jsp
</body>
</html>

 
 
  
 
 
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Controller:

@Controller
public class WebController {
	@RequestMapping("/welcome")
	public String welcome(Map<String, Object>map) {
		map.put("name", "朱旭");
		return "index";
	}}

 
 
  
 
 
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
      </div>
      <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-e44c3c0e64.css" rel="stylesheet">
              </div>
    <div id="dmp_ad_58"><div id="kp_box_58" data-pid="58" data-track-click="{&quot;mod&quot;:&quot;kp_popu_58-402&quot;,&quot;con&quot;:&quot;,,&quot;}"><div style="width:100%;background:#fff;border:3px solid #fff;padding:16px 0px 0px 0px;">
中国真正厉害的只有一种人:三不卖七不买,盈利一辈子都不会停止 股管家 · 顶新
<div class="comment-edit-box d-flex">
	<a id="commentsedit"></a>
	<div class="user-img">
		<a href="javascript:void(0);" target="_blank">
			<img class="show_loginbox" src="//g.csdnimg.cn/static/user-img/anonymous-User-img.png">
		</a>
	</div>
	<form id="commentform">
		<input type="hidden" id="comment_replyId">
		<textarea class="comment-content" name="comment_content" id="comment_content" placeholder="想对作者说点什么"></textarea>
		<div class="opt-box"> <!-- d-flex -->
			<div id="ubbtools" class="add_code">
				<a href="#insertcode" code="code" target="_self"><i class="icon iconfont icon-daima"></i></a>
			</div>
			<input type="hidden" id="comment_replyId" name="comment_replyId">
			<input type="hidden" id="article_id" name="article_id" value="84346189">
			<input type="hidden" id="comment_userId" name="comment_userId" value="">
			<input type="hidden" id="commentId" name="commentId" value="">
			<div style="display: none;" class="csdn-tracking-statistics tracking-click" data-mod="popu_384"><a href="#" target="_blank" class="comment_area_btn">发表评论</a></div>
			<div class="dropdown" id="myDrap">
				<a class="dropdown-face d-flex align-items-center" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
				<div class="txt-selected text-truncate">添加代码片</div>
				<svg class="icon d-block" aria-hidden="true">
					<use xlink:href="#csdnc-triangledown"></use>
				</svg>
				</a>
				<ul class="dropdown-menu" id="commentCode" aria-labelledby="drop4">
					<li><a data-code="html">HTML/XML</a></li>
					<li><a data-code="objc">objective-c</a></li>
					<li><a data-code="ruby">Ruby</a></li>
					<li><a data-code="php">PHP</a></li>
					<li><a data-code="csharp">C</a></li>
					<li><a data-code="cpp">C++</a></li>
					<li><a data-code="javascript">JavaScript</a></li>
					<li><a data-code="python">Python</a></li>
					<li><a data-code="java">Java</a></li>
					<li><a data-code="css">CSS</a></li>
					<li><a data-code="sql">SQL</a></li>
					<li><a data-code="plain">其它</a></li>
				</ul>
			</div>  
			<div class="right-box">
				<span id="tip_comment" class="tip">还能输入<em>1000</em>个字符</span>
				<input type="button" class="btn btn-sm btn-cancel d-none" value="取消回复">
				<input type="submit" class="btn btn-sm btn-red btn-comment" value="发表评论">
			</div>
		</div>
	</form>
</div>

	<div class="comment-list-container">
	<a id="comments"></a>
	<div class="comment-list-box">
	</div>
	<div id="commentPage" class="pagination-box d-none"></div>
	
</div>
<div class="recommend-item-box recommend-ad-box"><div id="kp_box_59" data-pid="59" data-track-view="{&quot;mod&quot;:&quot;kp_popu_59-78&quot;,&quot;con&quot;:&quot;,,&quot;}" data-track-click="{&quot;mod&quot;:&quot;kp_popu_59-78&quot;,&quot;con&quot;:&quot;,,&quot;}"><script type="text/javascript">
(function() {
    var s = "_" + Math.random().toString(36).slice(2);
    document.write('<div style="" id="' + s + '"></div>');
    (window.slotbydup = window.slotbydup || []).push({
        id: "u3491668",
        container:  s
    });
})();

spring Boot从入门精通 - 晓月寒的博客 - 程序员宅基地

5-19

SpringBoot入门到基本精通传送门 - 凌枫ozo的博客 - 程序员宅基地

6-21

博文 来自: zhiyikeji的博客 开始学springboot.pdf 01-31 这是一本pdf版的SpringBoot教材,可以看看 下载 尚硅谷springBoot从入门到精通视频教程 03-30 ...

<div class="recommend-item-box recommend-ad-box"><div id="kp_box_60" data-pid="60" data-track-view="{&quot;mod&quot;:&quot;kp_popu_60-43&quot;,&quot;con&quot;:&quot;,,&quot;}" data-track-click="{&quot;mod&quot;:&quot;kp_popu_60-43&quot;,&quot;con&quot;:&quot;,,&quot;}"><div class="mediav_ad"><newsfeed class="newsfeed QIHOO__WEB__SO__1561601551566_648" id="QIHOO__WEB__SO__1561601551566_648" style="display:block;margin:0;padding:0;border:none;width:900px;height:84px;overflow-y:hidden;overflow-x:hidden;position:relative;text-align:left;"><info-div id="QIHOO__WEB__SO__1561601551566_648-info" style="zoom:1"><info-div class="QIHOO__WEB__SO__1561601551566_648 singleImage clk" data-href="https://ssxd.mediav.com/s?type=2&amp;r=20&amp;mv_ref=blog.csdn.net&amp;enup=CAABdvqsGQgAAhms+nYA&amp;mvid=ODg5OTk1MDQzNDYxODA4MjQwNjAwMTk&amp;bid=136da3e560399e85&amp;price=AAAAAF0UJhUAAAAAAAjiCR9YNn0QKQilQ31j8A==&amp;finfo=DAABCAABAAAAdQgAAgAAAGMEAAM/UFo8VAR4kwAIAAIAAAADCgADXJgmXtJ8VMwIAAQAAAB1BgAGLbcGAAoAAAgADgAAABcKAA8AAAAAABHaUAA&amp;ugi=FcTgigEVyNtrTBUCFboCFb4CFQAAFe69mv8PFoAIFcgBFoC9r6GWkcYFHBaUl4Ktu6uhuGkVAAAA&amp;uai=FeTGlAIlAhUEFuS0oM+60Y6YuQEV8ggl5KS3hQ0lABUaFAAcFuXLjKW5kOKjIxUAAAA&amp;ubi=FZjKWRWEquICFfrArRgVjPmHWxUEFRwW+rrPsxcW5LS1tsSXk5i5ATQCFrDgECUGFafM950LFfoFFQA2ra7jiJi01MocAA&amp;clickid=0&amp;cpx=__OFFSET_X__&amp;cpy=__OFFSET_Y__&amp;cs=__EVENT_TIME_START__&amp;ce=__EVENT_TIME_END__&amp;csign2=QzWflBYie8G=&amp;url=http%3A%2F%2Fgp17.kjih.top" data-pv="https://ssxd.mediav.com/s?type=1&amp;r=20&amp;tid=ODg5OTk1MDQzNDYxODA4MjQwNjAwMTk&amp;finfo=DAABCAABAAAAdQgAAgAAAGMEAAM/UFo8VAR4kwAIAAIAAAADCgADXJgmXtJ8VMwIAAQAAAB1BgAGLbcGAAoAAAgADgAAABcKAA8AAAAAABHaUAA&amp;mv_ref=blog.csdn.net&amp;enup=CAABdvqsGQgAAhms+nYA&amp;mvid=ODg5OTk1MDQzNDYxODA4MjQwNjAwMTk&amp;bid=136da3e560399e85&amp;ugi=FcTgigEVyNtrTBUCFboCFb4CFQAAFe69mv8PFoAIFcgBFoC9r6GWkcYFHBaUl4Ktu6uhuGkVAAAA&amp;uai=FeTGlAIlAhUEFuS0oM+60Y6YuQEV8ggl5KS3hQ0lABUaFAAcFuXLjKW5kOKjIxUAAAA&amp;ubi=FZjKWRWEquICFfrArRgVjPmHWxUEFRwW+rrPsxcW5LS1tsSXk5i5ATQCFrDgECUGFafM950LFfoFFQA2ra7jiJi01MocAA&amp;ds=1&amp;price=AAAAAF0UJhUAAAAAAAjiCR9YNn0QKQilQ31j8A==,https://max-l.mediav.com/rtb?type=2&amp;ver=1&amp;v=CGQSEDEzNmRhM2U1NjAzOTllODUYsqOKASCisEUoAWIXODg5OTk1MDQzNDYxODA4MjQwNjAwMTmIAQA&amp;k=qa07bwAAAAA=&amp;w=AAAAAF0UJhUAAAAAAAjiaA08L3j3Tg_Advlqiw&amp;i=9O5qIlVBQAgM&amp;exp=BQBECQBEAQJEAwJEEABDEwBD&amp;z=1" data-clk="https://max-l.mediav.com/rtb?type=3&amp;ver=1&amp;v=CGQSEDEzNmRhM2U1NjAzOTllODUYsqOKASCisEUoAWIXODg5OTk1MDQzNDYxODA4MjQwNjAwMTlwAA&amp;k=pPO7fAAAAAA=&amp;i=9O5qIlVBQAgM&amp;exp=BQBECQBEAQJEAwJEEABDEwBD&amp;x=__OFFSET_X__&amp;y=__OFFSET_Y__&amp;st=__EVENT_TIME_START__&amp;et=__EVENT_TIME_END__&amp;adw=__ADSPACE_W__&amp;adh=__ADSPACE_H__&amp;tc=&amp;turl=">
<info-div class="wrap">
    <info-div class="singleImage-img singleImage-img-left">
        <info-div class="img" style="background-image:url(https://s3m.mediav.com/galileo/733836-c3866f4e890864ad6233d712f3e84860.jpg)"><info-div class="ads-tag"></info-div></info-div>
    </info-div>
    <info-div class="singleImage-body singleImage-body-left">
        <info-div class="singleImage-title">股神徐翔狱中曝出庄家洗盘规律,牢记这3点,看完焕然大悟!</info-div>
        <info-div class="singleImage-desc">指南 · 顶新</info-div>
    </info-div>
从零基础认识SpringBoot(一)入门 - 你不知道你不知道的..._程序员宅基地

6-8

专题一漫谈SpringBoot入门精通发布 - jack33908359..._程序员宅基地

4-4

SpringBoot从入门到精通 08-28 阅读数 4879 原文链接如下:http://blog.didi...博文 来自: zhiyikeji的博客 Axure基础到实战案例全程通关视频教程-Array老师-...

		<div class="recommend-item-box blog-expert-recommend-box" style="">
		<div class="d-flex">
			<div class="blog-expert-recommend">
				<div class="blog-expert">
					<div class="blog-expert-flexbox"></div>
				</div>
			</div>
		</div>
	</div><div class="recommend-item-box baiduSearch recommend-box-ident" data-track-view="{&quot;mod&quot;:&quot;popu_387&quot;,&quot;con&quot;:&quot;,https://blog.csdn.net/dtttyc/article/details/93069233,searchFromBaidu1_4,-&quot;}" data-track-click="{&quot;mod&quot;:&quot;popu_387&quot;,&quot;con&quot;:&quot;,https://blog.csdn.net/dtttyc/article/details/93069233,searchFromBaidu1_4,-&quot;}" data-flg="true">                <a href="https://blog.csdn.net/dtttyc/article/details/93069233" target="_blank">              		<h4 class="text-truncate oneline" style="width: 872.313px;"><em>SpringBoot</em><em>入门</em>到<em>精通</em> - Judy-命中注定与众不同 - 程序员宅基地</h4>                  <div class="info-box d-flex align-content-center">                    <p>                      <span class="date">6-21</span>                    </p>                  </div>              		<p class="content oneline" style="width: 962px;">博文 来自: zhiyikeji的博客  没头没尾--项目开发笔记:最后的笔记  04-07 ...Springboot从入门到精通  03-16 阅读数 600  本系列教程将持续更新Java现在最...</p>                </a>            	</div><div class="recommend-item-box baiduSearch recommend-box-ident" data-track-view="{&quot;mod&quot;:&quot;popu_387&quot;,&quot;con&quot;:&quot;,https://blog.csdn.net/hemin1003/article/details/82038244,searchFromBaidu1_5,-&quot;}" data-track-click="{&quot;mod&quot;:&quot;popu_387&quot;,&quot;con&quot;:&quot;,https://blog.csdn.net/hemin1003/article/details/82038244,searchFromBaidu1_5,-&quot;}" data-flg="true">                <a href="https://blog.csdn.net/hemin1003/article/details/82038244" target="_blank">              		<h4 class="text-truncate oneline" style="width: 880.516px;"><em>SpringBoot</em>从<em>入门</em>到<em>精通</em>教程 - Think Different - 程序员宅基地</h4>                  <div class="info-box d-flex align-content-center">                    <p>                      <span class="date">6-4</span>                    </p>                  </div>              		<p class="content oneline" style="width: 962px;">SpringBoot,SpringCloud入门到精通最简单教程  09-26 阅读数 4万+  SpringBoot...博文 来自: zhiyikeji的博客  Spring Boot 快速入门 (官方quick start)  01-...</p>                </a>            	</div>
Spring Boot 从入门精通(三)配置文件 - 老谢的博客 - 程序员宅基地

6-15

在springboot中存在两种配置文件,一种是以.properties结尾的配置文件,另一种是以...博文 来自: zhiyikeji的博客 SpringBoot之《Spring Data Jpa 从入门到精通》第...

Springboot入门精通 - qq_21963133的博客 - 程序员宅基地

4-5

Java现在最热门的框架spring boot,比起传统的springmvc,springboot无疑是更加简化...博文 来自: zhiyikeji的博客 Spring Boot 2.0 从入门到精通-Secuirty 03-16...

<div class="recommend-item-box recommend-ad-box"><div id="kp_box_61" data-pid="61" data-track-view="{&quot;mod&quot;:&quot;kp_popu_61-557&quot;,&quot;con&quot;:&quot;,,&quot;}" data-track-click="{&quot;mod&quot;:&quot;kp_popu_61-557&quot;,&quot;con&quot;:&quot;,,&quot;}"><div class="mediav_ad"><newsfeed class="newsfeed QIHOO__WEB__SO__1561601551634_452" id="QIHOO__WEB__SO__1561601551634_452" style="display:block;margin:0;padding:0;border:none;width:852px;height:60px;overflow-y:hidden;overflow-x:hidden;position:relative;text-align:left;"><info-div id="QIHOO__WEB__SO__1561601551634_452-info" style="zoom:1"><info-div class="QIHOO__WEB__SO__1561601551634_452 singleImage clk" data-href="https://s1.maqqq.com/s?type=2&amp;r=20&amp;mv_ref=blog.csdn.net&amp;enup=CAABdvqsGQgAAhms+nYA&amp;mvid=ODg5OTk1MDQzNDYxODA4MjQwNjAwMTk&amp;bid=136da3e55f010b65&amp;price=AAAAAF0UJhUAAAAAAAqnjdIbYtBYOR316WPd0g==&amp;finfo=DAABCAABAAAAfggAAgAAADIEAAM/W53GQAAAAAAIAAIAAAADCgADXm608A3mZdAIAAQAAABLBgAGLbcGAAoAAAgADgAAABYKAA8AAAAAABM54AA&amp;ugi=FcTgigEVyNtrTBUCFboCFb4CFQAAFe69mv8PFoAIFcgBFoC9r6GWkcYFHBaS4dqAzrKXtncVAAAA&amp;uai=FaixkwIlAhUEFuS0odeS9tXuvAEV8ggl9pSNxAwlABUaFAAcFtqjxsSRrczSHxUAAAA&amp;ubi=Fej8UxXSyOECFcSkqRgVnvX+WhUEFRwW0tfbpRcW5LS2vpy82u68ATQCFrDAkIAIJQYVs5+B1AEV3AMVADbs1/Hbz7+PydMBAA&amp;clickid=0&amp;cpx=__OFFSET_X__&amp;cpy=__OFFSET_Y__&amp;cs=__EVENT_TIME_START__&amp;ce=__EVENT_TIME_END__&amp;csign2=05uQDwlX54L=&amp;url=http%3A%2F%2Fvyvobwi.cn%2F" data-pv="https://s1.maqqq.com/s?type=1&amp;r=20&amp;tid=ODg5OTk1MDQzNDYxODA4MjQwNjAwMTk&amp;finfo=DAABCAABAAAAfggAAgAAADIEAAM/W53GQAAAAAAIAAIAAAADCgADXm608A3mZdAIAAQAAABLBgAGLbcGAAoAAAgADgAAABYKAA8AAAAAABM54AA&amp;mv_ref=blog.csdn.net&amp;enup=CAABdvqsGQgAAhms+nYA&amp;mvid=ODg5OTk1MDQzNDYxODA4MjQwNjAwMTk&amp;bid=136da3e55f010b65&amp;ugi=FcTgigEVyNtrTBUCFboCFb4CFQAAFe69mv8PFoAIFcgBFoC9r6GWkcYFHBaS4dqAzrKXtncVAAAA&amp;uai=FaixkwIlAhUEFuS0odeS9tXuvAEV8ggl9pSNxAwlABUaFAAcFtqjxsSRrczSHxUAAAA&amp;ubi=Fej8UxXSyOECFcSkqRgVnvX+WhUEFRwW0tfbpRcW5LS2vpy82u68ATQCFrDAkIAIJQYVs5+B1AEV3AMVADbs1/Hbz7+PydMBAA&amp;ds=1&amp;price=AAAAAF0UJhUAAAAAAAqnjdIbYtBYOR316WPd0g==,https://max-l.mediav.com/rtb?type=2&amp;ver=1&amp;v=CGQSEDEzNmRhM2U1NWYwMTBiNjUY1NiJASCisEUoAWIXODg5OTk1MDQzNDYxODA4MjQwNjAwMTmIAQA&amp;k=zDV+CAAAAAA=&amp;w=AAAAAF0UJhUAAAAAAAqnu-Pg04FlDXeZFxbntg&amp;i=8V_rzgVBQAh-&amp;exp=BQBECQBEEABDEgBD&amp;z=1" data-clk="https://max-l.mediav.com/rtb?type=3&amp;ver=1&amp;v=CGQSEDEzNmRhM2U1NWYwMTBiNjUY1NiJASCisEUoAWIXODg5OTk1MDQzNDYxODA4MjQwNjAwMTlwAA&amp;k=Uq7kKQAAAAA=&amp;i=8V_rzgVBQAh-&amp;exp=BQBECQBEEABDEgBD&amp;x=__OFFSET_X__&amp;y=__OFFSET_Y__&amp;st=__EVENT_TIME_START__&amp;et=__EVENT_TIME_END__&amp;adw=__ADSPACE_W__&amp;adh=__ADSPACE_H__&amp;tc=&amp;turl=">
<info-div class="wrap">
    <info-div class="singleImage-img singleImage-img-left">
        <info-div class="img" style="background-image:url(https://s3m.mediav.com/gifcompress/687924-a90699df0670ecf3582d309b313e1bfa.gif)"><info-div class="ads-tag"></info-div></info-div>
    </info-div>
    <info-div class="singleImage-body singleImage-body-left">
        <info-div class="singleImage-title">网友总结瘦子的共性!照做你也能变易瘦体质</info-div>
        <info-div class="singleImage-desc">悠加 · 猎媒</info-div>
    </info-div>
SpringBoot入门精通 - JavaQ - 程序员宅基地

4-5

springboot从入门到精通 一步一步走向成功之路springboot从入门到精通 一步一步...博文 来自: zhiyikeji的博客 SpringBoot从入门到精通-佟刚-专题视频课程 03-...

<div class="recommend-item-box recommend-ad-box"><div id="kp_box_62" data-pid="62" data-track-view="{&quot;mod&quot;:&quot;kp_popu_62-1062&quot;,&quot;con&quot;:&quot;,,&quot;}" data-track-click="{&quot;mod&quot;:&quot;kp_popu_62-1062&quot;,&quot;con&quot;:&quot;,,&quot;}"><iframe src="https://kunpeng-sc.csdnimg.cn/#/preview/237?positionId=62&amp;queryWord=" frameborder="0" width="100%" height="75px" scrolling="no"></iframe></div></div>
<div class="recommend-item-box recommend-ad-box"><div id="kp_box_63" data-pid="63" data-track-view="{&quot;mod&quot;:&quot;kp_popu_63-555&quot;,&quot;con&quot;:&quot;,,&quot;}" data-track-click="{&quot;mod&quot;:&quot;kp_popu_63-555&quot;,&quot;con&quot;:&quot;,,&quot;}"><div class="mediav_ad"><newsfeed class="newsfeed QIHOO__WEB__SO__1561601551715_156" id="QIHOO__WEB__SO__1561601551715_156" style="display:block;margin:0;padding:0;border:none;width:852px;height:60px;overflow-y:hidden;overflow-x:hidden;position:relative;text-align:left;"><info-div id="QIHOO__WEB__SO__1561601551715_156-info" style="zoom:1"><info-div class="QIHOO__WEB__SO__1561601551715_156 singleImage clk" data-href="https://s1.maqqq.com/s?type=2&amp;r=20&amp;mv_ref=blog.csdn.net&amp;enup=CAABdvqsGQgAAhms+nYA&amp;mvid=ODg5OTk1MDQzNDYxODA4MjQwNjAwMTk&amp;bid=136da3e55f010b65&amp;price=AAAAAF0UJhUAAAAAAAqoXnmXwZAD1o03HC5feg==&amp;finfo=DAABCAABAAAASwgAAgAAACYEAAM/XJcuQAAAAAAIAAIAAAADCgADXm7iaivCx/AIAAQAAAArBgAGLbcGAAoAAAgADgAAABYKAA8AAAAAAAtxsAA&amp;ugi=FcTgigEVyNtrTBUCFboCFb4CFQAAFe69mv8PFoAIFcgBFoC9r6GWkcYFHBaS4dqAzrKXtncVAAAA&amp;uai=FaixkwIlAhUEFuS0odeS9tXuvAEV8ggl9pSNxAwlABUaFAAcFtqjxsSRrczSHxUAAAA&amp;ubi=Fb7JVRXu39YCFYSY8BcV9Nb/WRUEFRwW2uKnqhcW5LSfws2a8e68ATQEFrDAkIAIJQYVq4Gk8Q0VwgUVADbtnZmA2NjZyKQBAA&amp;clickid=0&amp;cpx=__OFFSET_X__&amp;cpy=__OFFSET_Y__&amp;cs=__EVENT_TIME_START__&amp;ce=__EVENT_TIME_END__&amp;csign2=QzWflBYie8G=&amp;url=http%3A%2F%2Fvip.xinxifang.top%2F" data-pv="https://s1.maqqq.com/s?type=1&amp;r=20&amp;tid=ODg5OTk1MDQzNDYxODA4MjQwNjAwMTk&amp;finfo=DAABCAABAAAASwgAAgAAACYEAAM/XJcuQAAAAAAIAAIAAAADCgADXm7iaivCx/AIAAQAAAArBgAGLbcGAAoAAAgADgAAABYKAA8AAAAAAAtxsAA&amp;mv_ref=blog.csdn.net&amp;enup=CAABdvqsGQgAAhms+nYA&amp;mvid=ODg5OTk1MDQzNDYxODA4MjQwNjAwMTk&amp;bid=136da3e55f010b65&amp;ugi=FcTgigEVyNtrTBUCFboCFb4CFQAAFe69mv8PFoAIFcgBFoC9r6GWkcYFHBaS4dqAzrKXtncVAAAA&amp;uai=FaixkwIlAhUEFuS0odeS9tXuvAEV8ggl9pSNxAwlABUaFAAcFtqjxsSRrczSHxUAAAA&amp;ubi=Fb7JVRXu39YCFYSY8BcV9Nb/WRUEFRwW2uKnqhcW5LSfws2a8e68ATQEFrDAkIAIJQYVq4Gk8Q0VwgUVADbtnZmA2NjZyKQBAA&amp;ds=2&amp;price=AAAAAF0UJhUAAAAAAAqoXnmXwZAD1o03HC5feg==,https://max-l.mediav.com/rtb?type=2&amp;ver=1&amp;v=CGQSEDEzNmRhM2U1NWYwMTBiNjUY1NiJASCisEUoAmIXODg5OTk1MDQzNDYxODA4MjQwNjAwMTmIAQA&amp;k=aurevwAAAAA=&amp;w=AAAAAF0UJhUAAAAAAAqoq3E-6xaCouUyuBKSxg&amp;i=8VHrzgVBQAhB&amp;exp=BQBECQBEEABDEgBD&amp;z=1" data-clk="https://max-l.mediav.com/rtb?type=3&amp;ver=1&amp;v=CGQSEDEzNmRhM2U1NWYwMTBiNjUY1NiJASCisEUoAmIXODg5OTk1MDQzNDYxODA4MjQwNjAwMTlwAA&amp;k=dLFEOAAAAAA=&amp;i=8VHrzgVBQAhB&amp;exp=BQBECQBEEABDEgBD&amp;x=__OFFSET_X__&amp;y=__OFFSET_Y__&amp;st=__EVENT_TIME_START__&amp;et=__EVENT_TIME_END__&amp;adw=__ADSPACE_W__&amp;adh=__ADSPACE_H__&amp;tc=&amp;turl=">
<info-div class="wrap">
    <info-div class="singleImage-img singleImage-img-left">
        <info-div class="img" style="background-image:url(https://s3m.mediav.com/gifcompress/701023-14596cdc7f8543bceebaa780c385dd12.gif)"><info-div class="ads-tag"></info-div></info-div>
    </info-div>
    <info-div class="singleImage-body singleImage-body-left">
        <info-div class="singleImage-title">70岁老中医:湿气重怎么办?简单1招,7天排尽体内10年湿毒,不花冤枉钱</info-div>
        <info-div class="singleImage-desc">旭荣 · 猎媒</info-div>
    </info-div>
<div class="recommend-item-box recommend-ad-box"><div id="kp_box_64" data-pid="64" data-track-view="{&quot;mod&quot;:&quot;kp_popu_64-1251&quot;,&quot;con&quot;:&quot;,,&quot;}" data-track-click="{&quot;mod&quot;:&quot;kp_popu_64-1251&quot;,&quot;con&quot;:&quot;,,&quot;}"><!-- T28 位置 -->
<div class="recommend-item-box recommend-ad-box"><div id="kp_box_65" data-pid="65" data-track-view="{&quot;mod&quot;:&quot;kp_popu_65-1252&quot;,&quot;con&quot;:&quot;,,&quot;}" data-track-click="{&quot;mod&quot;:&quot;kp_popu_65-1252&quot;,&quot;con&quot;:&quot;,,&quot;}"><!-- T33 位置 -->
<div class="recommend-item-box recommend-ad-box"><div id="kp_box_66" data-pid="66" data-track-view="{&quot;mod&quot;:&quot;kp_popu_66-881&quot;,&quot;con&quot;:&quot;,,&quot;}" data-track-click="{&quot;mod&quot;:&quot;kp_popu_66-881&quot;,&quot;con&quot;:&quot;,,&quot;}"><script src="https://nbrecsys.4paradigm.com/resource/cus/csdn/sdk-csdn-render.js"></script>
<div class="recommend-item-box  recommend-download-box clearfix" data-track-click="{&quot;mod&quot;:&quot;popu_387&quot;,&quot;con&quot;:&quot;,https://download.csdn.net/download/zhang3171211/10694345,BlogCommendFromBaidu_39&quot;}" data-flg="true">
	<a href="https://download.csdn.net/download/zhang3171211/10694345" target="_blank">
		<div class="content clearfix">
			<div class="">
				<h4 class="text-truncate oneline clearfix">
					spring boot 非常容易<em>入门</em>的书					</h4>
				<span class="data float-right">09-28</span>
			</div>
			<div class="desc oneline">
					spring boot 非常容易入门的书				</div>
			<span class="type-show type-show-download">下载</span>
		</div>
	</a>
</div>
<div class="recommend-item-box recommend-ad-box"><div id="kp_box_67" data-pid="67" data-track-view="{&quot;mod&quot;:&quot;kp_popu_67-882&quot;,&quot;con&quot;:&quot;,,&quot;}" data-track-click="{&quot;mod&quot;:&quot;kp_popu_67-882&quot;,&quot;con&quot;:&quot;,,&quot;}"><script src="https://nbrecsys.4paradigm.com/resource/cus/csdn/sdk-csdn-render.js"></script>
<div class="recommend-item-box recommend-ad-box"><div id="kp_box_68" data-pid="68" data-track-view="{&quot;mod&quot;:&quot;kp_popu_68-883&quot;,&quot;con&quot;:&quot;,,&quot;}" data-track-click="{&quot;mod&quot;:&quot;kp_popu_68-883&quot;,&quot;con&quot;:&quot;,,&quot;}"><!-- T48 位置 -->
mybatis一级缓存(session cache)引发的问题

05-14 阅读数 4万+

mybatis一级缓存(session cache)引发的问题 博文 来自: flysharkym的专栏

Docker的三大核心概念:镜像、容器、仓库
镜像:类似虚拟机的镜像、用俗话说就是安装文件。
容器:类似一个轻量…


博文
来自: 我走小路的博客



Android圆形图片--自定义控件

12-17 阅读数 1万+

Android圆形图片--自定义控件 博文 来自: Main_Stage的专栏

ubuntu16.04环境Kdevelop安装和汉化

01-20 阅读数 6239

1、Kdevelop安装

 

最简单的命令行安装,打开终端,执行

 

sudo apt-get install kdevelop

 

2、Kdevelop汉化

不需要自己下载汉化包,…


博文
来自: lch_vision的博客



编写一应用程…


博文
来自: pengjc2001的博客



伪造充值凭据(receipt)以小额凭据骗取大额商品

凭据重复使用
凭据重复使用信用卡黑卡/…


博文
来自: 分享知识、分享进步



jquery/js实现一个网页同时调用多个倒计时(最新的)

11-25 阅读数 54万+

jquery/js实现一个网页同时调用多个倒计时(最新的)

最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦!

//js



博文
来自: Websites



VirtualBox COM获取对象失败

04-17 阅读数 4万+

错误详情

  1. 先来看看错误详情
    获取 VirtualBox COM 对象失败.应用程序将被中断.Failed to instantiate CLSID_VirtualBox …


    博文
    来自: 多点折腾少点抱怨

Eclipse如何安装WindowBuilder插件及如何使用WB

05-31 阅读数 6481

Eclipse如何安装WindowBuilder插件及如何使用WB 博文 来自: 天命王子的博客

.NET和java的RSA互通,仅此而已

03-09 阅读数 7万+

RSA .net jva 互通 解决不能互通的问题 博文 来自: lubiaopan的专栏

魔兽争霸3冰封王座1.24e 多开联机补丁 信息发布与收集点

06-20 阅读数 6万+

畅所欲言! 博文 来自: Smile_qiqi的专栏

            <div class="recommend-item-box type_hot_word">
                            <div class="content clearfix" style="width: 962px;">
                <div class="word float-left">
                                                        <span>
                    <a href="https://edu.csdn.net/courses/o5329_s5330_k " target="_blank">
                    机器学习教程                    </a></span>
                                                                            <span>
                    <a href="https://edu.csdn.net/courses/o280_s351_k " target="_blank">
                    Objective-C培训                    </a></span>
                                                                            <span>
                    <a href="https://edu.csdn.net/combos/o7115_s388_l0_t " target="_blank">
                    交互设计视频教程                    </a></span>
                                                                            <span>
                    <a href="https://edu.csdn.net/course/play/5599/104252 " target="_blank">
                    颜色模型                    </a></span>
                                                                            <span>
                    <a href="https://edu.csdn.net/combos/o363_l0_t " target="_blank">
                    设计制作学习                    </a></span>
                                                        </div>
            </div>
                                            <div class="content clearfix" style="width: 962px;">
                <div class="float-left">
                                    <span>
                    <a href="https://www.csdn.net/gather_24/MtTaEg3sMDM5MS1ibG9n.html" target="_blank">
                    mysql关联查询两次本表</a>
                </span>
                                    <span>
                    <a href="https://www.csdn.net/gather_10/MtjaIg3sMTUzMy1kb3dubG9hZAO0O0OO0O0O.html" target="_blank">
                    native底部 react</a>
                </span>
                                    <span>
                    <a href="https://www.csdn.net/gather_1b/Ntzagg1sOTU3LWRvd25sb2Fk.html" target="_blank">
                    extjs glyph 图标</a>
                </span>
                                    <span>
                    <a href="https://www.csdn.net/gather_4a/MtTaIgwsNTUtZWR1.html" target="_blank">
                    区块链入门到精通</a>
                </span>
                                    <span>
                    <a href="https://www.csdn.net/gather_4a/MtzaEg3sNDYtZWR1.html" target="_blank">
                    云计算入门精通</a>
                </span>
                                    </div>
            </div>
                            </div>
                        <div class="recommend-loading-box">
            <img src="https://csdnimg.cn/release/phoenix/images/feedLoading.gif">
        </div>
        <div class="recommend-end-box">
            <p class="text-center">没有更多推荐了,<a href="https://blog.csdn.net/" class="c-blue c-blue-hover c-blue-focus">返回首页</a></p>
        </div>
    </div>
</main>
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lyy747425777/article/details/93851181

智能推荐

标签的使用_标签内使用$$-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏10次。开始学习Java,要努力了,看到一篇讲解JSP标签的文章,先转过来看看。在JSP的开发中,迭代是经常要使用到的操作。例如,逐行的显示查询的结果等。在早期的JSP中,通常使用Scriptlets来实现Iterator或者Enumeration对象的迭代输出。现在,通过JSTL的迭代标签可以在很大的程度上简化迭代操作。 JSTL所支持的迭代标签有两个,分别是和。在这里介绍的是标_标签内使用$$

Vscode ESP-IDF插件python工具使用中的路径问题1_eclipse esp-idf 怎么选择python的路径-程序员宅基地

文章浏览阅读390次。bash: otatool.py:未找到命令。_eclipse esp-idf 怎么选择python的路径

在unity中如何高效的使用内置android方法_unity不重复显示androidjavaobject maketext-程序员宅基地

文章浏览阅读6.1k次,点赞6次,收藏24次。目录AndroidJNIAndroidJavaClassAndroidJavaObject简单示例:Unity中如何正确使用AndroidJNIapk接入中经常遇到的问题记录:android 实用UnityAndroid功能汇总1.如何调用Toast2.如何调用相机拍照3.如何调用图库选择图片4.Unity3D调用Android功能与组件(四)——文字、..._unity不重复显示androidjavaobject maketext

Linux网络调试助手-程序员宅基地

文章浏览阅读1k次。Linux网络调试助手_linux网络调试助手

云计算及应用课程知识整理-程序员宅基地

文章浏览阅读1.2k次。文章目录一、云计算云计算概念云计算的服务类型云计算技术体系结构的层次及其功能为什么云计算成本低?二、GFS分布式的文件系统设计需要考虑哪些问题?GFS架构GFS容错机制三、MapReducemapReduce概念MapReduce适合什么类型数据?四、分布式锁服务Chubbychubby功能两阶段决议chubby基本架构五、分布式结构化数据表BigTable是什么架构BigTable中chubby的用途六、分布式存储系统Megastore实现机制融合SQL和noSQL局部索引和全局索引三种图三种副本七、大规

【SLAM】坐标系变换与外参标定-程序员宅基地

文章浏览阅读120次。突然发现学习文档有下面这句话:学习这件事不在乎有没有人教你,最重要的是在于你自己有没有觉悟和恒心。——法布尔task02从二维坐标系开始推导坐标系变换参数,进而加入平移,加入Z轴拓展到三维坐标系的坐标转换方程。同时了解到相机外参对SLAM系统的作用,清楚外参标定常用到的软件。

随便推点

gnu make 中文手册教程pdf-程序员宅基地

文章浏览阅读124次。gnu make 中文手册教程pdf http://blog.chinaunix.net/space.php?uid=103125&do=blog&id=2964151http://www.linuxsir.org/main/doc/gnumake/..._gnumake中文手册.pdf

Android逆向 学习Android安全和逆向开发的路线总结(1)-程序员宅基地

文章浏览阅读240次,点赞5次,收藏9次。到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘。**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。

基于Java的校园停车场管理系统的设计与实现(源码+lw+部署文档+讲解等)-程序员宅基地

文章浏览阅读828次,点赞20次,收藏16次。博主介绍:全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战精彩专栏 推荐订阅2023-2024年最值得选的微信小程序毕业设计选题大全:100个热门选题推荐2023-2024年最值得选的Java毕业设计选题大全:500个热门选题推荐Java精品实战案例《500套》微信小程序项目精品案例《500套》文末获取源码+数据库。

html js 图片跑马灯,jquery跑马灯 图片不间断滚动效果-程序员宅基地

文章浏览阅读600次。在网页中为了显示更多内容,界面更美观,通常会用到“跑马灯”效果。打开 Dreamweaver新建 HTML 文档;修改标题为"跑马灯"保存为 index.html 文件。首先,编写跑马灯部分的静态 HTML 代码,把图片排列起来在 和 标签中添加以下代码:                给上一步的 HTML 代码中的 div 标签增加 class 属性,如下: 编写跑马灯部分的 CSS 样式代...

信息技术计算机老师继续教育培训心得,【信息技术继续教育培训心得】_信息技术继续教育培训之收获与感想...-程序员宅基地

文章浏览阅读355次。信息技术继续教育培训之收获与感想常宁市一中 谢玉香我很兴奋参加本次网络培训.人们常说:“活到老,学到”, 信息技术继续教育培训给我们信息技术教师提供了一个很好的平台了——是我们教师提高教育教学水平的绝好机会.形式新颖,效果明显.随着学习的推进,自己对此事的认识,也由被动的迫于形式环境,不得不学,转变为主观上主动的去学习,认为应该学.所以我每天都坚持在线学习、写作业.本人收获很多,感触也颇深.下面..._继续教育培训信息技术

基于springboot的企业门户网站毕设源码_企业门户开源-程序员宅基地

文章浏览阅读288次。此外,基于SpringBoot的开源社区活跃,可以利用众多的开源库和插件快速实现各种功能模块,如权限管理、日志记录、在线支付等,为企业提供全面的信息化解决方案。总之,基于SpringBoot的企业门户网站开发具有显著的优势,可以提高企业的开发效率,降低维护成本,同时提供丰富的功能和良好的用户体验。综上所述,基于SpringBoot的企业门户网站具有快速开发和部署、微服务架构支持、强大的生态系统、前后端分离的开发模式、安全性保障和国际化支持等多个创新点,可以帮助企业提高信息化建设的效率和质量。_企业门户开源