原文

Even though JSP has been around for a long time and is ubiquitous among Java web
servers, it has a few unfortunate flaws. One significant issue with JSP is that it appears
to be a form of HTML or XML, but it’s really neither. Most JSP templates take the form
of HTML, littered with tags from various JSP tag libraries. Although these tag libraries
bring dynamic rendering power to JSP in a succinct form, they break any hope of
authoring a well-formed document. As an extreme example, consider that a JSP tag
can even be used as the value of an HTML parameter:
" />
A side effect of tag libraries and JSP’s lack of good form is that a JSP template often
only coincidentally resembles the HTML it produces. Indeed, viewing an unrendered
JSP template in a web browser or an HTML editor gives some puzzling and ugly results.
The results aren’t just incompletely rendered—they’re a visual disaster! Because JSP
isn’t truly HTML, many web browsers and editors struggle to display anything 
that aesthetically approximates what the template will render.
Also, JSP is a specification that’s tightly coupled to the servlet specification. This
means it can only be used for web views in a servlet-based web application. JSP 
templates aren’t an option for general-purpose templating (such as formatted emails) or
in web applications that aren’t based on servlets.
Several attempts have been made over the years to supplant JSP as the dominant
view technology for Java applications. The most recent contender, Thymeleaf, shows
some real promise and is an exciting choice to consider. Thymeleaf templates are natural 
and don’t rely on tag libraries. They can be edited and rendered anywhere that
raw HTML is welcome. And because they’re not coupled to the servlet specification,
Thymeleaf templates can go places JSPs dare not tread. Let’s look at how to use
Thymeleaf with Spring MVC.

翻译,翻译的好烂,哈哈哈...

虽然JSP已经问世很久,广泛应用于java web服务器领域,但是却有些不得不说的缺点.
一个很严重的问题是JSP的写法看上去像极了HTML或者XML,但是实际上和两者的写法不全都一样.
很多JSP模板虽然使用HTML的写法,但同时又充斥着各种标签库.
虽然这些标签的写法简洁,功能强大,但是整个页面的格式却显的很乱..
举一个极端的例子,看看下面这段代码,一个JSP标签竟然能用作HTML参数值.
" />
JSP乱糟糟的格式和标签库最终导致JSP模板与其生成的HTML页面非常类似.
在浏览器或者HTML编辑器里查看一个未经渲染的JSP模板通常让人感觉困惑且丑陋不堪.
导致这一结果的原因不仅仅是页面没有被渲染,这些模板简直就是视觉终结者.
因为JSP写法有点像HTML但又不全是,结果导致浏览器或者编辑器努力用HTML的形式展示,最终渲染出来的页面混乱不堪.
另一方面,JSP是一个与Servlet规范高度耦合的规范.这表示JSP只能在兼容servlet的web应用中使用.
JSP模板也无法应用在通用场景(比如格式化邮件)或者不兼容servlet的web应用中.
这些年来,也出现过取代JSP的方案.最近出现的Thymeleaf显示了一些诱人的愿景以及一些激动人心的选项.
Thymeleaf模板也很接地气,不用依赖标签库,因此可以应用在所有兼容HTML的场景中.
同时因为Thymeleaf并不与servlet规范有任何的耦合,因此能涉足一些JSP无法应用的场景.

上面说了那么多,我看完这节,感觉这个框架要死.

配置Thymeleaf

	@Bean
	public ViewResolver viewResolver(SpringTemplateEngine templateEngine) {
		ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
		viewResolver.setTemplateEngine(templateEngine);
		return viewResolver;
	}

	@Bean
	public TemplateEngine templateEngine(TemplateResolver templateResolver) {
		SpringTemplateEngine templateEngine = new SpringTemplateEngine();
		templateEngine.setTemplateResolver(templateResolver);
		return templateEngine;
	}

	@Bean
	public TemplateResolver templateResolver() {
		TemplateResolver templateResolver = new ServletContextTemplateResolver();
		templateResolver.setPrefix("/WEB-INF/templates/");
		templateResolver.setSuffix(".html");
		templateResolver.setTemplateMode("HTML5");
		return templateResolver;
	}

配置其实照抄源代码就行了.照抄时遇到了问题

spring in action 4 6.4 使用Thymeleaf_第1张图片

提示TemplateResolver这个类没有找到..

我比较了一下我用的版本和源代码中用的版本,发现我用的是3.0.2.RELEASE而源代码里用的是2.1.3.RELEASE,于是我把版本改成与源代码一致.于是通过了.

EXO ME!!!!!

尼玛你升级个版本还直接把原来的类删除了!!!!!!

上回遇到一个开源软件这么干,是tcpcopy,这个工具还是网易出的开源流量复制工具.在linux下使用,几乎每个版本都大改动,0.9版本和1.0版本大改动.命令都不兼容.刚刚使用的时候极其痛苦.我看这个软件在githup最新的修改时间是2014年,也许有别的原因导致不再更新.

无法理解为什么直接删除已经废弃的类或者方法,JDK还直接把方法标成Deprecated,但是新版本并没有不兼容,仍然可以使用,只是会警告. 

spring好像也没这么干过啊.

这种做法,直接导致旧代码无法使用新的版本啊...想想还有类似的事件,当年window phone7不能升级到window phone8的做法..听说有什么内核不兼容等等..反正高大上的说法对于终端用户来说就是放屁扯蛋.最后导致现在诺鸡手机死了.微软手机业务跟三伏天里的蜡烛一样..永远也别想硬起来.

我觉得这种无视旧用户体验,肆意强暴旧用户灵魂的开源框架,早晚要死.所以不再往下看了,还好这个破玩意只讲了一节,不看也罢.

当然,如果你技术够好,也可以任性.但是感觉不出来非得用你这个框架.

So....Fuck off!!! Thymeleaf....

spring in action 4 6.4 使用Thymeleaf_第2张图片