当前位置: 首页 > news >正文

Spring Boot基础教程——web应用开发-模板引擎

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一.    spring boot的web应用开发,是基于spring mvc

二.    Spring boot 在spring默认基础上,自动配置添加了以下特性:
1.    包含了ContentNegotiatingViewResolver和BeanNameViewResolver beans。
2.    对静态资源的支持(图片、js、css等),包括对WebJars的支持
3.    自动注册Converter,GenericConverter,Formatter beans。
4.    对HttpMessageConverters的支持。
5.    自动注册MessageCodeResolver。
6.    对静态index.html的支持
7.    对自定义Favicon的支持。
8.    主动使用ConfigurableWebBindingInitializer bean

三.    模板引擎的选择
FreeMarker
Thymeleaf

Velocity (1.4版本之后弃用,Spring Framework 4.3版本之后弃用)
Groovy
Mustache
注:jsp应该尽量避免使用,原因如下
1.    jsp只能打包为:war格式,不支持jar格式,只能在标准的容器里面跑(tomcat,jetty都可以) 
2.    内嵌的Jetty目前不支持JSPs
3.    Undertow不支持jsps
4.    jsp自定义错误页面不能覆盖spring boot 默认的错误页面

四.  相关依赖

1、 FreeMarker Demo

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

2、Thymeleaf Demo

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

3、  Jsp Demo

<!--jsp解析器,内嵌tomcat-->
<dependency>
	<groupId>org.apache.tomcat.embed</groupId>
	<artifactId>tomcat-embed-jasper</artifactId>
	<scope>provided</scope><!--指定编译范围有效-->
</dependency>

<!--jstl标签-->
<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>jstl</artifactId>
</dependency>

application.properties添加配置参数(指定jsp文件的前后缀):

spring.mvc.view.prefix: /WEB-INF/templates/

spring.mvc.view.suffix: .jsp

注:

1、需加入jquery webjars依赖:

<dependency>
     <groupId>org.webjars</groupId>
     <artifactId>jquery</artifactId>
     <version>2.1.4</version>
</dependency>

将jquery的webjars加入maven库,前端便可直接使用jquery了。

2、index.ftl 等freemarker模板默认均处于src/main/resources  templates文件夹下,而图片、js、css等默认放在src/main/resources  static文件夹下;thymeleaf模板引擎也是类似。

①freemarker页面-index.ftl:

<!DOCTYPE html>
<html>
<head lang="en">
	<title>Spring Boot Demo - FreeMarker</title>
	<!--src/main/resources  static文件夹下-->
	<link href="/css/index.css" rel="stylesheet" /> 
	
</head>
<body>
	<center>
        <!--src/main/resources  static文件夹下-->
		<img src="/images/logo.png" /> 
		<h1 id="title">${title}</h1>
	</center>
	<!--生效需在pom.xml中引入jquery的webjars-->
	<script type="text/javascript" src="/webjars/jquery/2.1.4/jquery.min.js"></script>
	
	<script>
		$(function(){
			$('#title').click(function(){
				alert('点击了');
			});
		});
	</script>
</body>
</html>

②thymeleaf页面-index.html:

<!DOCTYPE html>
<html>
<head lang="en">
	<title>Spring Boot Demo - FreeMarker</title>
	<!--src/main/resources  static文件夹下-->
	<link href="/css/index.css" rel="stylesheet" />
	
</head>
<body>
	<center>
        <!--src/main/resources  static文件夹下-->
		<img src="/images/logo.png" />
        <!--thymeleaf相关语法和jquery类似-->
		<h1 id="title" th:text="${title}"></h1>
	</center>
	<!--生效需在pom.xml中引入jquery的webjars-->
	<script type="text/javascript" src="/webjars/jquery/2.1.4/jquery.min.js"></script>
	
	<script>
		$(function(){
			$('#title').click(function(){
				alert('点击了');
			});
		})
	</script>
</body>
</html>

3、WebController注意事项:

@Controller
@RequestMapping(value = "/web")
public class WebController {

