一、Thymeleaf简介以及引入
Spring Boot推荐使用Thymeleaf模板引擎来做前端动态页面,它用来替代jsp。 模板引擎作用: 我们先编写一个前端页面模板,页面模板上需要动态数据的写上模板引擎规定的表达式,然后模板引擎解析后端传入的数据,根据前端页面模板上的表达式,将数据填充到页面模板上的指定位置,形成动态页面。
Thymeleaf简介: Thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎。类似JSP,Velocity,FreeMaker等,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用的模板引擎。与其它模板引擎相比,Thymeleaf最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个Web应用。Thymeleaf旨在提供⼀个优雅的、⾼度可维护的创建模板的⽅式。 为了实现这⼀⽬标,Thymeleaf建⽴在⾃然模板的概念上,将其逻辑注⼊到模板⽂件中,不会影响模板设计原型。 Thymeleaf引入(Maven): Spring Boot有专门的starter引入Thymeleaf:spring-boot-starter-thymeleaf,可以去Spring Boot官方文档starter章节查看。
org.springframework.boot
spring-boot-starter-thymeleaf
3.0.9.RELEASE
2.2.2
Thymeleaf使用: 我们去找autoconfigure.jar包里的org.springframework.boot.autoconfigure.thymeleaf包下的ThymeleafAutoConfiguration类,它是Thymeleaf的自动配置类
@Configuration
@EnableConfigurationProperties(ThymeleafProperties.class)
@ConditionalOnClass(TemplateMode.class)
@AutoConfigureAfter({ WebMvcAutoConfiguration.class, WebFluxAutoConfiguration.class })
public class ThymeleafAutoConfiguration {
@EnableConfigurationProperties(ThymeleafProperties.class)引入了Thymeleaf的配置类,有关Thymeleaf的相关配置都在这
@ConfigurationProperties(prefix = "spring.thymeleaf")
public class ThymeleafProperties {
private static final Charset DEFAULT_ENCODING = StandardCharsets.UTF_8;
//前缀
public static final String DEFAULT_PREFIX = "classpath:/templates/";
//后缀
public static final String DEFAULT_SUFFIX = ".html";
/**
* Prefix that gets prepended to view names when building a URL.
*/
private String prefix = DEFAULT_PREFIX;
/**
* Suffix that gets appended to view names when building a URL.
*/
private String suffix = DEFAULT_SUFFIX;
/**
* Template mode to be applied to templates. See also Thymeleaf's TemplateMode enum.
*/
private String mode = "HTML";
从这就可以知道只要把HTML页面放在classpath:/templates/目录下,thymeleaf就能自动渲染。这些配置我们可以在配置文件中使用spring.thymeleaf改掉。 我们在写thymeleaf页面模板的的时候需要导入名称空间:
如果使用eclipse开发需要安装Thymeleaf插件才能有提示功能。 1、在线安装: 方法一:点击Help>Install New Software>add,然后Location输入http://www.thymeleaf.org/eclipse-plugin-update-site/;name随意。然后一路next即可。 方法二:点击Help>Eclipse Marketplace,输入Thymeleaf查找,找到后点击Install。 2、离线安装: 方法一:下载Thymeleaf插件,点击Help>Install New Software>add,点击Location选择插件压缩包,然后一路next。插件下载链接: https://pan.baidu.com/s/1C-GtRUcGzvr7GzZMMvDFeQ 提取码: wknb。 方法二:下载Thymeleaf插件解压,然后再eclipse安装目录下新建一个文件夹,将Thymeleaf插件解压后的文件放入这个文件夹中,再新建一个links文件夹,新建Thymeleaf.link文件,里面内容:
path=D:/Eclipse-SpringTools/sts-bundle/sts-3.7.1.RELEASE/myplugins/thymeleaf-extras-eclipse-plugin-2.1.2
然后重启eclipse即可。
二、Thymeleaf语法简介
Thymeleaf官网下载Thymeleaf官方文档(https://www.thymeleaf.org/documentation.html) 选择3.0版本的pdf下载即可。或者下载中文文档,链接: https://pan.baidu.com/s/1z5hbKIN3xRoLf1QncblKmA 提取码: 8qqm Thymeleaf简单示例:
Test
这是显示欢迎信息
这章示例来源:Thymeleaf官方文档。
1、th语法
1.1 设置属性值
(1)设置任何属性: 可以使用th:attr来设置,多个属性中间使用逗号分隔,示例:
属性也可以使用:th:任意html属性,来设置。作用和上面一样。它可以用来替换原生属性的值(即使在标准⽅⾔中没有为其定义特定的th:*处理器)。示例:
推荐使用第二种方式的写法。
(2)前缀和后缀 Thymeleaf还提供th:attrprepend和th:attrappend属性,它们为现有属性值设置前缀和后缀。
Thymeleaf标准⽅⾔中还有两个特定的附加属性:th:classappend和th:styleappend属性,⽤于将CSS类或样式⽚段添加到元素中,⽽不覆盖现有属性。示例:
(3)固定值的布尔属性 HTML具有布尔属性的概念,这个布尔属性没有值,并且⼀旦这个布尔属性存在则意味着属性值为“true”。但是在XHTML中,这些属性只取⼀个值,这个属性值就是它本身。例如:checked,selected等
Thymeleaf标准⽅⾔允许您通过计算条件表达式的结果来设置这些属性的值,如果条件表达式结果为true,则该属性将被设置为其固定值,如果评估为false,则不会设置该属性。
(4)HTML5友好属性语法 hymeLeaf还⽀持HTML5友好属性语法来处理模版。
data-th-each相当于th:each。
1.2 循环
(1)基本语法 ThymeLeaf使用th:each语法来进行循环遍历,相当于jsp中的c:forEach。示例:
Onions
2.41
yes
我们称$ {prods}迭代表达式或被迭代变量;prod为迭代变量或简单的iter变量。,prod iter变量的作⽤域为元素,这意味着它可⽤于内部标记,如
。 (2)迭代状态 当使⽤th:each时,Thymeleaf提供了⼀种⽤于跟踪迭代状态的机制:状态变量。状态变量在每个th:each属性中定义,并包含以下数据:
当前迭代索引,从0开始。这是index属性。
当前的迭代索引,从1开始。这是count属性。
迭代变量中元素的总量。 这是size属性。
每次迭代的iter变量。 这是current属性。
当前的迭代是偶数还是奇数。 这些是even/odd布尔属性。
当前的迭代是否是第⼀个迭代。 这是first布尔属性。
当前的迭代是否是最后⼀个迭代。 这是last布尔属性。 示例:
Onions
2.41
yes
迭代状态变量(本示例中的iterStat)在th:each属性中通过在iter变量本身之后直接写其名称来定义,⽤逗号分隔。 就像iter变量⼀样,状态变量的作⽤范围也是th:each属性的标签定义的代码⽚段中。如果没有显式地设置状态变量,则Thymeleaf将始终为您创建⼀个默认的迭代变量,该状态迭代变量名称为:迭代变量+“Stat”。(本例中则是prodStat)
1.3 条件判断
Thymeleaf使用th:if语法来做条件判断。当表达式满⾜某个条件,才将⼀个模板⽚段显示在结果中。示例:
view
th:if属性不仅只以布尔值作为判断条件,它将按照这些规则判定指定的表达式值为true:
如果表达式的值不为null:
如果值为布尔值,则为true。
如果值是数字,并且不为零
如果值是⼀个字符且不为零
如果value是String,⽽不是“false”,“off”或“no”
如果值不是布尔值,数字,字符或字符串。
th:if还有⼀个反向属性,th:unless,我们可以在前⾯的例⼦中使⽤:
view
(2)switch语法 示例:
User is an administrator
User is a manager
请注意,只要第⼀个th:case的值为true,则同⼀个switch语句中的其他th:case属性将被视为false。switch语句的default选项指定为th:case =“*”:
User is an administrator
User is a manager
User is some other thing
1.4模板布局语法
(1)声明模板片段及引用 在我们的模板中,我们经常希望从其他模板中包含⼀些部分,如⻚脚,⻚眉,菜单等部分。Thymeleaf使⽤th:fragment属性来定义被包含的模版⽚段,以供其他模版引用。我们在一个名为footer.html模板页加入下面这段代码:
© 2011 The Good Thymes Virtual Grocery
这段代码声明了一个名为copy的片段,我们可以使⽤th:insert或th:replace属性(以及th:include,尽管Thymeleaf 3.0不再推荐使⽤它),容易地包含在我们的主⻚中:
或者:
〜{…}称为片段表达式,它是可选的(上面第二种写法)。 片段表达式语法:
“〜{templatename :: selector}”:templatename是模板名(加上路径),selector是选择器,可以是片段名,也可以使用css选择器的方式说明,例如:"#id"、".class"。具体见Thymeleaf官方文档附录C。
“〜{templatename}” :包含名为templatename的整个模板。
〜{:: selector}“或”〜{this :: selector}“ :包含在同⼀模板中的匹配指定选择器的⽚段。
⽚段可以包含任何th:*属性。 ⼀旦将⽚段包含在⽬标模板(具有th:insert /th:replace属性的模板)中,这些属性将被计算属性表达式的值,并且它们将能够引⽤此⽬标模板中定义的任何上下⽂变量 。
th:insert和th:replace(th:include)之间的区别
th:insert是最简单的:它将简单地插⼊指定宿主标签的标签体中。
th:replace实际上⽤指定的⽚段替换其宿主标签。
th:include类似于th:insert,⽽不是插⼊⽚段,它只插⼊此⽚段的内容。 示例:
copy片段:
© 2011 The Good Thymes Virtual Grocery
结果:
© 2011 The Good Thymes Virtual Grocery
© 2011 The Good Thymes Virtual Grocery
© 2011 The Good Thymes Virtual Grocery
(2)片段参数 Thymeleaf支持在定义片段名的时候给他加上参数,相当于函数的形参。在使用th:insert和th:replace(th:include)时,给参数赋值,相当于实参。
...
...
即使⽚段没有定义参数:
我们也可以使用第二种语法(必须这种)来调用:
那么我们在片段中(即使不在同一个模板中)也同样可以使用${onevar}和${twovar}的方式调用这两个变量。等价于th:replace和th:with的组合:
th:with是声明变量用的。
(3)删除模板片段 Thymeleaf使用th:remove语法来做删除模板中不需要的片段。假设我们在做模板时需要加上一些模拟数据,方便在静态页面展示时用,而当正式使用模板引擎生成页面时不需要这些模拟数据时,就可以使用th:remove语法来删除这些模拟的模板片段。示例:
Mild Cinnamon
1.99
yes
3 comment/s
view
当生成动态页面时,这段代码就会被删除。 th:remove参数:
all:删除包含标签及其所有⼦项。
body:不要删除包含的标签,但删除所有的⼦项。
tag:删除包含的标签,但不要删除其⼦项。
all-but-first:删除除第⼀个包含标签之外的所有⼦代。
none:什么都不做。 该值对于动态计算是有⽤的。
th:remove将null视为none
1.5 局部变量
Thymeleaf中的局部变量是指定义在模版⽚段中的变量,并且该变量的作⽤域为所在的模版⽚段。示例:
...
prod 迭代变量就是⼀个局部变量,仅在
标签的范围内可⽤。
它可⽤于在该标签中执⾏的优先级低于th:each的任何其他th:*属性(这意味着它们将在th:each之后执⾏)。
它可⽤于标签的任何⼦元素,例如任何元素。
Thymeleaf提供了⼀种声明局部变量的⽅式,就是th:with,相当于jsp中的c:set。示例:
The name of the first person is Julius Caesar .
当th:with被处理时,firstPer变量被创建为局部变量并被添加到来⾃上下⽂map中,以便它可以与上下⽂中声明的任何其他变量⼀起使⽤,但只能在包含在
标签内使⽤。
1.6 属性的优先级
当在同⼀个标签中写⼊多于⼀个的th:*属性时,Thymeleaf会按照属性定义的数字优先级来解析属性。优先级列表如下:
Order
Feature
Attributes
1
Fragment inclusion 片段包含
th:insert th:replace
2
Fragment iteration 循环迭代
th:each
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 bodymodification) 修改标签体内容
th:text(转义特殊字符) th:utext(不转义特殊字符)
8
Fragment specification 声明片段
th:fragment
9
Fragment removal 删除片段
th:remove
1.7内联
(1)内联表达式 有时候我们需要把表达式写在HTML文本中,而不是标签体内。Thymeleaf提供[[…]]或[(…)]的写法来实现,[[…]]相当于t:text会转义特殊字符 、[(…)]相当于t:utext不会转义特殊字符。示例:
[[${msg}]]
[(${msg})]
假设msg =’
你好! ’,那么[[…]]在页面上就是显示的“
你好! “,[(…)]则是一个大标题显示的”你好!“。
禁用内联:th:inline =“none”。当我们需要输出[[…]]或[(…)]序列⽽不将其内容作为表达式处理的情况时。
A double array looks like this: [[1, 2, 3], [4, 5]]!
A double array looks like this: [[1, 2, 3], [4, 5]]!
(2)内联JavaScript和css 示例:
2、表达式语法
简单表达式:
变量表达式:$ {…}
选择变量表达式:* {…}
消息表达式:#{…}
链接⽹址表达式:@ {…}
⽚段表达式:〜{…}
字面量
文本 :‘one text’ , ‘Another one!’
数字字⾯值:0,34,3.0,12.3,…
布尔⽂字:true,false
null
⽂字Token:one,sometext,main,…
⽂本操作
字符串连接:+
⽂本替换:|The name is ${name}|
算术运算符
⼆进制运算符:+,-,*,/,%
负号(⼀元运算符):-
布尔运算符
⼆进制运算符:and 、or
布尔否定(⼀元运算符):!,not
⽐较和相等运算符:
⽐较运算符:>,<,> =,<=(gt,lt,ge,le)
相等运算符:==,!=(eq,ne)
条件运算符:
If-then:(if) ? (then)
If-then-else:(if) ? (then) : (else)
Default:(value) ?: (defaultvalue)
特殊符号:
'User is of type ' + (${user.isAdmin()} ? 'Administrator': (${user.type} ?: 'Unknown'))
2.1 消息表达式#{…}
Thymeleaf使用#{…}作为消息表达式,所谓消息其实就是从配置文件中取出的变量。一般用来做国际化功能。示例:
Welcome to our grocery store!
home.welcome是在配置文件中配置的。
2.2变量表达式${}
$ {…}表达式实际上是在上下⽂中包含的变量的映射上执⾏的OGNL(Object-Graph Navigation Language)对象。 示例:
对象:
${person.father.name}
${person['father']['name']}
map:
${countriesByCode.ES}
${personsByName['Stephen Zucchini'].age}
数组/list:
${personsArray[0].name}
调用对象的方法:
${person.createCompleteName()}
${person.createCompleteNameWithSeparator('-')}
内置基本表达式对象: 从#符号开始:
#ctx:上下⽂对象。
#vars:上下⽂变量。
#locale:上下⽂区域设置。
#request :(仅在Web Contexts中)HttpServletRequest对象。
#response:(仅在Web上下⽂中)HttpServletResponse对象。
#session :(仅在Web上下⽂中)HttpSession对象。
#servletContext :(仅在Web上下⽂中)ServletContext对象。
示例:
获取国家信息:
US
具体调用可以参照官方文档附录A。
工具表达式对象: Thymeleaf将为我们提供⼀组⼯具对象:
#execInfo:有关正在处理的模板的信息。
#messages:⽤于在变量表达式中获取外部化消息的⽅法,与使⽤#{…}语法获得的⽅式相同。
#uris:转义URL / URI部分的⽅法
#conversions:执⾏配置的转换服务(如果有的话)的⽅法。
#dates:java.util.Date对象的⽅法:格式化,组件提取等
#calendars:类似于#dates,但对于java.util.Calendar对象。
#numbers:⽤于格式化数字对象的⽅法。
#strings:String对象的⽅法:contains,startsWith,prepending/appending等
#objects:⼀般对象的⽅法。
#bools:布尔评估的⽅法。
#arrays:数组的⽅法。
#lists:列表的⽅法。
#sets:集合的⽅法。
#maps:地图⽅法。
#aggregates:在数组或集合上创建聚合的⽅法。
#ids:处理可能重复的id属性的⽅法(例如,作为迭代的结果)。
具体调用参考官方文档附录B
2.3 选择表达式*{} *{}和${}基本相同,只有一个区别:星号语法计算所选对象⽽不是整个上下⽂的表达式。 也就是说,只要没有选定的对象,$和*语法就会完全相同。示例:
Name: Sebastian .
Surname: Pepper .
Nationality: Saturn .
等价于:
Name: Sebastian .
Surname: Pepper .
Nationality: Saturn .
或者:
如果没有执⾏对象选择,则$和星号语法是等效的。
2.4 URL链接表达式@{}
示例:
view
view
view
注意:
如果需要⼏个参数,这些参数将以逗号分隔:@ {/ order /process(execId = $ {execId},execType =‘FAST’)}
以/开头的相对URL(例如:/ order / details)将⾃动以应⽤程序上下⽂名称为前缀。
URL路径中也允许使⽤变量模板:@ {/ order / {orderId} /details(orderId = $ {orderId})}
2.5 片段引用表达式~{}
示例:
...
2.6 字面量
(1)纯⽂本 ⽂本⽂字只是包含在单引号之间的字符串。 它们可以包含任何字符,但是应该使⽤’转义其中的任何单引号。
Now you are looking at a template file .
(2)数字
The year is 1492 .
In two years, it will be 1494 .
(3)布尔 布尔字⾯量包含true和false。
== false被写在⼤括号之外,所以它是Thymeleaf来处理的。如果它是写在⼤括号内,那将是OGNL / SpringEL引擎的责任。 (4)NULL
(5)⽂本符号 和纯文本类似,但是没有单引号引起来。只允许使⽤字⺟(A-Z和a-z),数字(0-9),括号([和]),点(.),连字符( - ) 和下划线(_)。 所以没有空⽩,没有逗号等。
...
2.7 文本操作
(1)追加⽂本
(2)文本替换 ⽂本替换允许容易地格式化包含变量值的字符串,⽽不需要使⽤“…”+“…”附加⽂字。
等价与:
只有变量/消息表达式($ {…},* {…},#{…})才允许包含在|…|中来实现⽂本替换。 其他情况则不允许,如⽂本(’…’),布尔/数字令牌,条件表达式等。
2.8 算术运算符
Thyme Leaf标准表达式还⽀持⼀些算术运算:+, - ,*,/和%
请注意,这些运算符也可以在OGNL变量表达式本身中应⽤(在这种情况下将由OGNL解析执⾏,⽽不是Thymeleaf标准表达式引擎来解析执⾏。
其中⼀些运算符存在⽂本别名:div(/),mod(%)
2.9 比较和等值运算符
表达式中的值可以与>,<,> =和<=符号进⾏⽐较,并且可以使⽤==和!=运算符来检查是否相等(或缺少)。 请注意,XML类型的模版中不应在属性值中使⽤<和>符号,应该使⽤&lt; 和&gt;。
⼀个更简单的替代⽅案是使⽤这些运算符的⽂本别名:gt(>),lt(<),ge(> =),le(<=),⾮(!)。 还有eq(==),neq /ne(!=)。
2.10 条件表达式
...
条件表达式(condition,then和else)的三个部分都有⾃⼰的表达式,这意味着它们可以是变量($ {…},* {…}),消息(#{…}) ,URL(@{…})或⽂字(’…’)。 条件表达式也可以使⽤括号嵌套:
...
Else表达式也可以省略,在这种情况下,如果条件为false,则返回null值:
...
`在这里插入代码片`
2.11 默认表达式
默认表达式是⼀种特殊类型的条件值,没有then那个部分。允许您指定两个表达式:如果计算结果不为null,则使⽤第⼀个表达式,但如果计算结果为null则使⽤第⼆个表达式。
age不为null,则是age的值,否则就是no age specified。 可以在括号之间包含嵌套表达式:
Name:
Sebastian
2.12 哑操作符号
哑操作符号由下划线符号(_)表示。这个标记指定表达式不处理任何结果,即相当于可执⾏的属性(例如:⽂ 本)不存在⼀样。
no user authenticated
你可能感兴趣的:(Spring,Boot)
SpringMVC设置全局异常处理器
水岸齐天
java spring
文章目录背景分析使用@ControllerAdvice(@RestControllerAdvice)+@ExceptionHandler实现全局异常全局异常处理-多个处理器匹配顺序存在一个类中存在不同的类中对于过滤器和拦截器中的异常,有两种思路可以考虑背景在项目中我们有需求做一个全局异常处理,来规范所有出去的异常信息。参考:官方文档分析首先ControllerAdvice(RestControll
使用多线程的方式模拟高并发请求接口,用于自测接口的稳定性【项目】
还算善良_
私有代码库 工具类 java list 数据结构
packagecom.gitee.taven.test;importcom.gitee.taven.ApiResult;importcom.gitee.taven.aop.RepeatSubmitAspect;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.beans.factory.an
springboot集成logback-spring.xml文件
RT_0114
SpringBoot spring boot spring logback
彩色日志日志分debug和error文件输出,方便开发人员运维日志限制最大保管天数日志限制总量大小占用量GB日志限制单个文件大小MB日志显示最大保留天数屏蔽没用的日志${CONSOLE_LOG_PATTERN}${log.path}/debug.log${log.path}/%d{yyyy-MM-dd,aux}/debug.%d{yyyy-MM-dd}.%i.log.gz1024MB50GB365
eclipse导入项目 warning报错 org.springframework.ide.eclipse.core.springnature
zhangfeng1133
ide eclipse java
报错org.springframework.ide.eclipse.core.springnature报错信息"org.springframework.ide.eclipse.core.springnature"通常表示EclipseIDE中与Spring框架集成的插件出现了问题。这个错误可能是因为SpringIDE插件没有正确安装或配置,或者Eclipse的更新过程中出现了问题。解决方法:确认S
linux安装docker及docker-compose 部署spring boot项目
时而有事儿
docker linux docker linux spring boot
linux系统环境:centos5.14本篇描述的是在centos系统版本下安装docker,如果是ubuntu版本,请看这篇文章:linuxubuntu20安装docker和docker-compose-CSDN博客正文:安装docker和docker-compose安装docker---------运行命名等待安装完成遇到选择直接输入yyuminstall-yyum-utilsdevice-m
Thinkphp - 详细实现网站系统登录功能,附带 Mysql 数据库设置、Web 前端展示界面、信息校验等(详细代码,即设计过程)
王佳斌
+ Thinkphp mysql 前端 数据库
前言登录功能,是我们几乎开发每个系统都必须的模块。登录功能设计思路,主要包括几个方面。用户输入网址展示登录页面用户输入用户名,密码等点击登录进行信息校验校验通过之后,记录用户登录信息,跳转指定页面用户校验失败,提示失败信息页面目录具体功能实现为了快速搭建可用、美观的页面,我们采用一个比较成熟的前端框架Bootstrap。下面我们到Bootstrap的官网Bootsrap官网下载bootstrap。
程序员开发技术整理
laizhixue
学习 前端框架
前端技术:vue-前端框架element-前端框架bootstrap-前端框架echarts-图标组件C#后端技术:webservice:soap架构:简单的通信协议,用于服务通信ORM框架:对象关系映射,如EF:对象实体模型,是ado.net中的应用技术soap服务通讯:xml通讯ado.net:OAuth2:登录授权认证:Token认证:JWT:jsonwebtokenJava后端技术:便捷工
SAP Spartacus的Component映射
JerryWang_汪子熙
Spartacus默认的购物车界面:https://github.com/SAP/spartacus-bootcamp/blob/master/sparta0/src/app/components/cart.component.ts新建一个CartComponent,对Spartacus标准的CartDetailsComponent进行扩展:import{Component}from'@angul
Websocket服务监听收发消息
beiback
Java 服务器问题 websocket 网络协议 网络
目录1.pom依赖坐标2.项目配置端口和项目包名2.创建处理器3.注册处理器4.前端页面1.pom依赖坐标org.springframework.bootspring-boot-starter-websocket2.项目配置端口和项目包名application.propertiesserver.port=8088//路径规范:为应用的所有servlet提供一个统一的前缀,使URL结构更加清晰和一致
基于SSM+Vue企业销售培训系统 企业人才培训系统 企业课程培训管理系统 企业文化培训班系统Java
计算机程序老哥
作者主页:计算机毕业设计老哥有问题可以主页问我一、开发介绍1.1开发环境开发语言:Java数据库:MySQL系统架构:B/S后端:SSM(Spring+SpringMVC+Mybatis)前端:Vue工具:IDEA或者Eclipse,JDK1.8,Maven二、系统介绍2.1图片展示注册登录页面:登陆.png前端页面功能:首页、培训班、在线学习、企业文化、交流论坛、试卷列表、系统公告、留言反馈、个
使用Spring Boot Admin监控和管理Spring Boot应用程序
岚珂瓜呱
spring boot spring boot 后端 java spring mybatis 数据库
使用SpringBootAdmin监控和管理SpringBoot应用程序SpringBootAdmin是一个用于监控和管理SpringBoot应用程序的开源工具。它提供了一个直观的用户界面,用于查看应用程序的健康状态、详细信息、日志等,并支持一些管理功能。下面是一个简单的示例,演示如何在SpringBoot应用程序中集成SpringBootAdmin:添加SpringBootAdmin依赖:首先,
使用Spring Security进行LDAP(轻量目录访问协议)认证
岚珂瓜呱
spring boot spring java 数据库 后端 开发语言 spring boot
使用SpringSecurity进行LDAP(轻量目录访问协议)认证使用SpringSecurity进行LDAP认证非常简单,您只需配置SpringSecurity以连接到LDAP服务器并执行认证即可。以下是一个简单的示例,演示如何在SpringBoot应用程序中实现LDAP认证:添加SpringSecurity和SpringLDAP依赖:首先,您需要添加SpringSecurity和Spring
SuperProductivity学习第七天-src/main.ts学习
一个三分钟热度的人
Super Productivity 学习 经验分享 笔记 其他 electron angular
方法1.你的问题是什么,请描述出来,描述具体。2.解决你的问题后,是否记住,能否记住和表达出来,不能的话就重复性记忆。3.是否有的时候很烦躁,心很乱,思想飘絮,那就总结,今天干了点什么,要干点什么,明天干点什么,这周干了什么。4.保持干净,环境的干净和自身和干净,比如桌子,比如衣服,带来一个好的状态讲解src/main.tsplatformBrowserDynamic().bootstrapMod
03-10Linux的文件系统
圆缘1987
Linux的文件系统:根文件系统(rootfs):rootfilesystemLSB,FHS/boot:引导文件存放目录:内核文件(vmlinuz),引导加载器(bootloader,grub)都存放于此目录/bin:供所有用户使用的基本命令;不能关联至独立分区,OS启动会用到的程序/sbin:管理类的基本命令;不能关联至独立分区,OS启动会用到的程序/lib:基本共享库文件,以及内核模块文件(/
论文整理:隐私签名
yixvxi
Survey 文档资料 学习
最近准备开题了(苦恼…),整理一些看过/没看过的论文。持续更新…数字签名:隐私数字签名的定义&安全性(book)0.Deffie-Hellman.NewDirectionsinCryptography.1976Katz,J.(2010).DigitalSignatures:BackgroundandDefinitions.In:DigitalSignatures.Springer,Boston,M
配置 IDEA 远程连接应用服务器
O_Neal
当调试Web应用时,经常需要使用ide远程连接,来进行debug调试。使用Springboot内置服务器和使用Tomcat服务器是常见的应用部署方式,可以用不同的配置方式来启动远程debug模式。Springboot应用1.配置启动参数运行jar时加上debug参数,例如java-jar-Xdebug-Xrunjdwp:transport=dt_socket,address=60222,suspe
spring security 权限(注解)
LaoCat__
java springcloud web后端 java spring boot spring security
写在前边整理的知识点都是从其他博客中来,如有侵权,立删!参考:https://blog.csdn.net/qq_32867467/article/details/103097190正题:SpringSecurity默认是禁用注解的,要想开启注解,要在继承WebSecurityConfigurerAdapter的类加@EnableMethodSecurity注解,并在该类中将Authenticati
spring cloud gateway k8s优雅启停
luffy_1993
kubernetes 容器 云原生
通过配置readiness探针和preStophook,实现优雅启动和停止(滚动部署)1.k8s工作负载配置readinessProbe:httpGet:path:/datetimeport:8080scheme:HTTPinitialDelaySeconds:30timeoutSeconds:1periodSeconds:30successThreshold:1failureThreshold:
Websocket + Vue使用
人间观察师
websocket vue.js 前端
这里有一篇文档可以参考一下>闪现POM文件org.springframework.bootspring-boot-starter-websocket2.7.0WebSocketConfig配置importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configura
[套路] 浏览器引入Vue.js场景-WangEditor富文本编辑器的使用 (永久免费)
Grandpa_Rick
套路 front end vue.js 前端 javascript wangEditor
系列文章目录[套路]el-table多选属性实现单选效果[套路]基于服务内存实现的中文拼音混合查询[套路]Bypass滑块验证码目录系列文章目录前言一、实现1.1场景1.2Window对象简介1.3引入WangEditor1.4页面配置前言公司使用freemarker的老旧SpringBootWeb后台项目,前两年通过浏览器引入js的方式使用Vue简单升级了下,方便迭代功能.近期一个很简单的功能需
spring boot高级运用:使用Spring Cloud Config实现集中式配置管理,动态管理应用程序配置
岚珂瓜呱
spring boot spring boot 后端 java 开发语言 spring
使用SpringCloudConfig实现集中式配置管理,动态管理应用程序配置使用SpringCloudConfig实现集中式配置管理非常强大,它允许您将应用程序的配置从代码中分离出来,并集中存储在一个或多个配置存储库中(例如Git,SVN等)。下面是一个简单的示例,演示如何使用SpringCloudConfig来实现这一点:创建配置存储库:在您的版本控制系统(例如Git)中创建一个配置存储库,用
springboot项目学习-瑞吉外卖(1)
两仪式quq
spring boot 学习 java 瑞吉外卖
第一天任务如下:建立基本架构完成登录、退出功能注意:本博客没有使用网上教程里的mybatis-plus,使用的是mybatis;数据库连接池也没有使用教程里的druid,使用的是spring自带的连接池基本架构common包:存放的通用类R,用来给前端返回Json格式的数据config包:存放配置类,在今天的任务中主要解决静态资源路径映射问题controller包entity包:存放实体类mapp
springboot中get post put delete 请求区别详解
developerFBI
JAVA Springboot java
Spring4.3中引进了{@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping}来帮助简化常用的HTTP方法的映射并更好地表达被注解方法的语义。1.@GetMapping:处理get请求,传统的RequestMapping来编写应该是@RequestMapping(value=“/get/{id}”,method=Re
第10讲_Spring对Dao的支持
吴国友
Spring框架优秀就是在于MVC开发的时候一旦需要对底层的数据库操作,它可以很好的支持JDBC技术,还有现在主流的ORM框架(Hibernate,MyBatis)技术。重点先介绍Spring对JDBC支持。在Spring对JDBC支持中提供了一个模板JdbcTemplate,此模板封装了对JDBC操作的许多方法,且消除了忽视资源释放而引起的漏洞Spring对JDBC操作需要导入的jar(开发环境
05. spring-boot对spring-mvc的自动配置
马晓钧
spring-mvc的自动配置viewResolver:视图解析器:根据方法的返回值得到视图对象(View)。//会将容器中已有的ViewResolver和自己定义的ViewResolver全部add进去ContentNegotiatingViewResolver自定义视图解析器://需要实现ViewResolver,并注入进容器@ConfigurationpublicclassViewConfi
rabbitmq发送json消息
陌以然I
rabbitmq java 分布式
rabbitmq发送json格式消息packageorg.secp.rabbitmq.exchange;importorg.springframework.amqp.core.Binding;importorg.springframework.amqp.core.BindingBuilder;importorg.springframework.amqp.core.Queue;importorg.s
【Elasticsearch】从零开始搭建ES8集群并且集成到Springboot,更好的服务电商类等需要全文索引的项目(一)
Smily清禾酥酒
中间件 elasticsearch spring boot lucene java 全文检索
从零开始搭建Elasticsearch集群(一)从零开始搭建Elasticsearch8.6集群(一)简单介绍下Elasticsearch,以及为何使用它下载Elasticsearch准备服务器解压安装配置文件elasticsearch.yml修改调整JVM运行内存设置密码证书认证1.生成证书2.生成秘钥3.迁移凭证地址到config目录下4.其他集群都要将这个凭证移动到这个ES安装的config
JdkDynamicAopProxy学习
weixin_44877172
Spring 学习 java spring
简介JdkDynamicAopProxy#invoke是SpringAOP(面向切面编程)框架中用于动态代理的核心方法之一。这个方法是在使用JDK动态代理时,通过JdkDynamicAopProxy类创建的代理对象上调用目标方法时,被自动调用的。以下是该方法的解析:方法签名首先,我们先看一下invoke方法的签名:publicObjectinvoke(Objectproxy,Methodmetho
某小厂java后端初面,记录一下
bpmh
Java开发1天1道面试题 java 面试
好吧,,,,,本人很菜,再接再励吧,继续刷。简单记录一下面试题,未亡羊补牢呗。1.liftjoin;innerjoin;rightjoin的区别2.union和unionall的区别3.like查询会走索引吗?4.主键和索引的区别5.count(*),count(1),count(ID)的区别6.exists了解吗?作用是什么7.线程池了解吗?8.spring创建的bean是单例模式还是多例模式,
Vue+SpringBoot打造数据可视化的智慧河南大屏
桑程程
信息可视化 vue.js spring boot 前端 javascript 后端 spring cloud
目录一、摘要1.1项目介绍1.2项目录屏二、功能模块三、系统展示四、核心代码4.1数据模块A4.2数据模块B4.3数据模块C4.4数据模块D4.5数据模块E五、免责说明一、摘要1.1项目介绍基于JAVA+Vue+SpringBoot+MySQL的数据可视化的智慧河南大屏,包含了GDP、人口、土地面积、企业数、人均收入数据排行、地图展示等模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、
辗转相处求最大公约数
沐刃青蛟
C++ 漏洞
无言面对”江东父老“了,接触编程一年了,今天发现还不会辗转相除法求最大公约数。惭愧惭愧!
为此,总结一下以方便日后忘了好查找。
1.输入要比较的两个数a,b
忽略:2.比较大小(因为后面要的是大的数对小的数做%操作)
3.辗转相除(用循环不停的取余,如a%b,直至b=0)
4.最后的a为两数的最大公约数
&
F5负载均衡会话保持技术及原理技术白皮书
bijian1013
F5 负载均衡
一.什么是会话保持? 在大多数电子商务的应用系统或者需要进行用户身份认证的在线系统中,一个客户与服务器经常经过好几次的交互过程才能完成一笔交易或者是一个请求的完成。由于这几次交互过程是密切相关的,服务器在进行这些交互过程的某一个交互步骤时,往往需要了解上一次交互过程的处理结果,或者上几步的交互过程结果,服务器进行下
Object.equals方法:重载还是覆盖
Cwind
java generics override overload
本文译自StackOverflow上对此问题的讨论。
原问题链接
在阅读Joshua Bloch的《Effective Java(第二版)》第8条“覆盖equals时请遵守通用约定”时对如下论述有疑问:
“不要将equals声明中的Object对象替换为其他的类型。程序员编写出下面这样的equals方法并不鲜见,这会使程序员花上数个小时都搞不清它为什么不能正常工作:”
pu
初始线程
15700786134
暑假学习的第一课是讲线程,任务是是界面上的一条线运动起来。
既然是在界面上,那必定得先有一个界面,所以第一步就是,自己的类继承JAVA中的JFrame,在新建的类中写一个界面,代码如下:
public class ShapeFr
Linux的tcpdump
被触发
tcpdump
用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支 持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
实用命令实例
默认启动
tcpdump
普通情况下,直
安卓程序listview优化后还是卡顿
肆无忌惮_
ListView
最近用eclipse开发一个安卓app,listview使用baseadapter,里面有一个ImageView和两个TextView。使用了Holder内部类进行优化了还是很卡顿。后来发现是图片资源的问题。把一张分辨率高的图片放在了drawable-mdpi文件夹下,当我在每个item中显示,他都要进行缩放,导致很卡顿。解决办法是把这个高分辨率图片放到drawable-xxhdpi下。
&nb
扩展easyUI tab控件,添加加载遮罩效果
知了ing
jquery
(function () {
$.extend($.fn.tabs.methods, {
//显示遮罩
loading: function (jq, msg) {
return jq.each(function () {
var panel = $(this).tabs(&
gradle上传jar到nexus
矮蛋蛋
gradle
原文地址:
https://docs.gradle.org/current/userguide/maven_plugin.html
configurations {
deployerJars
}
dependencies {
deployerJars "org.apache.maven.wagon
千万条数据外网导入数据库的解决方案。
alleni123
sql mysql
从某网上爬了数千万的数据,存在文本中。
然后要导入mysql数据库。
悲剧的是数据库和我存数据的服务器不在一个内网里面。。
ping了一下, 19ms的延迟。
于是下面的代码是没用的。
ps = con.prepareStatement(sql);
ps.setString(1, info.getYear())............;
ps.exec
JAVA IO InputStreamReader和OutputStreamReader
百合不是茶
JAVA.io操作 字符流
这是第三篇关于java.io的文章了,从开始对io的不了解-->熟悉--->模糊,是这几天来对文件操作中最大的感受,本来自己认为的熟悉了的,刚刚在回想起前面学的好像又不是很清晰了,模糊对我现在或许是最好的鼓励 我会更加的去学 加油!:
JAVA的API提供了另外一种数据保存途径,使用字符流来保存的,字符流只能保存字符形式的流
字节流和字符的难点:a,怎么将读到的数据
MO、MT解读
bijian1013
GSM
MO= Mobile originate,上行,即用户上发给SP的信息。MT= Mobile Terminate,下行,即SP端下发给用户的信息;
上行:mo提交短信到短信中心下行:mt短信中心向特定的用户转发短信,你的短信是这样的,你所提交的短信,投递的地址是短信中心。短信中心收到你的短信后,存储转发,转发的时候就会根据你填写的接收方号码寻找路由,下发。在彩信领域是一样的道理。下行业务:由SP
五个JavaScript基础问题
bijian1013
JavaScript call apply this Hoisting
下面是五个关于前端相关的基础问题,但却很能体现JavaScript的基本功底。
问题1:Scope作用范围
考虑下面的代码:
(function() {
var a = b = 5;
})();
console.log(b);
什么会被打印在控制台上?
回答:
上面的代码会打印 5。
&nbs
【Thrift二】Thrift Hello World
bit1129
Hello world
本篇,不考虑细节问题和为什么,先照葫芦画瓢写一个Thrift版本的Hello World,了解Thrift RPC服务开发的基本流程
1. 在Intellij中创建一个Maven模块,加入对Thrift的依赖,同时还要加上slf4j依赖,如果不加slf4j依赖,在后面启动Thrift Server时会报错
<dependency>
【Avro一】Avro入门
bit1129
入门
本文的目的主要是总结下基于Avro Schema代码生成,然后进行序列化和反序列化开发的基本流程。需要指出的是,Avro并不要求一定得根据Schema文件生成代码,这对于动态类型语言很有用。
1. 添加Maven依赖
<?xml version="1.0" encoding="UTF-8"?>
<proj
安装nginx+ngx_lua支持WAF防护功能
ronin47
需要的软件:LuaJIT-2.0.0.tar.gz nginx-1.4.4.tar.gz &nb
java-5.查找最小的K个元素-使用最大堆
bylijinnan
java
import java.util.Arrays;
import java.util.Random;
public class MinKElement {
/**
* 5.最小的K个元素
* I would like to use MaxHeap.
* using QuickSort is also OK
*/
public static void
TCP的TIME-WAIT
bylijinnan
socket
原文连接:
http://vincent.bernat.im/en/blog/2014-tcp-time-wait-state-linux.html
以下为对原文的阅读笔记
说明:
主动关闭的一方称为local end,被动关闭的一方称为remote end
本地IP、本地端口、远端IP、远端端口这一“四元组”称为quadruplet,也称为socket
1、TIME_WA
jquery ajax 序列化表单
coder_xpf
Jquery ajax 序列化
checkbox 如果不设定值,默认选中值为on;设定值之后,选中则为设定的值
<input type="checkbox" name="favor" id="favor" checked="checked"/>
$("#favor&quo
Apache集群乱码和最高并发控制
cuisuqiang
apache tomcat 并发 集群 乱码
都知道如果使用Http访问,那么在Connector中增加URIEncoding即可,其实使用AJP时也一样,增加useBodyEncodingForURI和URIEncoding即可。
最大连接数也是一样的,增加maxThreads属性即可,如下,配置如下:
<Connector maxThreads="300" port="8019" prot
websocket
dalan_123
websocket
一、低延迟的客户端-服务器 和 服务器-客户端的连接
很多时候所谓的http的请求、响应的模式,都是客户端加载一个网页,直到用户在进行下一次点击的时候,什么都不会发生。并且所有的http的通信都是客户端控制的,这时候就需要用户的互动或定期轮训的,以便从服务器端加载新的数据。
通常采用的技术比如推送和comet(使用http长连接、无需安装浏览器安装插件的两种方式:基于ajax的长
菜鸟分析网络执法官
dcj3sjt126com
网络
最近在论坛上看到很多贴子在讨论网络执法官的问题。菜鸟我正好知道这回事情.人道"人之患好为人师" 手里忍不住,就写点东西吧. 我也很忙.又没有MM,又没有MONEY....晕倒有点跑题.
OK,闲话少说,切如正题. 要了解网络执法官的原理. 就要先了解局域网的通信的原理.
前面我们看到了.在以太网上传输的都是具有以太网头的数据包. 
Android相对布局属性全集
dcj3sjt126com
android
RelativeLayout布局android:layout_marginTop="25dip" //顶部距离android:gravity="left" //空间布局位置android:layout_marginLeft="15dip //距离左边距
// 相对于给定ID控件android:layout_above 将该控件的底部置于给定ID的
Tomcat内存设置详解
eksliang
jvm tomcat tomcat内存设置
Java内存溢出详解
一、常见的Java内存溢出有以下三种:
1. java.lang.OutOfMemoryError: Java heap space ----JVM Heap(堆)溢出JVM在启动的时候会自动设置JVM Heap的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)不可超过物理内存。
可以利用JVM提
Java6 JVM参数选项
greatwqs
java HotSpot jvm jvm参数 JVM Options
Java 6 JVM参数选项大全(中文版)
作者:Ken Wu
Email:
[email protected]
转载本文档请注明原文链接 http://kenwublog.com/docs/java6-jvm-options-chinese-edition.htm!
本文是基于最新的SUN官方文档Java SE 6 Hotspot VM Opt
weblogic创建JMC
i5land
weblogic jms
进入 weblogic控制太
1.创建持久化存储
--Services--Persistant Stores--new--Create FileStores--name随便起--target默认--Directory写入在本机建立的文件夹的路径--ok
2.创建JMS服务器
--Services--Messaging--JMS Servers--new--name随便起--Pers
基于 DHT 网络的磁力链接和BT种子的搜索引擎架构
justjavac
DHT
上周开发了一个磁力链接和 BT 种子的搜索引擎 {Magnet & Torrent},本文简单介绍一下主要的系统功能和用到的技术。
系统包括几个独立的部分:
使用 Python 的 Scrapy 框架开发的网络爬虫,用来爬取磁力链接和种子;
使用 PHP CI 框架开发的简易网站;
搜索引擎目前直接使用的 MySQL,将来可以考虑使
sql添加、删除表中的列
macroli
sql
添加没有默认值:alter table Test add BazaarType char(1)
有默认值的添加列:alter table Test add BazaarType char(1) default(0)
删除没有默认值的列:alter table Test drop COLUMN BazaarType
删除有默认值的列:先删除约束(默认值)alter table Test DRO
PHP中二维数组的排序方法
abc123456789cba
排序 二维数组 PHP
<?php/*** @package BugFree* @version $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $*** Sort an two-dimension array by some level
hive优化之------控制hive任务中的map数和reduce数
superlxw1234
hive hive优化
一、 控制hive任务中的map数: 1. 通常情况下,作业会通过input的目录产生一个或者多个map任务。 主要的决定因素有: input的文件总个数,input的文件大小,集群设置的文件块大小(目前为128M, 可在hive中通过set dfs.block.size;命令查看到,该参数不能自定义修改);2. 
Spring Boot 1.2.4 发布
wiselyman
spring boot
Spring Boot 1.2.4已于6.4日发布,repo.spring.io and Maven Central可以下载(推荐使用maven或者gradle构建下载)。
这是一个维护版本,包含了一些修复small number of fixes,建议所有的用户升级。
Spring Boot 1.3的第一个里程碑版本将在几天后发布,包含许多