2019独角兽企业重金招聘Python工程师标准>>>
一. 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)中才能运行。
3、和freemarker及thymeleaf相比,jsp文件存放位置不同(freemarker/thymeleaf前端静态资源文件存放在src/main/resources 下 static/templates下):