	@RequestMapping(value = "/index")
	public String index(ModelMap map) {
		map.put("title", "freemarker hello word");
		return "index"; // 开头不要加上/,linux下面会出错
	}

}

 

总结:

一、freemarker和thymeleaf模板引擎区别

相同点:

1、控制器均相同

2、需引入webjars相同(如jquery  webjars)

3、二者均关联引入了spring-boot-starter-web包

不同点:

 1、引入模板引擎依赖不同

 2、页面语法不同:前者是.ftl文件;后者是纯粹的html文件

3、thymeleaf是springboot推荐使用的模板引擎

 

二、jsp模板引擎特别说明(不建议使用,原因见上文):

1、在Servlet容器中部署WAR的时候,不能依赖于Application的main函数而是要以类似于web.xml文件配置的方式来启动Spring应用上下文,所以此时需要声明这样一个类或者将应用的主类改为继承SpringBootServletInitializer也可以。

//该类的作用类似于web.xml文件配置,继承了SpringBootServletInitializer
public class ServletInitializer extends SpringBootServletInitializer {

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
		return application.sources(SpringBootDemo81Application.class);
	}

}

2、.war和.war.original打包文件的区别:前者文件大小一般比后者大,是因为后者仅包含自身的一些文件内容,而后者不仅包含自身内容,还包含所依赖的相关jar等资源;且前者可通过java -jar *.war 直接运行(因为自身内嵌了tomcat容器),而后者必须放在外部web容器(如tomcat/jetty)中才能运行。

clean package命令生成两个war包

 

clean package命令生成war结构对比

 

 

 

 

 

 

 

WEB-INF下目录结构对比

3、和freemarker及thymeleaf相比,jsp文件存放位置不同(freemarker/thymeleaf前端静态资源文件存放在src/main/resources 下 static/templates下):

jsp相关资源存放位置

 

 

 

 

 

转载于:https://my.oschina.net/Howard2016/blog/908541

相关文章:

  • APPium-python实例(记录)
  • SpringBoot(Security)
  • 初学Sockets编程(二) 关于名称和地址族
  • HDU - 1166 敌兵布阵
  • Flask+腾讯云windows主机快速搭建微信公众号接口
  • 一、简单工厂模式
  • 微软将所有的Windows代码库迁移到Git
  • magento megatron主题加入中文
  • 对象不支持“abigimage”属性或方法
  • Hyper-v创建检查点(VM的快照功能)
  • dede程序打开install安装时出现dir
  • 解答《编程之美》1.18问题1:给所有未标识方块标注有地雷概率
  • 【EMC】基本概念
  • Netty断线重连
  • 不要小看了get 与set
  • [笔记] php常见简单功能及函数
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • Akka系列(七):Actor持久化之Akka persistence
  • es6
  • gops —— Go 程序诊断分析工具
  • k8s 面向应用开发者的基础命令
  • leetcode388. Longest Absolute File Path
  • Lsb图片隐写
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Python学习笔记 字符串拼接
  • webpack入门学习手记(二)
  • 包装类对象
  • 回流、重绘及其优化
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 区块链共识机制优缺点对比都是什么
  • 移动端解决方案学习记录
  • ###C语言程序设计-----C语言学习(6)#
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (论文阅读30/100)Convolutional Pose Machines
  • (五)c52学习之旅-静态数码管
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • *上位机的定义
  • .NET gRPC 和RESTful简单对比
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .Net 应用中使用dot trace进行性能诊断
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .NET开发不可不知、不可不用的辅助类(一)
  • .NET面试题(二)
  • .net专家(高海东的专栏)
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • [ SNOI 2013 ] Quare
  • [AX]AX2012 SSRS报表Drill through action
  • [Cocoa]iOS 开发者账户,联机调试,发布应用事宜
  • [dart学习]第四篇:函数
  • [delphi]保证程序只运行一个实例
  • [DM复习]Apriori算法-国会投票记录关联规则挖掘(上)
  • [hdu 1247]Hat’s Words [Trie 图]
  • [Hive] 常见函数
  • [LeetCode] Binary Tree Preorder Traversal 二叉树的先序遍历