常见问题之Java——Thymeleaf常用语法

常见问题之Java——Thymeleaf常用语法

背景

日常我们开发时,我们会遇到各种各样的奇奇怪怪的问题(踩坑o(╯□╰)o),这个常见问题系列就是我日常遇到的一些问题的记录文章系列,这里整理汇总后分享给大家,让其还在深坑中的小伙伴有绳索能爬出来。
同时在这里也欢迎大家把自己遇到的问题留言或私信给我,我看看其能否给大家解决。

开发环境

  • 系统:windows10
  • JDK:openjdk11

    内容

下面是日常比较常用的一些标签整理之后的表格,分享给大家,后续对于一些复杂标签会专门的进行实际案例讲解,欢迎大家持续关注

语法 描述

添加文本
“${name}” “‘你好’+${name}” 页面文本与返回值拼接
th:if=”${sex==1}” th:text=”成立的内容” 如果返回值sex是1则成立内容显示
th:unless 与if结果不成立则。。。
th:each=”user,stat:${userList}” 循环,一般用于列表时进行,user是每个实体,stat是当前状态,后续详解,例如stat.index stat.count
th:href=”@{…}” 超链接地址
th:src 引用文件
th:style 样式
本文声明:

88x31.png
知识共享许可协议
本作品由 cn華少 采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。

常见问题之Java——Illegalunsupported Escape Sequence Near Index 11

常见问题之Java——String、StringBuffer和StringBuilder哪个效率更高

背景

日常我们开发时,我们会遇到各种各样的奇奇怪怪的问题(踩坑o(╯□╰)o),这个常见问题系列就是我日常遇到的一些问题的记录文章系列,这里整理汇总后分享给大家,让其还在深坑中的小伙伴有绳索能爬出来。
同时在这里也欢迎大家把自己遇到的问题留言或私信给我,我看看其能否给大家解决。

开发环境

  • 系统:windows10
  • JDK:openjdk11

    内容

    首先我们需要知道String在Java中是一个引用类型,其使用时是以对象的形式存在,而很多小伙伴可能不知道,String对象在进行重新赋值或值发生改变时都是生成一个新的对象,即栈中存储的String对象标记符(可理解为指针)指向的是一个堆中的内存地址,该地址下存储了该对象的值,这也是为什么String是引用类型的原因,而这时String对象的值进行改变时,并不是我们想的其会修改堆中的值,而是在堆中新开一个内存,将新的值存入其中,栈中存储的堆地址这时更换为新的值所在的堆内存地址,这样才算完成一次变更值。

假设String a = “test”+”001” 这时其在堆内存中的占用就是三个部分:
“test”、”001”、”test001”

而a对象的栈内存存储的是”test001”的堆内存地址,这时”test”和”001”只能等垃圾回收机制进行自动化回收才可以释放。

而StringBuffer和StringBuilder这两个的最大区别在于第一个是线程安全的,第二个是线程不安全的,同样的StringBuffer在确保线程安全的过程中,牺牲了一定的性能,因此StringBuilder速度是最快的。而两者与String相比其修改过程中是直接作用于指定的堆内存中,通常不会再进行开辟新的堆内存,因此相比String效率更高。
因此我们可以得出如下结论:
String < StringBuffer < StringBuilder

这时可能有的小伙伴们会想我就想完成一个String a = “test”、”001” 还需要进行创建一个StringBuilder或StringBuffer 吗?

这就要进行考虑了,如果该逻辑所在的函数(方法)中调用频次特别特别低,这时开辟的内存有足够的自动回收时间,那用哪种其实效率并不明显。

阅读更多

常见问题之Java——IDEA的Maven中Repository中地址错误

常见问题之Java——IDEA的Maven中Repository中地址错误

背景

日常我们开发时,会遇到各种各样的奇奇怪怪的问题(踩坑o(╯□╰)o),这个常见问题系列就是我日常遇到的一些问题的记录文章系列,这里整理汇总后分享给大家,让其还在深坑中的小伙伴有绳索能爬出来。
同时在这里也欢迎大家把自己遇到的问题留言或私信给我,我看看其能否给大家解决。

开发环境

  • 系统:windows10
  • JDK:openjdk11
  • 开发工具:IDEA 教育版
  • 框架:SpringBoot
  • 包管理:Maven

    内容

    错误信息:IDEA的Maven中Repository中地址错误

image-20210907145733007

解决办法:

​ 1、在Maven项中进行设置setting.xml配置文件

​ 2、进行设置IDEA中的Remote Jar Repositories项,同样的也是在Setting中的Build下。

本文声明:
阅读更多

常见问题之Java——Illegalunsupported Escape Sequence Near Index 11

常见问题之Java——Illegalunsupported escape sequence near index 11

背景

日常我们开发时,会遇到各种各样的奇奇怪怪的问题(踩坑o(╯□╰)o),这个常见问题系列就是我日常遇到的一些问题的记录文章系列,这里整理汇总后分享给大家,让其还在深坑中的小伙伴有绳索能爬出来。
同时在这里也欢迎大家把自己遇到的问题留言或私信给我,我看看其能否给大家解决。

开发环境

  • 系统:windows10
  • JDK:openjdk11
  • 开发工具:IDEA 教育版
  • 框架:SpringBoot
  • 包管理:Maven

内容

错误Illegalunsupported escape sequence near index 11:

1
2
3
[ERROR] shouldNotThrowSecurityExceptionWhenNotFilePermission(org.pentaho.di.security.WebSpoonSecurityManagerTest)  Time elapsed: 0.008 s  <<< ERROR!
java.util.regex.PatternSyntaxException:
Illegal/unsupported escape sequence near index 11

