SpringBoot频繁报错标签未闭合
1、开发 配置
#解析非严格的html5 spring.thymeleaf.mode=LEGACYHTML5 ----------1 #调试的时候关闭缓存,为了开发方便同时关闭缓存。修改页面不需要重启程序 spring.thymeleaf.cache=false--------------2
2、使用Thymeleaf3.0 速度更快
3.0.0.RELEASE
2.0.0
UTF-8
UTF-8
1.8
少个/或者没用闭合总是出现解析错误,默认是严格的xhtml,对于标签的无值属性也不友好。
SpringBoot href与src
href没用 src没用
不知道为什么头疼一直404。
以下来自网上解释
href 表示超文本引用(hypertext reference),在 link和a 等元素上使用。src 表示来源地址,在 img、script、iframe 等元素上。src 的内容,是页面必不可少的一部分,是引入。href 的内容,是与该页面有关联,是引用。区别就是,引入和引用。
src和href之间存在区别,能混淆使用。src用于替换当前元素,href用于在当前文档和引用资源之间确立联系。
src是source的缩写,指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置;在请求src资源时会将其指向的资源下载并应用到文档内,例如js脚本,img图片和frame等元素。
当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和框架等元素也如此,类似于将所指向资源嵌入当前标签内。这也是为什么将js脚本放在底部而不是头部。
href是Hypertext Reference的缩写,指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,如果我们在文档中添加
那么浏览器会识别该文档为css文件,就会并行下载资源并且不会停止对当前文档的处理。这也是为什么建议使用link方式来加载css,而不是使用@import方式。
标准表达式语法
但还有更多的类型和有趣的细节,我们都还不知道,下面我们首先来一个标准表达式的快速总结:
变量表达式:${...}
选定变量表达式:*{...}
信息表达式:#{...}
链接表达式:@{...}
片段表达式:~{...}
文本值:'one text','Another one!',...
数值:1,34,3.0,12.3...
布尔值:true,false
Null值:null
标记符号值(token):one,sometext,main,...(?)
字符串连接:+
文本替换:|The name is ${name}|
算数运算符:
基本操作符:+,-,*,/,%
取负值(一元运算符):-
boolean运算符:
基本二元操作符:and,or
一元操作符:!,not
比较和判断:
比较运算符:>,<,>=,<=,(gt,le,ge,le)
判断相等运算符:==,!=(eq,ne)
条件运算符
if-then:(if)?(then)
if-then-else:(if)?(then):(else)
default:(value)?:(defaultvalue)
特殊标记
所有这些还可以合并嵌套使用:
${x}:返回一个Thymeleaf的context中存储的变量或request的属性。
${param.x} 返回request的参数x(可以为复合值)
${session.x} 返回session的属性x
${application.x} 返回一个servlet上下文的属性x
就在执行前,一个特殊的变量被设置为包含了Context和WebContext的全context对象(即所有实现了IContext的对象),被称为执行信息(execInfo),这个变量有两个您可以从模板中使用的数据。
模板名:#{execInfo.templateName},一个引擎执行时的特定名称,对应正在执行的模板。
当前的日期时间:#{execInfo.now},一个Calender对象,对应引擎开始执行的时刻值。
注:当使用OGNL表达式的context变量的时候,可以使用更方便的表达方式。这些对象也是用来#符号:
#ctx: context对象
#vars:context属性
#locale:context本地化信息
#request:(仅限WebContext) HttpServletRequest对象
#response:(仅限WebContext) HttpServletResponse对象
#session:(仅限WebContext)HttpSession对象
#servletContext:(仅限WebContext)ServletContext对象
除了基本对象,Thymeleaf还为我们提供了一套实用对象,可以帮助我们在执行表达式中解决一下常见的任务:
由于其重要性,URL是web应用程序模板的一等公民,Thymeleaf的标准方言都为它定义了特殊语法:@{...}
他有不同类型的网址:
绝对地址,比如:https://niufennan.github.io/
相对地址,可以有如下方式:
相对于页的,比如:user/login.html
相对于上下午的,比如:/itemdetails?d=3(将自动添加服务器的上下文名称)
相对于服务器的,比如:~/billing/processInvoice(可以在同一服务器中的不同上下文(即application)中使用)
相对于协议的,比如://cdn.bootcss.com/jquery/2.2.3/jquery.min.js
真正将这些表达式转换并输出为URL的工具,是一个注册在ITemplateEngine中的一个org.thymeleaf.linkbuilder.ILinkBuilder接口的实现类。
Thymeleaf可以在任何情况下处理绝对地址,但相应的,也会要求你给予一个实现了IWebContext接口的context对象,他包含了一些创建链接需要的来自Http请求的相关信息。
注意:
th:href是一个修饰属性,一旦设置这个属性,它会计算链接,并设置标签内的href属性的url值。
可以对url的参数使用表达式(比如orderId=${o.id}),url上所需的编码工作,也会自动执行。如果需要多个参数,用逗号(,)分开即可如:(@{/order/process(execId=${execId},execType='FAST')})网络路径中也可以使用变量模板,如:@{/order/{orderId}/details(orderId=${orderId})}相对URL使用/开始,如/order/details,将自动适应上下文的名词前缀。如果不清楚cookie是否被启用,一个jsessionid=...的后缀可能被加入到url中,用于回话保存,这就是所谓的URL重写。Thymeleaf允许利用Servlet的api为每一个url,使用response.encoding来扩展重写过滤器。th:href允许有一个静态工作的url配置在模板中,这样,我们的模板即使在不工作时,仍然可以通过浏览器互相连接。
Thymeleaf可以使用双大括号的方式,为变量${...}和选择*{...}表达式通过配置转换服务进行数据转换在thymeleaf-spring3和thymeleaf-spring4有一整套基于Spring转换服务的Thymeelaf转换服务配置,因此他可以自动实现${{}}和*{{}}的服务。
增加属性
Thymeleaf还提供了th:attrappend和th:attrprepend属性,用于为属性之前或之后增加值
比如,你可能想在一个按钮的现有css类的基础上在新增一个css类,将会非常容易:
如果你对cssStyle变量的值为warning,那么输出将为:
因为样式表使用的如此频繁,所以标准方言中还有两个附加属性,th:classappend和th:styleappend属性,用于追加一个class类或者一段样式表而不改变现有内容:
导入文件
© 头文件
上面定义了一个叫copy的代码片段,我们能通过th:insert和th:replace属性(还有th:include,但Thymeleaf3.*版本不推荐使用),很容易的将他导入到首页中:
...
注意一点,th:insert使用的是一个片段表达式(~{...}),或片段中一个更具体的表达式。但在前者的情况下(简单片段表达式),比如就像上边的代码,~{...}是可选的,所以如下班的代码是等价的:
...
片段语法说明
判断表达式语法非常简单,有三种不同的格式:
模板名::dom选择 将导入模板名 所指定的代码片段到dom选择器中。
注意:dom选择器 可以仅仅是一个片段的名字,所以可以指定一下非常简单的名字,如:footer:copy或更简单的。
dom选择器语法类似于XPath或css选择器,更多内容见附录C。
直接使用模板名 将此模板对应的完整的代码导入。
注意:此时由th:insert和th:replace标签导入的模板必须在当前的模板引擎下的模板解释器可以分辨。
用::dom选择器 或 this:dom选择器 导入与之相同的模板。
在上面的格式中,模板名 和 dom选择器 都可以使用任何表达式的结果来表示,比如:
th:insert和th:replace的不同点(以及th:include)
几个属性的区别(th:insert,th:replace和th:include(3.*版本不推荐使用)):
th:insert是将th:fragment标签的内容纳入宿主标签
th:replace是使用th:fragment标签替换宿主标签
th:include与th:insert类似,但是他插入的是片段的内容,而不是片段
模板断言
th:assert属性可以定义一个用逗号分隔的表达式,用来为每一个条件做出评估,以判断是否产生异常。
内联表达式 表达式内联
虽然标准方言的标签属性几乎可以做任何事,但在有些情况下,我们可以直接使用HTML文本来书写表达式,例如,你可以这样写:
Hello, [[${session.user.name}]]!
他和这样写是等价的:
Hello, 张三 !
[[...]]和[(...)]这种表达式在Thymeleaf中叫做内联表达式,你可以使用任何形式的表达式,包括th:text或th:utext属性
需要注意的是,[[...]]对应的是th:text,[(...)]对应的是th:utext,所以变量msg=这个真棒 ,加入使用片段:
信息值为: "[(${msg})]"
输出结果为:
信息值为: 这个真棒
而如果这样:
信息值为: "[[${msg}]]"
则输出结果为:
信息值为: 这个<b>真棒</b>
需要注意的是,文本内联在body内的每个标记的都默认激活,所以我们可以直接使用。
内联还是自然模板
那么现在你可能要问了:为什么不从一开始就使用内联表达式呢,他的代码量比属性少多了。
嗯,这是因为,你可能发现内联很好用,但你要永远记住,内联表达式在你的html中是完全按照文字打开显示的,所以,你就无法用他作为原型了。
比如,若果不适用内联,直接作为静态打开将显示:
Hello,张三
而使用内联后:
Hello, [[${session.user.name}]]!
在设计方面的区别还是很明显。
禁用内联
这个机制还是可以禁用的,比如有时候[[...]]或[(...)]是作为内容输出的。对于这点,我们可以使用th:inline="none";
一个二维数组: [[1, 2, 3], [4, 5]]!
执行结果为:
一个二维数组: [[1, 2, 3], [4, 5]]!
内联文本
内联文本与刚刚我们看到的内联表达式非常的相似,但它实际上有更多的功能,并且必须显式启用:th:inline="text"
内联文本不仅允许我们使用与刚刚看到相同的表达式形式,但其实他的处理方式比较像文本模板处理模式,即可以在里边处理文本模板逻辑,而不仅仅是一个输出的表达式。
我们将看在下一章文本模板模式中看到更多内容。
内联JavaScript
内联JavaScript可以更好的在HTML模板模式下整合JavaScript的脚本块。
就像内联文本一样,这实际上是相当于它们在JavaScript模板模式下处理脚本内容,执行的是文本模板模式的功能(下一章介绍),这一章将着重介绍如何在JavaScript块中使用Thymeleaf表达式。
这种模式必须明确声明启用 th:inline="javascript":
将输出结果为:
这里有两点需要注意:
首先,内联JavaScrip不但能输出普通文字,还会队内容自动进行转义和JavaScript的编码,所以输出的结果一般会非常符合JavaScript的要求。
其次,如果我们不想进行转义,则使用[(...)],如:
返回结果为:
很明显,这是一段错误的代码,但有事我们就是需要一些非转义的东西,所以如果想通过内联来构筑脚本,手头最好有这个工具。
JavaScript的自然模板
上述的内联JavaScript机制要不仅仅运用JavaScript特性的表达式更为有效。
举例来说,我们可以将内联表达式使用JavaScript方式注释,如:
Thymeleaf将忽略注释和分号之前的一切("张三"),所以他的执行结果和不使用注释包装一模一样:
但是仔细看看这个模板代码:
它是一段完全正确的JavaScript代码,当在浏览器中直接打开的时候,它还是会正确的执行,并几乎和在服务器执行的结果一样。
所以这是一段JavaScript自然模板。
内联执行的高级方式和JavaScript序列化
Thymeleaf的内联执行是非常智能的,它不限于字符串,Thymeleaf会正确的创建JavaScript中以下的各种类型的对象:
字符串
数值
布尔型
数组
集合
Map
JavaBean
比如说,下面的代码:
${session.user}是一个User对象,执行后的结果为
这个JavaScript完成序列化方式是通过org.thymeleaf.standard.serializer.IStandardJavaScriptSerializer接口实现,可以在当前模板引擎中配置标准方言使用的序列化方式实例。
这个JS的序列化机制的默认是查询classpath,如果有JackSon库则使用它完成序列化,如果没有,他还内置了一个序列化工具,可以涵盖大多数的情况,但不太灵活。
内联CSS
Thymeleaf也可以使用内联CSS标签,像这样:
举个例子,需要为两个变量需要设置为两个不同的字符串值:
classname='main elems'
align='center'
就可以这样使用:
返回结果
注意一点,CSS内联也象JavaScript的一样,具有一定转换能力。具体说就是象[[${classname}]]输出的时候会自动转换,所以上文中的 classname='main elems'被转换为main\ elems
高级功能:CSS自然模板等
同JavaScript一样,内联CSS样式也可以静态或动态展示,即可以使用注释手段的方式实现自然模板。比如:
文本语言模板模式
文本语法
Thymeleaf有三种文本语言模板模式(Text,JavaScript,CSS),它们与标记语言模板模式有一些区别。
文本模板模式与标记语言模板模式的一个主要区别是,在文本模板中,没有标记,所以也就没有办法以属性形式插入逻辑标签,所以,我们必须依靠其它机制插入逻辑。
这些机制最基本的方式,就是我们前边已经详细介绍过的内联。内联语法是在文本语言模板模式中输出结果的最简单的表达式。用一个完整的电子邮件的模板文件作为例子:
[(${name})] 您好,
请在附件中查看您所要求的报告
名字为: "[(${report.name})]".
此致
敬礼
A方项目经理 张三.
注意上面这个完整有效的Thymeleaf文本模板中,没有任何标记,但它完全可以正常执行。所以我们不应再标记语言模板模式中内联文本语言模板,而应直接在文本模板模式中直接执行。
而为了支持比单纯输出更复杂的逻辑,我们需要一个基于非标记的新语法形式:
[# th:each="item : ${items}"]
- [(${item})]
[/]
它实际上是一个简写版:
[#th:block th:each="item : ${items}"]
- [#th:block th:utext="${item}" /]
[/th:block]
[#th:block th:each="item : ${items}"]
- [#th:block th:utext="${item}" /]
[/th:block]
注意这个新语法是基于元素(element,即加工后的标签)的,注意定义形式为[#element]而不是.元素和标签类似,使用[#element]和[/element]来确定一个封闭区间。还可以使用自关闭模式[#element.../]
标准方言的处理器实际上跟只可以使用一个元素,就是之前介绍过的th:block,虽然在自定义方言中可以扩展并创建新的元素。另外,th:block元素([#th:block ...]...[/th:block])可以直接缩写,([# ...]...[/]),所以上边的代码相当于:
[# th:each="item : ${items}"]
- [# th:utext="${item}" /]
[/]
当然[#th:utext="${item}"]相当于一个内联转移表达式,所以我们也可以在此使用,用来减少代码,所以,最终我们看到的代码为:
[# th:each="item : ${items}"]
- [(${item})]
[/]
注意文本模式语法要求必须为全平衡元素(即没有非闭合标签)和属性,所以,它与html比,更像XML的模式。
下面一个更完整的文本模板模式例子,一个电子邮件的模板:
[(${customer.name})],您好:
这是我们的产品列表:
[# th:each="prod : ${products}"]
- [(${prod.name})] 价格为: [(${prod.price})] 元/kg
[/]
执行后输出的结果为:
张先生,您好:
这是我们的产品列表:
[# th:each="prod : ${products}"]
- 土豆 价格为: 2.30元/kg
- 白菜 价格为: 1.20元/kg
- 西瓜 价格为: 1.60元/kg
- 红薯 价格为: 3.50元/kg
[/]
在举一个JavaScript模板模式的例子,在我们的HTML页面,需要调用一个greeter.js文件,它使用文本模板创建。注意,他不是的方式内嵌到HTML文件中,而是以一个单独的js文件作为模板处理:
var greeter = function() {
var username = [[${session.user.name}]];
[# th:each="salut : ${salutations}"]
alert([[${salut}]] + " " + username);
[/]
};
执行后的结果为:
var greeter = function() {
var username = "张三";
alert("Hello" + " " + username);
alert("Ol\u00E1" + " " + username);
alert("Hola" + " " + username);
};
元素属性转义
为了防止模板可能与其他的模板处理方式发生冲突(如文本模式内联在html模板中),Thymeleaf3.*的文本模式语法可以在元素的属性中使用转义
Text模板模式的属性将会使用HTML非转义字符
JavaScript模板模式的属性将会使用JavaScript非转义字符
CSS模板模式将会使用CSS非转义字符
所以,下边的代码将会正常的执行(注意其中的<)
[# th:if="${120<user.age}"]
真棒!
[/]
当然,在一个真实的模板中,<是个错误的语法,但如果在执行一个html模板的内联text的时候,它就要起作用了,因为在上边的代码中,我们不希望浏览器认为
可扩展性
此语法有一个有点就是它和标记一样有扩展性。用户仍然可以使用自定义元素或属性来定义方言,以前缀的方式应用(可选),然后在文本模板模式中使用它们。
[#myorg:dosomething myorg:importantattr="211"]一些内容[/myorg:dosomething]
使用文本原型注释:添加代码
如果要为JavaScript和CSS模板模式(文本模板模式不可以)添加额外的代码,则在内联JavaScript中使用一个特殊的语法/*[+...+]*/,Thymeleaf在模板执行的时候讲自动取消此注释:
var x = 23;
/*[+
var msg = '这段代码为后台输出';
+]*/
var f = function() {
...
执行结果为:
var x = 23;
var msg = '这段代码为后台输出';
var f = function() {
...
可以在这段注释中添加表达式,并执行:
var x = 23;
/*[+
var msg = 'Hello,'+[[${session.user.name}]];
+]*/
var f = function() {
...
使用文本原型注释:删除代码
同样的,也可以让Thymeleaf删除/*[-*/和/*-]*/之间的代码(三种文本模板模式均可):
var x = 23;
/*[- */
var msg = '执行后就没有了';
/* -]*/
var f = function() {
...
或者在文本中使用:
...
/*[- 用户从会话中获得 -]*/
[(${session.user.name})] 您好!
...
自然JavaScript和Css模板
正如上一章看到的,JavaScript和CSS内联提供了在内敛表达式内使用JavaScript和CSS注释的可能,比如:
...
var username = /*[[${session.user.name}]]*/ "张三";
...
执行后为一个正常的JavaScript,结果为:
...
var username = "李四";
...
这种欺骗内联表达式的语法实际上可以在全部的文本模式语法中使用:
/*[# th:if="${user.admin}"]*/
alert('管理员');
/*[/]*/
这个alert语句当模板直接在浏览器中打开是会显示出来,因为是个完全正确的JavaScript代码,而当模板在运行后,当用户为管理员的时候alert才会弹出,因为它执行后的结果为:
[# th:if="${user.admin}"]
alert('Welcome admin');
[/]
你可能感兴趣的:(JavaEE)
【操作系统】线程
Brookty
JavaEE linux java java-ee 学习 服务器 操作系统 后端
JavaEE—线程一、进程与线程1.包含管理2.资源布局2.1公共资源2.2私有资源二、并发编程1.多线程优势1.1创建1.1.1多线程1.1.2多进程1.2通信1.2.1多线程1.2.2多进程1.3调度1.3.1多线程1.3.2多进程1.4销毁1.4.1多线程1.4.2多进程2.多进程优势2.1安全性2.1.1多进程2.1.2多线程2.2稳定性2.2.1多进程2.2.2多线程三、线程数量1.调度
如何在Java中实现WebSocket通信
雷神Club
java websocket python 开发语言 网络协议
如何在Java中实现WebSocket通信大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!WebSocket是一种在单个TCP连接上进行全双工通信的协议,它使得客户端和服务器之间可以进行实时的双向数据传输。在Java中,实现WebSocket通信可以通过JavaEE标准的WebSocketAPI或者使用开源库来实现。本文将详细介绍如何在Java中实现WebSocket
单点模式与集群
奔跑的鹅鹅鹅
solr 集群
单点模式:javaee项目部署在一台tomcat上,所有的请求,都由这一台机器处理,问题很大。1.并发处理能力因为单点服务器的性能有限制,所以单台tomcat的最大连接数有限。2.容错率低,一旦服务器故障,项目无法正常运行。3.单独的服务器计算能力低,无法完成复杂的海量数据计算。集群:多台服务器集中,实现相同的项目。每台服务器存在的作用缓解高并发,发生故障转移服务到另外的空闲服务器上。1.高可用性
实体对象辨析(POCO、Entity、Model、DTO、BO、DO、PO)
weixin_33981932
runtime 数据库 java
为什么80%的码农都做不了架构师?>>>POCO(PlainOldCLRObject)源自JavaEE编程领域的POJO概念(2000年由MartinFowler提出)和POTS(PlainOldTelephoneService)概念。POCO被应用于面向.NET框架的CLR(CommonLanguageRuntime,公共语言运行时)。但是POCO本身不依赖于外部框架,它是PLAIN的。POCO
深入理解Tomcat 基本架构
水木石画室
tomcat 架构 java
Tomcat是Apache软件基金会旗下的开源Servlet容器,实现了JavaEE(现JakartaEE)的Servlet、JSP等规范,广泛用于JavaWeb应用的部署和运行。其架构设计围绕高效处理HTTP请求、灵活管理Web应用和支持扩展展开。以下从核心组件、层级结构、关键机制三个维度深入解析Tomcat的基本架构。一、Tomcat核心组件与层级结构Tomcat的架构采用分层容器模型,核心组
JavaWeb--Tomcat、Http、Servlet
chengzhan1990
java web.xml 数据库
day083Web开发入门3.1引入之前的程序:java桌面程序,控制台控制,socketgui界面。javase规范现在和以后的程序:javaweb程序。浏览器控制。javaee规范3.2软件的结构C/S(Client-Server客户端-服务器端)典型应用:QQ软件,飞秋,红蜘蛛。特点:1)必须下载特定的客户端程序。2)服务器端升级,客户端升级。B/S(Broswer-Server浏览器端-服
JAVA——JAVA知识点集锦(下)
Faith_chao
JAVA基础 JAVA基础 知识点
转自:http://blog.csdn.net/Scythe666/article/details/51994782这部分主要是开源JavaEE框架方面的内容,包括Hibernate、MyBatis、Spring、SpringMVC等,由于Struts2已经是明日黄花,在这里就不讨论Struts2的面试题,如果需要了解相关内容,可以参考我的另一篇文章《Java面试题集(86-115)》。此外,这篇
java web5(黑马)
rzl02
java 前端 开发语言
Request&Response作用:Request:获取请求数据Response:设置响应数据Request继承体系1.Tomcat需要解析请求数据,封装为request对象,并且创建request对象传递到service方法中2.使用request对象,查阅JavaEEAPI文档的HttpServletRequest接口获取请求数据1.获取请求数据>请求行:GET/request-demo/r
JavaEE 网络编程套接字详解与实战示例
我爱Jack
网络 java 后端 开发语言
、套接字(Socket)是什么?套接字是网络通信的“端点”,就像打电话需要手机一样,网络通信需要套接字建立连接。两种类型:TCP套接字:可靠传输(类似打电话,需先拨通)UDP套接字:快速传输(类似发短信,无需确认对方收到)二、TCP套接字编程1.服务端开发步骤importjava.io.*;importjava.net.ServerSocket;importjava.net.Socket;publ
JavaEE线程概念
一、线程和进程概念线程是程序执行的最小单元,属于进程的一个实体。一个进程包含多个线程,线程共享的资源有内存空间、文件句柄。线程特性:轻量级:线程的开销相比进程小很多,线程仅需要少量资源就行。并发执行:多个线程可以同时间并发执行,线程之间互不干扰。共享资源:同一进程的线程共享线程资源,多个进程可以同时访问进程的全局变量。进程和线程的区别:进程是程序的一次执行过程,资源分配的最小单位,进程之间通信复杂
学习:JAVAEE_3 TomCat/HTTP协议/Servlet/三层架构综合案例和开发模式
明礼的代码管理中心
JAVAEE 学习 java-ee tomcat
TomCatTomcat服务器是一个免费的开放源代码的Web应用服务器。下载地址:ApacheTomcat®-Welcome!tar.gz文件是linux操作系统下的安装版本exe文件是window操作系统下的安装版本zip文件是window操作系统下压缩版本/usr/local/apache-tomcat-8.5.78存放位置环境变量exportAPACHE_TOMCAT=/usr/local/
每天40min,我们一起用70天稳扎稳打学完《JavaEE初阶》——1/70 第一天【进程和线程】【虚拟地址空间】
_蓝天IT_
70天学完JavaEE初阶 java-ee java
专注效率记忆预习笔记复习做题欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)文章字体风格:红色文字表示:重难点★✔蓝色文字表示:思路以及想法★✔如果大家觉得有帮助的话,感谢大家帮忙点赞!收藏!转发!本系列通过70天学习完JavaEE初阶,我们不图快,只求稳扎稳打。由于我高三是在家自学的,经验告诉我,学习一定要长期积累,并且及时复习,由于现在课
JavaEE导读1
薯条不要番茄酱
java-ee java
1.JavaEE发展历程JavaEE(JavaPlatformEnterpriseEdition),Java平台企业版.是JavaSE的扩展,⽤于解决企业级的开发需求,所以也可以称之为是⼀组⽤于企业开发的Java技术标准.所以,学习JavaEE主要是学习Java在企业中如何应⽤.1.最早的时候,Java企业扩展还是核⼼JDK的⼀部分(核⼼JDK通常指JavaSE).2.到了1999年,Java企业
Tomcat 源码解析:深入理解 Tomcat 运行机制
深山懒羊羊
tomcat java
Tomcat是Apache软件基金会的一个开源的Servlet容器和Web服务器,是JavaWeb开发中最常用的应用服务器之一。它实现了Servlet和JSP规范,广泛用于开发和部署JavaEEWeb应用程序。了解Tomcat的源码,能够帮助我们深入理解Web服务器的工作原理,以及如何优化和定制我们的JavaWeb环境。本文将对Tomcat的核心架构进行解析,重点关注Tomcat的启动过程、请求处
Spring框架-IOC
五月茶
spring java 后端
1.Spring框架的介绍Spring框架是一个开源的JavaEE应用程序主要核心是IOC和AOP两大技术IOC:InversionofControl,控制反转。它是通过将控制权从应用程序中移出,使得对象的创建和管理由框架来完成,从而降低系统间的耦合度。DI:DependencyInjection,依赖注入。它是一种设计模式,属于控制反转的一部分。其基本思想是将对象的依赖(即它所需要的其他对象)通
JavaEE初阶---多线程编程(一.线程与进程)
IYF.星辰
JavaEE java-ee java
目录一.线程与进程的概念与联系:进程的基本概念:线程的基本概念:进程和线程的区别与联系:代码执行实列:1.通过继承Thread父类来实现多线程2.通过实现Runnable接口来实现多线程:3.通过Lambda表达式来实现多线程:Thread类的常见属性和构造方法:一.线程与进程的概念与联系:一张漫画,生动阐明进程进程与线程的关系:进程的基本概念:什么是进程?→定义:进程是一个具有一定独立功能的程序
JavaEE:分布式session
一、使用Redis存储分布式session:1.SpringBoot整合Redis,见如下地址:JavaEE:SpringBoot整合Redis_a526001650a-CSDN博客2.代码实现分布式session存储(此处以token为例):@AutowiredprivateRedisTemplateredisTemplate;//Redis数据操作类//登录接口,存储token到redis中@
JavaEE:CAS单点登录
杨先生_
JavaEE java-ee java
说明:CAS单点登录用于实现多个顶级域名不同的系统或各子系统实现统一登录,一处登录,各系统免登录。JWT工具类实现:JavaEE:JWT生成/解析token与Spring拦截器_jwt可以解析token吗-CSDN博客一、CAS登录/登出实现:1.单点登录(创建全局ticket+临时ticket):/** *登录CAS系统(供CAS登录页调用) *1.登录验证,并创建用户分布式会话(Token存入
互联网大厂Java面试指南:从基础到高阶技术栈与业务场景实战
yiiyx
Java场景面试宝典 Java Spring Boot 微服务 面试 分布式系统
互联网大厂Java面试指南:从基础到高阶技术栈与业务场景实战场景介绍本文模拟互联网大厂高级Java工程师面试场景,涵盖JavaSE、Spring生态、微服务、数据库、缓存、消息队列等技术栈,结合音视频、电商、金融等业务场景,提供3轮渐进式提问与详细解析。技术栈核心语言与平台:JavaSE(8/11/17),JakartaEE(JavaEE),JVM构建工具:Maven,Gradle,AntWeb框
Java进阶学习
m0_67403013
面试 学习路线 阿里巴巴 android 前端 后端
进阶学习过程的几个方面第一阶段的学习是java基础的学习和javaEE的学习。第二阶段就是java学习的进阶啦。主要是面试书籍,下面是书籍推荐:多线程、并发实战java高并发程序设计和java并发编程的艺术:——“java高并发程序设计”,这本书主要是为了看第二本书做铺垫,直接看第二本书可能会很吃力。实战java高并发程序设计主要看:前4章、5.1、5.2、5.3、5.10、5.11和第6章。——
javaweb项目,mavenweb项目,springboot项目的区别
xrkhy
JavaWeb SpringBoot SSM spring boot 后端 java
文章目录一、项目定义与定位二、核心架构差异三、依赖管理机制四、项目结构与配置五、构建与部署流程六、适用场景推荐核心差异总结一、项目定义与定位JavaWeb项目基于原生JavaEE技术栈(Servlet/JSP/JDBC),依赖外部Web容器(如Tomcat)运行。需手动配置web.xml管理Servlet和过滤器,依赖库需下载后放入WEB-INF/lib目录。典型场景:传统企业级应用(如ERP系统
Web服务器(Apache Tomcat)
凯凯的blog
Web核心 IDEA Maven 服务器 tomcat
Web服务器是一个应用程序,对HTTP协议进行封装,使得程序员不必直接对协议进行操作。将web项目部署到服务器中,对外提供网上浏览的服务Tomcat是一个轻量级Web服务器,支持Servlet/JSP少量的JavaEE规范在IDEA中使用Tomcat(插件)pom.xml添加org.apache.tomcat.maventomcat7-maven-plugin2.1使用mavenhelper插件快
WebLogic 12.1.3补丁:安全、性能与稳定性升级指南
凌莫凡
本文还有配套的精品资源,点击获取简介:Oracle的WebLogicServer是企业级JavaEE应用服务器,用于开发、部署和管理分布式业务应用程序。WebLogic12.1.3补丁于2018年7月17日发布,主要为了解决安全漏洞、优化性能和提升系统稳定性及兼容性。补丁包含安全修复、性能优化、稳定性增强、兼容性升级以及可能的新功能引入,而WebLogic10.3.6虽然发布于2011年,但继续获
Shiro技术原理与实战全景详解
北漂老男人
Shiro 运维 学习方法 开发语言
Shiro技术原理与实战全景详解一、Shiro简介ApacheShiro是一款强大、易用的Java安全框架,提供了身份认证、授权、加密、会话管理等安全能力。它以简单易用、可插拔、灵活扩展著称,广泛应用于JavaEE、SpringBoot等主流技术栈。二、Shiro主流程环节与设计思想2.1主流程环节概览Shiro的核心流程分为四大环节:认证(Authentication):用户身份校验(登录)授权
医院预约挂号系统源码_基于Java web的医院预约挂号系统
weixin_39668496
医院预约挂号系统源码
源码编号:B-E00011点击查看分类规则项目类型:JavaEE项目(javaweb项目)项目名称:基于javaweb的医院预约挂号系统(appointment-web)当前版本:V2.0.0版本难度等级:✩✩复杂程度:✩✩点击查看难度等级用户类型:单角色(只有管理员)设计模式:MVC(jsp+servlet+javabean)项目架构:B/S架构开发语言:Java语言主要技术:mvc、jdbc、
面试问答总结之并发编程
信计2102罗铠威
javaEE系列专栏 面试 java 多线程 并发编程
文章目录个人主页:信计2102罗铠威JavaEE系列专栏前言:多线程的优点、缺点并发编程的核心问题:不可见性、乱序性、非原子性不可见性乱序性非原子性JMM(java内存模型)volatile关键字:保证可见性、禁止指令重排序CAS机制(ConpareAndSwap比较并交换)CAS会产生ABA问题java中锁的分类乐观锁、悲观锁可重入锁读写锁ReentrantReadwriteLock分段锁自旋锁
Spring概述
changelzj
Spring spring java 后端
Spring是什么Spring(官网:https://spring.io/)是一款主流的JavaEE开源框架,用于简化Java企业级应用的开发难度,缩短开发周期,Spring的用途不仅限于服务端的开发,从简单性,可测试性,和松耦合的角度而言,任何应用都可以从Spring中收益。Spring框架除了提供自身的框架功能,还提供整合其他技术和框架的能力。广义上的Spring框架广义上的Spring泛指以
Java求职者面试:Spring、Spring Boot、Spring MVC与MyBatis技术深度解析
迢迢星万里灬
Java面试宝典 Java 面试 Spring Spring Boot Spring MVC MyBatis
Java求职者面试:Spring、SpringBoot、SpringMVC与MyBatis技术深度解析一、第一轮提问(基础概念问题)1.请解释什么是Spring框架?它的核心功能是什么?JY:Spring是一个开源的Java/JavaEE企业级应用开发框架,其核心功能是通过依赖注入(DI)和面向切面编程(AOP)来简化企业级应用的开发。Spring框架的核心模块包括IoC容器、AOP支持、数据访问
eclipse里面找不到server选项
xyy511
myeclipse
一般的eclipse当然没有了,如果是j2ee版,或者装了web插件,或者是myeclipse的话才有这个选项SDK的Eclipse版本没有Server选项的,得下载JavaEE版本的Eclipse转自http://blog.csdn.net/wugangsunny/article/details/25246565集成Eclipse和Tomcat时找不到server选项:按照网上的步骤如下:在Ec
Servlet完整笔记
@小红花
后端技术栈 servlet 笔记
Servlet规范1、servlet规范来自于JAVAEE规范中的一种2、作用指定动态资源文件开发步骤指定Http服务器调用动态资源文件规则指定Http服务器管理动态资源文件实例对象规则Servlet接口实现类1、Servlet接口来自于Servlet规范下一个接口,这个接口存在Http服务器,提供jar包2、Tomcat服务器下lib文件有一个servlet-api.jar存放Servlet接口
统一思想认识
永夜-极光
思想
1.统一思想认识的基础,才能有的放矢
原因:
总有一种描述事物的方式最贴近本质,最容易让人理解.
如何让教育更轻松,在于找到最适合学生的方式.
难点在于,如何模拟对方的思维基础选择合适的方式. &
Joda Time使用笔记
bylijinnan
java joda time
Joda Time的介绍可以参考这篇文章:
http://www.ibm.com/developerworks/cn/java/j-jodatime.html
工作中也常常用到Joda Time,为了避免每次使用都查API,记录一下常用的用法:
/**
* DateTime变化(增减)
*/
@Tes
FileUtils API
eksliang
FileUtils FileUtils API
转载请出自出处:http://eksliang.iteye.com/blog/2217374 一、概述
这是一个Java操作文件的常用库,是Apache对java的IO包的封装,这里面有两个非常核心的类FilenameUtils跟FileUtils,其中FilenameUtils是对文件名操作的封装;FileUtils是文件封装,开发中对文件的操作,几乎都可以在这个框架里面找到。 非常的好用。
各种新兴技术
不懂事的小屁孩
技术
1:gradle Gradle 是以 Groovy 语言为基础,面向Java应用为主。基于DSL(领域特定语言)语法的自动化构建工具。
现在构建系统常用到maven工具,现在有更容易上手的gradle,
搭建java环境:
http://www.ibm.com/developerworks/cn/opensource/os-cn-gradle/
搭建android环境:
http://m
tomcat6的https双向认证
酷的飞上天空
tomcat6
1.生成服务器端证书
keytool -genkey -keyalg RSA -dname "cn=localhost,ou=sango,o=none,l=china,st=beijing,c=cn" -alias server -keypass password -keystore server.jks -storepass password -validity 36
托管虚拟桌面市场势不可挡
蓝儿唯美
用户还需要冗余的数据中心,dinCloud的高级副总裁兼首席营销官Ali Din指出。该公司转售一个MSP可以让用户登录并管理和提供服务的用于DaaS的云自动化控制台,提供服务或者MSP也可以自己来控制。
在某些情况下,MSP会在dinCloud的云服务上进行服务分层,如监控和补丁管理。
MSP的利润空间将根据其参与的程度而有所不同,Din说。
“我们有一些合作伙伴负责将我们推荐给客户作为个
spring学习——xml文件的配置
a-john
spring
在Spring的学习中,对于其xml文件的配置是必不可少的。在Spring的多种装配Bean的方式中,采用XML配置也是最常见的。以下是一个简单的XML配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.or
HDU 4342 History repeat itself 模拟
aijuans
模拟
来源:http://acm.hdu.edu.cn/showproblem.php?pid=4342
题意:首先让求第几个非平方数,然后求从1到该数之间的每个sqrt(i)的下取整的和。
思路:一个简单的模拟题目,但是由于数据范围大,需要用__int64。我们可以首先把平方数筛选出来,假如让求第n个非平方数的话,看n前面有多少个平方数,假设有x个,则第n个非平方数就是n+x。注意两种特殊情况,即
java中最常用jar包的用途
asia007
java
java中最常用jar包的用途
jar包用途axis.jarSOAP引擎包commons-discovery-0.2.jar用来发现、查找和实现可插入式接口,提供一些一般类实例化、单件的生命周期管理的常用方法.jaxrpc.jarAxis运行所需要的组件包saaj.jar创建到端点的点到点连接的方法、创建并处理SOAP消息和附件的方法,以及接收和处理SOAP错误的方法. w
ajax获取Struts框架中的json编码异常和Struts中的主控制器异常的解决办法
百合不是茶
js json编码返回异常
一:ajax获取自定义Struts框架中的json编码 出现以下 问题:
1,强制flush输出 json编码打印在首页
2, 不强制flush js会解析json 打印出来的是错误的jsp页面 却没有跳转到错误页面
3, ajax中的dataType的json 改为text 会
JUnit使用的设计模式
bijian1013
java 设计模式 JUnit
JUnit源代码涉及使用了大量设计模式
1、模板方法模式(Template Method)
定义一个操作中的算法骨架,而将一些步骤延伸到子类中去,使得子类可以不改变一个算法的结构,即可重新定义该算法的某些特定步骤。这里需要复用的是算法的结构,也就是步骤,而步骤的实现可以在子类中完成。
 
Linux常用命令(摘录)
sunjing
crond chkconfig
chkconfig --list 查看linux所有服务
chkconfig --add servicename 添加linux服务
netstat -apn | grep 8080 查看端口占用
env 查看所有环境变量
echo $JAVA_HOME 查看JAVA_HOME环境变量
安装编译器
yum install -y gcc
【Hadoop一】Hadoop伪集群环境搭建
bit1129
hadoop
结合网上多份文档,不断反复的修正hadoop启动和运行过程中出现的问题,终于把Hadoop2.5.2伪分布式安装起来,跑通了wordcount例子。Hadoop的安装复杂性的体现之一是,Hadoop的安装文档非常多,但是能一个文档走下来的少之又少,尤其是Hadoop不同版本的配置差异非常的大。Hadoop2.5.2于前两天发布,但是它的配置跟2.5.0,2.5.1没有分别。 &nb
Anychart图表系列五之事件监听
白糖_
chart
创建图表事件监听非常简单:首先是通过addEventListener('监听类型',js监听方法)添加事件监听,然后在js监听方法中定义具体监听逻辑。
以钻取操作为例,当用户点击图表某一个point的时候弹出point的name和value,代码如下:
<script>
//创建AnyChart
var chart = new AnyChart();
//添加钻取操作&quo
Web前端相关段子
braveCS
web前端
Web标准:结构、样式和行为分离
使用语义化标签
0)标签的语义:使用有良好语义的标签,能够很好地实现自我解释,方便搜索引擎理解网页结构,抓取重要内容。去样式后也会根据浏览器的默认样式很好的组织网页内容,具有很好的可读性,从而实现对特殊终端的兼容。
1)div和span是没有语义的:只是分别用作块级元素和行内元素的区域分隔符。当页面内标签无法满足设计需求时,才会适当添加div
编程之美-24点游戏
bylijinnan
编程之美
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
public class PointGame {
/**编程之美
主页面子页面传值总结
chengxuyuancsdn
总结
1、showModalDialog
returnValue是javascript中html的window对象的属性,目的是返回窗口值,当用window.showModalDialog函数打开一个IE的模式窗口时,用于返回窗口的值
主界面
var sonValue=window.showModalDialog("son.jsp");
子界面
window.retu
[网络与经济]互联网+的含义
comsci
互联网+
互联网+后面是一个人的名字 = 网络控制系统
互联网+你的名字 = 网络个人数据库
每日提示:如果人觉得不舒服,千万不要外出到处走动,就呆在床上,玩玩手游,更不能够去开车,现在交通状况不
oracle 创建视图 with check option
daizj
视图 view oralce
我们来看下面的例子:
create or replace view testview
as
select empno,ename from emp where ename like ‘M%’
with check option;
这里我们创建了一个视图,并使用了with check option来限制了视图。 然后我们来看一下视图包含的结果:
select * from testv
ToastPlugin插件在cordova3.3下使用
dibov
Cordova
自己开发的Todos应用,想实现“
再按一次返回键退出程序 ”的功能,采用网上的ToastPlugins插件,发现代码或文章基本都是老版本,运行问题比较多。折腾了好久才弄好。下面吧基于cordova3.3下的ToastPlugins相关代码共享。
ToastPlugin.java
package&nbs
C语言22个系统函数
dcj3sjt126com
c function
C语言系统函数一、数学函数下列函数存放在math.h头文件中Double floor(double num) 求出不大于num的最大数。Double fmod(x, y) 求整数x/y的余数。Double frexp(num, exp); double num; int *exp; 将num分为数字部分(尾数)x和 以2位的指数部分n,即num=x*2n,指数n存放在exp指向的变量中,返回x。D
开发一个类的流程
dcj3sjt126com
开发
本人近日根据自己的开发经验总结了一个类的开发流程。这个流程适用于单独开发的构件,并不适用于对一个项目中的系统对象开发。开发出的类可以存入私人类库,供以后复用。
以下是开发流程:
1. 明确类的功能,抽象出类的大概结构
2. 初步设想类的接口
3. 类名设计(驼峰式命名)
4. 属性设置(权限设置)
判断某些变量是否有必要作为成员属
java 并发
shuizhaosi888
java 并发
能够写出高伸缩性的并发是一门艺术
在JAVA SE5中新增了3个包
java.util.concurrent
java.util.concurrent.atomic
java.util.concurrent.locks
在java的内存模型中,类的实例字段、静态字段和构成数组的对象元素都会被多个线程所共享,局部变量与方法参数都是线程私有的,不会被共享。
Spring Security(11)——匿名认证
234390216
Spring Security ROLE_ANNOYMOUS 匿名
匿名认证
目录
1.1 配置
1.2 AuthenticationTrustResolver
对于匿名访问的用户,Spring Security支持为其建立一个匿名的AnonymousAuthenticat
NODEJS项目实践0.2[ express,ajax通信...]
逐行分析JS源代码
Ajax nodejs express
一、前言
通过上节学习,我们已经 ubuntu系统搭建了一个可以访问的nodejs系统,并做了nginx转发。本节原要做web端服务 及 mongodb的存取,但写着写着,web端就
在Struts2 的Action中怎样获取表单提交上来的多个checkbox的值
lhbthanks
java html struts checkbox
第一种方法:获取结果String类型
在 Action 中获得的是一个 String 型数据,每一个被选中的 checkbox 的 value 被拼接在一起,每个值之间以逗号隔开(,)。
所以在 Action 中定义一个跟 checkbox 的 name 同名的属性来接收这些被选中的 checkbox 的 value 即可。
以下是实现的代码:
前台 HTML 代码:
003.Kafka基本概念
nweiren
hadoop kafka
Kafka基本概念:Topic、Partition、Message、Producer、Broker、Consumer。 Topic: 消息源(Message)的分类。 Partition: Topic物理上的分组,一
Linux环境下安装JDK
roadrunners
jdk linux
1、准备工作
创建JDK的安装目录:
mkdir -p /usr/java/
下载JDK,找到适合自己系统的JDK版本进行下载:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
把JDK安装包下载到/usr/java/目录,然后进行解压:
tar -zxvf jre-7
Linux忘记root密码的解决思路
tomcat_oracle
linux
1:使用同版本的linux启动系统,chroot到忘记密码的根分区passwd改密码 2:grub启动菜单中加入init=/bin/bash进入系统,不过这时挂载的是只读分区。根据系统的分区情况进一步判断. 3: grub启动菜单中加入 single以单用户进入系统. 4:用以上方法mount到根分区把/etc/passwd中的root密码去除 例如: ro
跨浏览器 HTML5 postMessage 方法以及 message 事件模拟实现
xueyou
jsonp jquery 框架 UI html5
postMessage 是 HTML5 新方法,它可以实现跨域窗口之间通讯。到目前为止,只有 IE8+, Firefox 3, Opera 9, Chrome 3和 Safari 4 支持,而本篇文章主要讲述 postMessage 方法与 message 事件跨浏览器实现。postMessage 方法 JSONP 技术不一样,前者是前端擅长跨域文档数据即时通讯,后者擅长针对跨域服务端数据通讯,p