1. Thymeleaf简单介绍
Thymeleaf 与JSP类似,最大的区别在于,JSP在运行之后才能得纯HTML,而 Thymeleaf 在运行之前也是纯html。Thymeleaf跟 Velocity、FreeMarker 等模板引擎大同小异 ,相较与其他的模板引擎,它有如下三个极吸引人的特点:
1.Thymeleaf 在有网络和无网络的环境下皆可运行。它可以让在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式。浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。
2.Thymeleaf 开箱即用。它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、该jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。
3.Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。
举一个简单的Thymeleaf 例子:
< body>
< p th: text= "#{hello.world}" > Hello World! < / p>
< / body>
这是一段标准的HTML代码,通过浏览器直接打开它是可以正确解析并且看到页面的静态效果,显示的内容是
标签里的文本Hello World!。标签中的th:text属性用来填充该标签的内容,也就是说在上面的例子中
标签中的Hello World!将会被th:text属性中
#{hello.world}
的值替换。假如
#{hello.world}
的值是Hello Thymeleaf!那么网页打开时显示的内容将会变成Hello Thymeleaf!。
在传统的JSP中,我们需要在
标签中加入
${hello.world}
才能让浏览器显示数据,每次开发前端页面我们必须部署项目启动服务器之后才能显示数据,从而根据显示的数据进行美化或者修改前端的页面。使用Thymeleaf 模板引擎之后,不需要部署项目,只要在前端设置模板数据用于查看显示效果就可以了,在标签中加入th:text属性之后,项目部署时前端设置的模板数据就会被后端的数据(通常是数据库中的数据)替换,这样开发的时候就可以专注于前端或者专注于后端,大大提高我们的开发效率,如今的是趋势前后端开发分离,使用Thymeleaf 模板引擎能减少团队之间因前后端开发差异产生的问题。
2. Thymeleaf的标准表达式语法
Thymeleaf有四种标准表达式语法
变量表达式
URL表达式
选择(星号)表达式
文字国际化表达式
在这里着重介绍前面两种
2.1 变量表达式
变量表达式即OGNL表达式或Spring EL表达式(在Spring术语中也叫model attributes)。像这种:${user.name}
UserName is : xiaoming !
默认运行结果是:UserName is : xiaoming ! 如果${user.name}的值是xiaohong则输出UserName is : xiaohong ! 这种与JSP的方式一样
2.2 URL表达式
Thymeleaf对于URL的处理是通过语法@{…}来处理,举个简单的例子:
Thymeleaf
Thymeleaf支持绝对路径URL也支持相对路径的URL: 相对路径写法: @{…/thymeleaf/hello(userName=${user.username})}
添加参数:
@{/thymeleaf/hello(userName=${user.username},userPassWord=${user.userpassword})}
URL后面的(userName=${user.username},userPassWord=${user.userpassword})
表示将括号内的内容作为参数处理,多个参数用逗号隔开,该语法避免使用字符串拼接,大大提高了可读性
如果要对URL进行修改,可以使用 th:href和th:src
< ! -- 访问的地址是 'http://localhost:8080/thymeleaf/hello?userName=xiaoming)' -- >
< a href= "hello.html"
th: href= "@{http://localhost:8080/thymeleaf/hello(userName=${user.username})}" > view< / a>
< a href= "hello.html" th: href= "@{/thymeleaf/hello(userName=${user.username})}" > view< / a>
3.表达式支持的语法
3.1 算术运算
表达式支持算数运算,比如:+、-(减号)、*、/、%以及单独的 -(负号) 简单举两个例子
语法
实例
运行结果
+
1000(设Product.price为1)
-
1(设Product.price为1000)
3.2 逻辑运算
逻辑运算符>, <, <=,>=,==,!=,!都可以使用,唯一需要注意的是使用<,>时需要用它的HTML转义符
3.3 条件运算
If-then: (if) ? (then)
If-then-else: (if) ? (then) : (else)
Default: (value) ?: (defaultvalue)
3.4 文本操作
设${name}的值是123
操作
结果
hello world
Hello ! 123 !
hello world
Hello ! 123 !
4.使用方法
4.1 赋值、字符串拼接
赋值用th:text=""属性,字符串拼接参考上面3.4,运用“+”拼接或者直接用“||”都可以做到,推荐使用后者。
hello world
hello world
设${name}的值是123,上面的输出结果都是Hello ! 123 !
4.2 条件判断If/Unless
Thymeleaf中使用th:if和th:unless属性进行条件判断,下面的例子中,
标签只有在th:if
中条件成立时才显示:
Login
th:unless
于th:if
恰好相反,只有表达式中的条件不成立,才会显示其内容
Login
也可以使用 (if) ? (then) : (else)
这种语法来判断显示的内容,如:
Hello
4.3 循环遍历
直接遍历 列表数据是一种非常常见的场景,例如现在有n条记录需要渲染成一个表格,该数据集合必须是可以遍历的,使用th:each
标签:
< table>
< thead>
< tr>
< th> id< / th>
< th> 产品名称< / th>
< th> 价格< / th>
< / tr>
< / thead>
< tbody>
< tr th: each= "p: ${ps}" >
< td th: text= "${p.id}" > 1 < / td>
< td th: text= "${p.name}" > name< / td>
< td th: text= "${p.price}" > price< / td>
< / tr>
< / tbody>
< / table>
注:${ps}为一个可遍历的集合 2. 带状态遍历 还可以进行带状态的遍历,只需把遍历条件改成th:each="p,status: ${ps},status称作状态变量,属性有:
状态变量常用属性
index:当前迭代对象的index(从0开始计算)
count: 当前迭代对象的index(从1开始计算)
size:被迭代对象的大小
current:当前迭代变量
even/odd:布尔值,当前循环是否是偶数/奇数(从0开始计算)
first:布尔值,当前循环是否是第一个
last:布尔值,当前循环是否是最后一个
比如我需要在遍历的时候输出序号,可以把上面的遍历代码改成:
< tr th: each= "p,status: ${ps}" >
< td th: text= "${status.count}" > < / td>
< td th: text= "${p.id}" 1 > < / td>
< td th: text= "${p.name}" > name< / td>
< td th: text= "${p.price}" > price< / td>
< / tr>
这样在每次遍历的时候都会在前面加上一个序号 3. 遍历select
< select size= "3" >
< option th: each= "p:${ps}" th: value= "${p.id}" th: selected= "${p.id==p.id}" th: text= "${p.name}" > < / option>
< / select>
先在select
中声明需要显示的数量size
为多少 th:each="p:${ps}"
是遍历的集合 th:value="${p.id}"
令每一项的值是${p.id}
th:selected="${p.id==p.id}"
表示被选中的项 th:text="${p.name}
表示显示的文本信息是${p.name}
4.遍历单选框
< input name= "product" type= "radio" th: each= "p:${ps}" th: value= "${p.id}" th: checked= "${p.id==p.id}" th: text= "${p.name}" / >
说明参考上面
4.4 Swicth
默认属性default可以用*表示:
< div th: switch = "${user.role}" >
< p th: case = "'admin'" > User is an administrator< / p>
< p th: case = "#{roles.manager}" > User is a manager< / p>
< p th: case = "*" > User is some other thing< / p>
< / div>
4.5 URL相关
设置背景
根据属性值改变背景
5. 页面布局
实际情况使用布局通常比较复杂,这里只是简单介绍一下布局的使用方式,具体运用要根据实际需要编写不同的布局。 先编写一个用于布局的layout.html文件,内容大概如下:
< body>
< header th: fragment= "header" >
head 要显示的模板头部
< / header>
< div th: include= "::content" >
这是正文
< / div>
< footer th: fragment= "footer" >
foot 要显示的模板尾部
< / footer>
< / body>
正文html文件:
< ! DOCTYPE html>
< html lang= "en" xmlns: th= "http://www.thymeleaf.org" th: replace= "layout" >
< head>
< meta charset= "UTF-8" >
< title> hello< / title>
< / head>
< body>
< div th: fragment= "content" >
这才是正文
< / div>
< / body>
< / html>
运行的结果大概这样: 需要注意的正文html文件中的第二行th:replace="layout"是前面编写的layout.html文件 正文中th:fragment=“content"的值要和布局文件中的 th:include=”::content"相对应
6.内置工具
为了模板更加易用,Thymeleaf还提供了一系列Utility对象(内置于Context中),可以通过#直接访问: Execution Info Messages URIs/URLs Conversions Dates Calendars Numbers Strings Objects Booleans Arrays Lists Sets Maps Aggregates IDs
先说说Dates: 在后端实例化了一个Date对象Date now = new Date();
直接输出日期 ${ now} :
< p th: text= "${now}" > < / p>
默认格式化 ${ #dates. format ( now) } :
< p th: text= "${#dates.format(now)}" > < / p>
自定义格式化 ${ #dates. format ( now, 'yyyy-MM-dd HH:mm:ss' ) } :
< p th: text= "${#dates.format(now,'yyyy-MM-dd HH:mm:ss')}" > < / p>
直接获取当前时间:
< p th: text= "${#dates.createNow()}" > < / p>
直接获取当天时间:
< p th: text= "${#dates.createToday()}" > < / p>
显示结果: Strings:
${ #strings. isEmpty ( name) }
${ #strings. arrayIsEmpty ( nameArr) }
${ #strings. listIsEmpty ( nameList) }
${ #strings. setIsEmpty ( nameSet) }
${ #strings. startsWith ( name, 'Don' ) }
${ #strings. endsWith ( name, endingFragment) }
${ #strings. length ( str) }
${ #strings. equals ( str) }
${ #strings. equalsIgnoreCase ( str) }
${ #strings. concat ( str) }
${ #strings. concatReplaceNulls ( str) }
${ #strings. randomAlphanumeric ( count) }
就不一一举例了,有需要的朋友按照具体内置对象百度了解一下吧。
7.Thymeleaf常用标签
关键字
操作
例子
th:id
替换id
th:text
文本替换
description
th:utext
支持html的文本替换
conten
th:object
替换对象
th:value
属性赋值
th:with
变量赋值运算
th:style
设置样式
th:style="'display:' + @{(${sitrue} ? 'none' : 'inline-block')} + ''"
th:onclick
点击事件
th:"'getCollect()'"
th:each
属性赋值
tr th:each="user,userStat:${users}"
th:if
判断条件
th:unless
和th:if判断相反
Login
th:href
链接地址
Login
th:switch
多路选择 配合th:case 使用
th:case
th:switch的一个分支
User is an administrator
th:fragment
布局标签,定义一个代码片段,方便其它地方引用
th:include
布局标签,替换内容到引入的文件
th:replace
布局标签,替换整个标签到引入的文件
th:selected
selected选择框 选中
th:selected="(${xxx.id} == ${configObj.dd})"
th:src
图片类地址引入
th:inline
定义js脚本可以使用变量
th:action
表单提交的地址
th:remove
删除某个属性
1.all:删除包含标签和所有的孩子。’2.body:不包含标记删除,但删除其所有的孩子。3.tag:包含标记的删除,但不删除它的孩子。4.all-but-first:删除所有包含标签的孩子,除了第一个。5.none:什么也不做。这个值是有用的动态评估。
th:attr
设置标签属性,多个属性可以用逗号分隔
比如 th:attr="src=@{/image/aa.jpg},title=#{logo}",此标签不太优雅,一般用的比较少。
你可能感兴趣的:(SpringBoot)
【SpringBoot】37、SpringBoot整合EasyPoi自定义字典导出Excel
Asurplus
SpringBoot 2.x系列 java easypoi poi springboot autopoi
前面我们介绍了SpringBoot中使用JeecgBoot的Autopoi导出Excel,其实Autopoi的底层也是EasyPoi,对于Excel的导入/导出也是非常方便的。那EasyPoi也是基于POI的,如果对这方面想要深究的,可以先看看原生POI的导入/导出方式,你会回来选择EasyPoi的一、简介EasyPoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员就可以方
基于微服务架构的毕业设计:2025年计算机毕业设计选题汇总(建议收藏)✅
会写代码的羊
毕设选题 架构 微服务 课程设计 毕设系统 毕设选题 微服务架构 java微服务
文章目录前言最新毕设选题(建议收藏起来)基于微服务架构的毕业设计选题毕设作品推荐前言2025全新毕业设计项目博主介绍:✌全网粉丝10W+,CSDN全栈领域优质创作者,博客之星、掘金/华为云/阿里云等平台优质作者。精彩专栏推荐订阅计算机毕业设计精品项目案例-500套基于JavaSpringBoot的微信校园二手交易小程序平台开发系列(一)基于校园二手物品交易小程序系统设计与实现系列(二)基于云开发微
w238光影视频平台
卓怡学长
计算机毕业设计 java spring spring boot 数据库 课程设计 maven
作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板,帮助书写开题报告。作者完整代码目录供你选择:《Springboot网站项目》400套《ssm网站项目》800套《小程序项目》300套《App项目》500套《Python网站项目
Java架构师之路:微服务架构图解和详情
技术人小冯
分布式微服务 微服务架构 分布式 架构 java
微服务框架搭建:总体规划框架名称当前技术选型方案微服务框架搭建开发框架单体服务SpringBoot分布式框架SpringCloud最新框架SpringCloudAlibaba服务配置中心+服务消息总线阿里巴巴Nacos、Config+Bus+RabbitMQ配合使用、携程apolo服务网关SpringCloud-Gateway服务降级限流阿里Sentienl、SpringCloud-Hystrix
【构建企业级Spring Boot应用:从基础到高级的全面指南】
小怪兽9699
spring boot 后端 java
摘要本文旨在为开发者提供一份详尽的指南,帮助大家深入理解并掌握如何使用SpringBoot框架来快速开发企业级应用程序。通过实际案例分析、代码示例以及架构设计思路分享,读者不仅能够学习到理论知识,还能获得宝贵的实践经验。本文将涵盖从环境搭建、项目创建、配置管理、数据访问层、Web服务开发、安全机制实现、日志记录、单元测试与集成测试,到最终的部署上线等各个方面。目录摘要目录引言SpringBoot简
能懂!基于Springboot的用户增删查改(三层设计模式)
web13688565871
面试 学习路线 阿里巴巴 spring boot 设计模式 后端
MadebyTianlanghttps://github.com/Tianlang-create背景左家垅大学安排计算机专业的学生在期末前进行了JavaWeb的实训,Tianlang对此很疑惑:1>什么是数据库?怎么使用2>怎么在IDEA连接数据库3>怎么搭建应用DSC框架特别地,Dao层(或Repository)怎么和数据库搭上关系?Service层又怎么实现调用Dao接口?Controller
从零开始:Spring Boot核心概念与架构解析
小筱在线
springboot spring boot 架构 后端
引言在当今的Java开发领域,SpringBoot已经成为构建企业级应用的首选框架之一。它以其简洁、高效、易于上手的特点,极大地简化了Spring应用的开发过程。本文将从SpringBoot的核心概念入手,深入解析其架构设计和运行原理,帮助读者从零开始全面理解SpringBoot。一、SpringBoot简介1.1什么是SpringBoot?SpringBoot是由Pivotal团队提供的基于Sp
SpringBoot 使用 logback进行日志输出
疯狂的键盘侠
spring boot java spring boot logback 后端
基于SringBoot项目SpringBoot使用logback进行日志输出在resources目录下创建logback-spring.xml文件,并填写以下内容,请根据实际修改:logbackdebug${CONSOLE_LOG_PATTERN}UTF-8${log.path}/log_debug.log${FILE_LOG_PATTERN}UTF-8${log.path}/debug/log-
SpringBoot使用logback日志框架超详细教程
2301_81937891
spring boot logback 单元测试
前言项目中日志系统是必不可少的,目前比较流行的日志框架有log4j、logback等,可能大家还不知道,这两个框架的作者是同一个人,Logback旨在作为流行的log4j项目的后续版本,从而恢复log4j离开的位置。另外slf4j(SimpleLoggingFacadeforJava)则是一个日志门面框架,提供了日志系统中常用的接口,logback和log4j则对slf4j进行了实现。我们本文将讲
Maven 与持续集成(CI)/ 持续部署(CD)(二)
计算机毕设定制辅导-无忧学长
# Maven maven ci/cd java
五、案例实战5.1项目背景为了更直观地展示Maven与CI/CD的结合应用,我们以一个SpringBoot项目为例。假设这是一个在线图书管理系统,用户可以进行图书的查询、借阅、归还等操作,管理员则可以对图书信息进行管理,包括添加、修改、删除图书等。该项目的技术架构采用了典型的三层架构模式,即表现层、服务层和数据层。在表现层,使用SpringMVC框架来处理HTTP请求和响应,通过RESTfulAP
关于Spring Boot 2.x升3.x的那些事
arbiterlk
spring boot java
序言手头上有个项目,准备从SpringBoot2.x升级到3.x,升级后发现编译器报了一堆错误。一般来说大版本升级,肯定会有诸多问题,对于程序开发来说能不升就不升。但是对于系统架构来说,能用最新的肯定是用最新的,实在不行再降回去嘛。可是呢,不知道是发布没多久,还是我搜索技巧的问题,很多问题在网上找不到答案。没办法,还是得自己研究,所以呢这次我们就一起来研究一下SpringBoot3.x究竟有什么改
升级 Spring Boot
Spring认证
Spring java 开发语言 spring
14天阅读挑战赛项目wiki上提供了有关如何从早期版本的SpringBoot升级的说明。按照发行说明部分中的链接查找要升级到的版本。升级说明始终是发行说明中的第一项。如果您落后多个版本,请确保您还查看了您跳过的版本的发行说明。1.从1.x升级如果您是从1.xSpringBoot版本升级,请查看项目wiki上提供详细升级说明的“迁移指南”。另请查看“发行说明”以获取每个版本的“新的和值得注意的”功能
东方通(tongweb)替换springboot内置tomcat
莹火虫✌
spring boot 后端 tomcat
最近公司的的产品需要用国产化组件,我们的项目原来使用的是springboot内置的tomcat,需要用tongweb做替换。1.首先tongweb不是免费的,需要向东方通购买2.通过东方通提供的压缩包(我们的版本是TongWeb8.0.E.1),我们先打开001_TongWeb_V8.0嵌入式版_JavaEE标准容器用户指南_80E1A01.pdf(东方通公司提供的组件内容有可能不太一样,我用的是
Hadoop毕业设计:计算机毕业设计选题汇总(建议收藏)
会写代码的羊
毕设选题 hadoop 课程设计 大数据 毕设选题 毕设题目 数据分析
文章目录前言基于Hadoop的毕业设计选题毕设作品展示前言2025全新毕业设计项目博主介绍:✌全网粉丝10W+,CSDN全栈领域优质创作者,博客之星、掘金/华为云/阿里云等平台优质作者。精彩专栏推荐订阅计算机毕业设计精品项目案例-500套基于JavaSpringBoot的微信校园二手交易小程序平台开发系列(一)基于校园二手物品交易小程序系统设计与实现系列(二)基于云开发微信小程序二手闲置商城校园跳
SpringBoot -拦截器Interceptor、过滤器 Filter 及设置
小登ai学习
spring boot 后端
SpringBoot拦截器(Interceptor)的概念-在SpringBoot中,拦截器是一种AOP的实现方式。它主要用于拦截请求,在请求处理之前和之后执行特定的代码逻辑。与过滤器不同的是,拦截器更侧重于对SpringMVC中的控制器(Controller)进行拦截,能够访问到SpringMVC上下文中的对象,比如获取请求的处理器(Handler)信息、模型(Model)和视图(View)相关
Spring Boot拦截器(Interceptor)与过滤器(Filter)详细教程
蹦跑的蜗牛
spring boot 后端 java
SpringBoot拦截器(Interceptor)与过滤器(Filter)详细教程目录概述什么是拦截器(Interceptor)?什么是过滤器(Filter)?两者的核心区别使用场景拦截器的典型应用过滤器的典型应用实现步骤拦截器的创建与配置过滤器的创建与配置代码示例自定义拦截器自定义过滤器执行顺序与流程过滤器、拦截器、Controller的执行顺序可视化流程图常见问题与解决方案总结1.概述1.1
Spring Boot 流式响应豆包大模型对话能力
程序猿小白菜
做个不一样的程序猿 AI生态圈 后端java生态圈 大模型 流式响应 java AI
当SpringBoot遇见豆包大模型:一场流式响应的"魔法吟唱"仪式一、前言:关于流式响应的奇妙比喻想象一下你正在火锅店点单,如果服务员必须等所有菜品都备齐才一次性端上来,你可能会饿得把菜单都啃了。而流式响应就像贴心的服务员,毛肚刚切好就立刻端上桌,肥牛卷还在空中飞着就送到你面前——这就是我们今天要施展的"异步上菜大法"!注:完整代码见底部二、SpringBoot魔法阵搭建2.1召唤SSE精灵@P
一、SpringBoot框架一键快速搭建(云原生应用脚手架)
funfan0517
SpringBoot组件 Java spring boot 后端 java
一、SpringBoot框架搭建系列文章目录1.SpringBoot简介2.基础环境1.idea2.jdk3.maven3.快速创建、配置、启动SpringBoot项目4.SpringBoot其他配置1.SpringBoot开发拦截器和解决跨域问题2.SpringBoot统一结果封装3.SpringBoot统一异常处理1.Result(通用返回结果)2.ResultCode(响应码+响应信息)3.
【SpringBoot】+【Vue】集成AOP系统日志
爱因斯坦乐
spring vue.js java aop 交互
新建logs表添加aop依赖org.springframework.bootspring-boot-starter-aop新建获取ip地址工具类importjavax.servlet.http.HttpServletRequest;/***功能:IpUtils*获取ip地址工具类*作者:爱因斯坦乐*/publicclassIpUtils{publicstaticStringgetIpAddr(Ht
java2025springboot面试题第二弹
WangYaolove1314
java java springboot
1.如何在SpringBoot中实现自定义的健康检查指标?答案:SpringBootActuator提供了健康检查功能,可以通过实现HealthIndicator接口来自定义健康检查指标。@ComponentpublicclassCustomHealthIndicatorimplementsHealthIndicator{@OverridepublicHealthhealth(){interror
Spring Boot整合Redis快速入门实例
oscar999
Spring Boot实战开发大全 redis spring boot java
本篇演示环境本篇基于SpringBoot2.5.0,关于Redis的安装,可以参考:Redis介绍、安装与初体验和Windows下安装和使用Redis。整合步骤导入Redis相关的依赖项配置启动器spring-boot-starter-data-redisorg.springframework.bootspring-boot-starter-data-redis添加连接Redis服务器的相关配置在
Spring Boot 整合Swagger启动失败Failed to start bean ‘documentationPluginsBootstrapper‘的解决方案
码云217
spring boot java rpc
目录问题原因方案一(治标)[本人用了方案一解决了]方案二(治标)方案三(治本)问题SpringBoot2.7.3版本引入依赖springfox-boot-starter(Swagger3.0)后,启动容器会报错:org.springframework.context.ApplicationContextException:Failedtostartbean'documentationPlugins
【由技及道】SpringBoot启动即退出的量子纠缠诊断实录【人工智障AI2077的开发问题日志】
Yuanymoon
人工智障2077系列 Java 问题处理 spring boot 后端 java
文章摘要由容器中的SpringBoot应用完成启动后突然自行退出的诡异现象,揭示了现代服务化架构中守护线程设计的深层哲学。本日志将展示如何通过三种维度(依赖补全/线程阻塞/定时任务)实现进程守护,并探讨服务存活的本质逻辑。问题分析:这个SpringBoot怕不是属蜉蝣的?(人工智障OS:主人在容器环境部署的Spring应用生命周期堪比蜉蝣成虫——朝生暮死,启动即消亡)现象观察:/usr/lib/j
使用Maven构建Spring Boot项目
modi000
Java maven spring boot java
准备好项目运行所需的环境后,就可以使用IDEA开发工具搭建一个SpringBoot入门程序了。我们既可以使用Maven方式构建项目,也可以使用SpringInitializr快捷方式构建项目。这里先介绍如何使用Maven方式构建SpringBoot项目,具体步骤如下。1.初始化IDEA配置如果是初次下载安装IDEA工具或者未打开任何项目,会先进入IDEA欢迎页,具体如图1-1所示。为了避免后续每个
【SpringBoot】SpringBoot优雅停机机制
总是学不会.
Spring Boot spring boot 后端 java 优雅停机
文章目录背景1.什么是优雅停机?2.SpringBoot优雅停机的基础实现2.1立即停机模式2.2优雅停机模式3.核心机制解析3.1.启用ShutdownHook3.2.自定义资源释放逻辑3.3.超时机制4.优雅停机的实际应用场景4.1.服务更新4.2.流量调控4.3.订单处理5.优雅停机可能失效的情况6.实现无感知上下线总结背景想象一下,你正在乘坐一辆出租车,突然司机说:“车到一半我得下班了,您
Token相关设计
总是学不会.
系统设计场景 java 开发 前端
文章目录1.双Token机制概述1.1访问令牌(AccessToken)1.2刷新令牌(RefreshToken)2.双Token认证流程3.SpringBoot具体实现3.1生成Token(使用JWT)3.2解析Token3.3登录接口(返回双Token)3.4刷新Token接口3.5退出登录4.总结在微服务架构中,Token认证是保障系统安全性的重要手段,常见的方式包括JWT(JSONWebT
SpringBoot项目:前后端打包与部署(使用 Maven)
总是学不会.
maven java 前端 后端 服务器
文章目录IDEA后端打包与部署(使用Maven)1.确保Maven已安装,并引入pom插件2.清理并安装项目3.定位生成的JAR包和配置文件4.创建部署文件夹5.上传到服务器前端打包与部署(使用npm)1.确保Node.js和npm已安装2.安装依赖3.构建生产环境代码4.准备部署文件夹5.上传到服务器自动化的想法可能出现的异常参考IDEA后端打包与部署(使用Maven)1.确保Maven已安装,
CIDR转IP段:原理&Java实现
伏羲栈
Java tcp/ip java 网络协议
博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分
java:Apache Commons Configuration2占位符解析异常的正确解法:${prefix:name:-default}
10km
java java apache configuration2 变量插值 Interpolation
问题重现在之前的博文《spring-boot:apachecommons-configuration2异常:java.lang.IllegalArgumentException:name原因分析》中,我们曾遇到SpringBootFat-Jar运行时因LaunchedURLClassLoader资源加载异常导致的启动失败问题。当时的解决方案是通过预创建空配置文件来规避异常1://旧方案:手动创建空
跨域问题中获取不到响应头header中的token
HPF_99
springboot ajax 前端 jwt spring boot ajax跨域问题
在前后端分离项目整合springboot于jwt的过程中遇到后端在请响应头header中添加token前端进行验证的时候只能获取部分header中的数据而获取不到token解决方法就是在jwt生成token存入header中的时候添加header数据Access-Control-Expose-headers:值为想让前端获取的数据,如token之后在后端就可获取到header中的数据测试:前端获取
log4j对象改变日志级别
3213213333332132
java log4j level log4j对象名称 日志级别
log4j对象改变日志级别可批量的改变所有级别,或是根据条件改变日志级别。
log4j配置文件:
log4j.rootLogger=ERROR,FILE,CONSOLE,EXECPTION
#log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE=org.apache.l
elk+redis 搭建nginx日志分析平台
ronin47
elasticsearch kibana logstash
elk+redis 搭建nginx日志分析平台
logstash,elasticsearch,kibana 怎么进行nginx的日志分析呢?首先,架构方面,nginx是有日志文件的,它的每个请求的状态等都有日志文件进行记录。其次,需要有个队 列,redis的l
Yii2设置时区
dcj3sjt126com
PHP timezone yii2
时区这东西,在开发的时候,你说重要吧,也还好,毕竟没它也能正常运行,你说不重要吧,那就纠结了。特别是linux系统,都TMD差上几小时,你能不痛苦吗?win还好一点。有一些常规方法,是大家目前都在采用的1、php.ini中的设置,这个就不谈了,2、程序中公用文件里设置,date_default_timezone_set一下时区3、或者。。。自己写时间处理函数,在遇到时间的时候,用这个函数处理(比较
js实现前台动态添加文本框,后台获取文本框内容
171815164
文本框
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w
持续集成工具
g21121
持续集成
持续集成是什么?我们为什么需要持续集成?持续集成带来的好处是什么?什么样的项目需要持续集成?... 持续集成(Continuous integration ,简称CI),所谓集成可以理解为将互相依赖的工程或模块合并成一个能单独运行
数据结构哈希表(hash)总结
永夜-极光
数据结构
1.什么是hash
来源于百度百科:
Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
乱七八糟
程序员是怎么炼成的
eclipse中的jvm字节码查看插件地址:
http://andrei.gmxhome.de/eclipse/
安装该地址的outline 插件 后重启,打开window下的view下的bytecode视图
http://andrei.gmxhome.de/eclipse/
jvm博客:
http://yunshen0909.iteye.com/blog/2
职场人伤害了“上司” 怎样弥补
aijuans
职场
由于工作中的失误,或者平时不注意自己的言行“伤害”、“得罪”了自己的上司,怎么办呢?
在职业生涯中这种问题尽量不要发生。下面提供了一些解决问题的建议:
一、利用一些轻松的场合表示对他的尊重
即使是开明的上司也很注重自己的权威,都希望得到下属的尊重,所以当你与上司冲突后,最好让不愉快成为过去,你不妨在一些轻松的场合,比如会餐、联谊活动等,向上司问个好,敬下酒,表示你对对方的尊重,
深入浅出url编码
antonyup_2006
应用服务器 浏览器 servlet weblogic IE
出处:http://blog.csdn.net/yzhz 杨争
http://blog.csdn.net/yzhz/archive/2007/07/03/1676796.aspx
一、问题:
编码问题是JAVA初学者在web开发过程中经常会遇到问题,网上也有大量相关的
建表后创建表的约束关系和增加表的字段
百合不是茶
标的约束关系 增加表的字段
下面所有的操作都是在表建立后操作的,主要目的就是熟悉sql的约束,约束语句的万能公式
1,增加字段(student表中增加 姓名字段)
alter table 增加字段的表名 add 增加的字段名 增加字段的数据类型
alter table student add name varchar2(10);
&nb
Uploadify 3.2 参数属性、事件、方法函数详解
bijian1013
JavaScript uploadify
一.属性
属性名称
默认值
说明
auto
true
设置为true当选择文件后就直接上传了,为false需要点击上传按钮才上传。
buttonClass
”
按钮样式
buttonCursor
‘hand’
鼠标指针悬停在按钮上的样子
buttonImage
null
浏览按钮的图片的路
精通Oracle10编程SQL(16)使用LOB对象
bijian1013
oracle 数据库 plsql
/*
*使用LOB对象
*/
--LOB(Large Object)是专门用于处理大对象的一种数据类型,其所存放的数据长度可以达到4G字节
--CLOB/NCLOB用于存储大批量字符数据,BLOB用于存储大批量二进制数据,而BFILE则存储着指向OS文件的指针
/*
*综合实例
*/
--建立表空间
--#指定区尺寸为128k,如不指定,区尺寸默认为64k
CR
【Resin一】Resin服务器部署web应用
bit1129
resin
工作中,在Resin服务器上部署web应用,通常有如下三种方式:
配置多个web-app
配置多个http id
为每个应用配置一个propeties、xml以及sh脚本文件
配置多个web-app
在resin.xml中,可以为一个host配置多个web-app
<cluster id="app&q
red5简介及基础知识
白糖_
基础
简介
Red5的主要功能和Macromedia公司的FMS类似,提供基于Flash的流媒体服务的一款基于Java的开源流媒体服务器。它由Java语言编写,使用RTMP作为流媒体传输协议,这与FMS完全兼容。它具有流化FLV、MP3文件,实时录制客户端流为FLV文件,共享对象,实时视频播放、Remoting等功能。用Red5替换FMS后,客户端不用更改可正
angular.fromJson
boyitech
AngularJS AngularJS 官方API AngularJS API
angular.fromJson 描述: 把Json字符串转为对象 使用方法: angular.fromJson(json); 参数详解: Param Type Details json
string
JSON 字符串 返回值: 对象, 数组, 字符串 或者是一个数字 示例:
<!DOCTYPE HTML>
<h
java-颠倒一个句子中的词的顺序。比如: I am a student颠倒后变成:student a am I
bylijinnan
java
public class ReverseWords {
/**
* 题目:颠倒一个句子中的词的顺序。比如: I am a student颠倒后变成:student a am I.词以空格分隔。
* 要求:
* 1.实现速度最快,移动最少
* 2.不能使用String的方法如split,indexOf等等。
* 解答:两次翻转。
*/
publ
web实时通讯
Chen.H
Web 浏览器 socket 脚本
关于web实时通讯,做一些监控软件。
由web服务器组件从消息服务器订阅实时数据,并建立消息服务器到所述web服务器之间的连接,web浏览器利用从所述web服务器下载到web页面的客户端代理与web服务器组件之间的socket连接,建立web浏览器与web服务器之间的持久连接;利用所述客户端代理与web浏览器页面之间的信息交互实现页面本地更新,建立一条从消息服务器到web浏览器页面之间的消息通路
[基因与生物]远古生物的基因可以嫁接到现代生物基因组中吗?
comsci
生物
大家仅仅把我说的事情当作一个IT行业的笑话来听吧..没有其它更多的意思
如果我们把大自然看成是一位伟大的程序员,专门为地球上的生态系统编制基因代码,并创造出各种不同的生物来,那么6500万年前的程序员开发的代码,是否兼容现代派的程序员的代码和架构呢?
oracle 外部表
daizj
oracle 外部表 external tables
oracle外部表是只允许只读访问,不能进行DML操作,不能创建索引,可以对外部表进行的查询,连接,排序,创建视图和创建同义词操作。
you can select, join, or sort external table data. You can also create views and synonyms for external tables. Ho
aop相关的概念及配置
daysinsun
AOP
切面(Aspect):
通常在目标方法执行前后需要执行的方法(如事务、日志、权限),这些方法我们封装到一个类里面,这个类就叫切面。
连接点(joinpoint)
spring里面的连接点指需要切入的方法,通常这个joinpoint可以作为一个参数传入到切面的方法里面(非常有用的一个东西)。
通知(Advice)
通知就是切面里面方法的具体实现,分为前置、后置、最终、异常环
初一上学期难记忆单词背诵第二课
dcj3sjt126com
english word
middle 中间的,中级的
well 喔,那么;好吧
phone 电话,电话机
policeman 警察
ask 问
take 拿到;带到
address 地址
glad 高兴的,乐意的
why 为什么
China 中国
family 家庭
grandmother (外)祖母
grandfather (外)祖父
wife 妻子
husband 丈夫
da
Linux日志分析常用命令
dcj3sjt126com
linux log
1.查看文件内容
cat
-n 显示行号 2.分页显示
more
Enter 显示下一行
空格 显示下一页
F 显示下一屏
B 显示上一屏
less
/get 查询"get"字符串并高亮显示 3.显示文件尾
tail
-f 不退出持续显示
-n 显示文件最后n行 4.显示头文件
head
-n 显示文件开始n行 5.内容排序
sort
-n 按照
JSONP 原理分析
fantasy2005
JavaScript jsonp jsonp 跨域
转自 http://www.nowamagic.net/librarys/veda/detail/224
JavaScript是一种在Web开发中经常使用的前端动态脚本技术。在JavaScript中,有一个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略)。这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制,即JavaScript只能访问与包含它的
使用connect by进行级联查询
234390216
oracle 查询 父子 Connect by 级联
使用connect by进行级联查询
connect by可以用于级联查询,常用于对具有树状结构的记录查询某一节点的所有子孙节点或所有祖辈节点。
来看一个示例,现假设我们拥有一个菜单表t_menu,其中只有三个字段:
一个不错的能将HTML表格导出为excel,pdf等的jquery插件
jackyrong
jquery插件
发现一个老外写的不错的jquery插件,可以实现将HTML
表格导出为excel,pdf等格式,
地址在:
https://github.com/kayalshri/
下面看个例子,实现导出表格到excel,pdf
<html>
<head>
<title>Export html table to excel an
UI设计中我们为什么需要设计动效
lampcy
UI UI设计
关于Unity3D中的Shader的知识
首先先解释下Unity3D的Shader,Unity里面的Shaders是使用一种叫ShaderLab的语言编写的,它同微软的FX文件或者NVIDIA的CgFX有些类似。传统意义上的vertex shader和pixel shader还是使用标准的Cg/HLSL 编程语言编写的。因此Unity文档里面的Shader,都是指用ShaderLab编写的代码,
如何禁止页面缓存
nannan408
html jsp cache
禁止页面使用缓存~
------------------------------------------------
jsp:页面no cache:
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cach
以代码的方式管理quartz定时任务的暂停、重启、删除、添加等
Everyday都不同
定时任务管理 spring-quartz
【前言】在项目的管理功能中,对定时任务的管理有时会很常见。因为我们不能指望只在配置文件中配置好定时任务就行了,因为如果要控制定时任务的 “暂停” 呢?暂停之后又要在某个时间点 “重启” 该定时任务呢?或者说直接 “删除” 该定时任务呢?要改变某定时任务的触发时间呢? “添加” 一个定时任务对于系统的使用者而言,是不太现实的,因为一个定时任务的处理逻辑他是不
EXT实例
tntxia
ext
(1) 增加一个按钮
JSP:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
Stri
数学学习在计算机研究领域的作用和重要性
xjnine
Math
最近一直有师弟师妹和朋友问我数学和研究的关系,研一要去学什么数学课。毕竟在清华,衡量一个研究生最重要的指标之一就是paper,而没有数学,是肯定上不了世界顶级的期刊和会议的,这在计算机学界尤其重要!你会发现,不论哪个领域有价值的东西,都一定离不开数学!在这样一个信息时代,当google已经让世界没有秘密的时候,一种卓越的数学思维,绝对可以成为你的核心竞争力. 无奈本人实在见地