解决办法:

​ 这个错误主要是因为地址中存在反斜杠导致,这时我们需要对于一些地址进行转义处理。

阅读更多

Web中间件——Tomcat中的BIO、NIO、APR模式

Web中间件——Tomcat中的BIO、NIO、APR模式

简介

Tomcat在我们日常开发B/S项目时常常进行使用,当然在Spring全家桶中我们现在也是使用的内置tomcat,但是很多人可能不会对于tomcat进行深入性研究,其实在我们的产品进行性能提升时,web中间件的优化也是占有很大一部分,而tomcat中采用不同的模式对应的使用场景下性能也是不一样的,因此本篇文章将对于这几个模式进行简单讲解,后续我们会对于不同的模式进行配置方式讲解。

参见文章

Tomcat的BIO、NIO、APR模式对比与性能测试结果

正文

BIO 同步并阻塞

阻塞式I/O操作,这个模式使用的是Java I/O操作。该运行方式性能最低。

NIO 同步非阻塞

基于Java 缓存区提供非阻塞式I/O操作,相比BIO,该运行方式有更好的性能。当前tomcat7及以上版本默认采用该模式。

阅读更多

Lombok特别篇

Lombok特别篇

简介

目前我们在进行的各类Java语言的项目都在使用实体bean,而其中最常用的就是get、set等一系列方法,而现有比较好用的注解jar包就是Lombok插件了,本篇我们就对于其日常使用较为频繁的注解进行整理一下,便于我们日常使用。

内容

@Setter 注解在类或字段,注解在类时为所有字段生成setter方法,注解在字段上时只为该字段生成setter方法。
@Getter 使用方法同上,区别在于生成的是getter方法。
@ToString 注解在类,添加toString方法。
@EqualsAndHashCode 注解在类,生成hashCode和equals方法。
@NoArgsConstructor 注解在类,生成无参的构造方法。
@RequiredArgsConstructor 注解在类,为类中需要特殊处理的字段生成构造方法,比如final和被@NonNull注解的字段。
@AllArgsConstructor 注解在类,生成包含类中所有字段的构造方法。
@Data 注解在类,生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。
@Slf4j 注解在类,生成log变量,严格意义来说是常量。private static final Logger log = LoggerFactory.getLogger(UserController.class);

本文声明:


知识共享许可协议
本作品由 cn華少 采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。

Java_验证码生成错误汇总

#####错误1、生成内存图像错误,以下为错误信息

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
HTTP Status 500 – Internal Server Error
Type Exception Report

Message An exception occurred processing [/captcha.jsp] at line [47]

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

org.apache.jasper.JasperException: An exception occurred processing [/captcha.jsp] at line [47]

44: //定义图片尺寸
45: int width=60*this.captchaType, height=(this.captchaType==1)?16:20;
46: //创建内存图像
47: BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
48: //获取图形上下文
49: Graphics g = image.getGraphics();
50: //设定背景色


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:593)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:467)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260)
com.github.inspektr.common.web.ClientInfoThreadLocalFilter.doFilter(ClientInfoThreadLocalFilter.java:63)
org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:167)
org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:80)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260)
Root Cause

javax.servlet.ServletException: java.lang.NoClassDefFoundError: Could not initialize class java.awt.image.BufferedImage
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:667)
org.apache.jsp.captcha_jsp._jspService(captcha_jsp.java:282)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:444)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260)
com.github.inspektr.common.web.ClientInfoThreadLocalFilter.doFilter(ClientInfoThreadLocalFilter.java:63)
org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:167)
org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:80)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260)
Root Cause

java.lang.NoClassDefFoundError: Could not initialize class java.awt.image.BufferedImage
org.apache.jsp.captcha_jsp._jspService(captcha_jsp.java:170)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:444)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260)
com.github.inspektr.common.web.ClientInfoThreadLocalFilter.doFilter(ClientInfoThreadLocalFilter.java:63)
org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:167)
org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:80)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260)
Note The full stack trace of the root cause is available in the server logs.

####造成原因:图形化支持问题
####解决方案:
在tomcat启动文件bin\catalina.sh 中更改$_RUNJAVA启动参数,追加-Djava.awt.headless=true \ 这一句

1
2
3
4
5
6
7
8
9
10
11
12
13
shift
eval exec "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
-D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
-classpath "\"$CLASSPATH\"" \
-Djava.security.manager \
-Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \
-Dcatalina.base="\"$CATALINA_BASE\"" \
-Dcatalina.home="\"$CATALINA_HOME\"" \
-Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
-Djava.awt.headless=true \
org.apache.catalina.startup.Bootstrap "$@" start
else

一、搭建SpringBoot2.0.0M4基础Web项目

######本次开发环境为:
######系统:Linux Mint 18
######JDK:1.8
######开发工具:IntelliJ IDEA 2017.2.4

####1、启动IDEA工具,开始创建一个基础项目。点击Create New Project开始创建。

Welcome to IntelliJ IDEA_015.png

####2、选择Spring Initializr

New Project_017.png

####3、进行填写其中的相关名称和环境。注意这里命名时需要使用小写。

New Project_019.png
####4、进入SpringBoot项目初始化选择,这里选择Web中的Web,后续插件再陆续安装即可。右上角有个版本选择,这里我们选择2.0.0M4版本,不同时间时这里的版本不一样,根据实际情况进行选择即可。

New Project_020.png

####5、命名自己的项目名称,并选择要将项目创建的位置。

New Project_021.png

阅读更多