Spring boot 之 Web应用开发篇
本篇文章主要是围绕如何在Spring Boot中进行Web开发呢?
一、Web中的静态资源配置
通常在我们开发Web应用的时候都需要引入大量的JS、CSS、图片 等等的静态资源。
在Spring Boot中默认提供的静态资源目录位置需要放置在classpath下,目录名称需要符合如下:
·/static
· /public
· /resources
· /META-INF/resources
例如:在src/main/resources/目录下创建一个static目录,在该目录下放置一个图片。启动程序后,尝试访问http://localhost:8080/temp.jpg,如果图片可以正常显示,则就配置成功。
二、关于Web页面的显示与渲染
在Spring Boot中,使用@RestController来处理请求,返回的内容为JSON对象。如果需要返回渲染或显示页面,可以使用@Controller来处理请求。
在Spring Boot中,官方为我们提供并推荐了多款模板引擎的默认配置支持,提供默认配置的模板引擎主要有如下几种:
· Thymeleaf
· FreeMarker
· Velocity
· Groovy
· Mustache
在这里要特别特别说明:Spring Boot建议使用这些模板引擎,避免使用JSP,若一定要使用JSP将无法实现Spring Boot的多种特性,所以,在这里我也就不再说怎么去支持JSP的配置了。
当我们要使用上面模板引擎中的任何一个时,它们默认的模板配置路径是 src/main/resources/templates,这个路径也是可以去配置修改的,至于怎么修改,继续往下面看哟 ~
在这里就以Thymeleaf为例:
简单介绍下Thymeleaf: Thymeleaf是一个XML/XHTML/HTML5模板引擎,可用于Web与非Web环境中的应用开发。它是一个开源的Java库,基于Apache License 2.0许可,由Daniel Fernández创建,该作者还是Java加密库Jasypt的作者。
Thymeleaf提供了一个用于整合Spring MVC的可选模块,在应用开发中,你可以使用Thymeleaf来完全代替JSP或其他模板引擎,如Velocity、FreeMarker等。Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式,因此也可以用作静态建模。你可以使用它创建经过验证的XML与HTML模板。相对于编写逻辑或代码,开发者只需将标签属性添加到模板中即可。接下来,这些标签属性就会在DOM(文档对象模型)上执行预先制定好的逻辑。
下面是一小段关于Thymeleaf模板引擎的示例:
<table> <thead> <tr> <th th:text="#{msgs.headers.name}">Name</td> <th th:text="#{msgs.headers.price}">Price</td> </tr> </thead> <tbody> <tr th:each="prod : ${allProducts}"> <td th:text="${prod.name}">Oranges</td> <td th:text="${#numbers.formatDecimal(prod.price,1,2)}">0.99</td> </tr> </tbody> </table>
从上面的实例中可以看到Thymeleaf主要以属性的方式加入到html标签中,浏览器在解析html时,当检查到没有的属性时候会忽略,所以Thymeleaf的模板可以通过浏览器直接打开展现,这样比较有利于前后端的分离。
如果我们要在Spring Boot中使用 Thymeleaf 模板,需要引入Spring boot Thymeleaf 的依赖,然后在默认的模板路径下 src/main/resources/templates 下编写模板文件就可以了。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
以上配置基本完成。下面来一个简单的例子演示:
HelloController.java
package com.youth.hoel.hello; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.ModelAndView; @Controller public class HelloController { @RequestMapping("/hello") public ModelAndView index(ModelMap map){ // return "Hello Spring Boot!"; map.addAttribute("host", "http://www.baikeyang.com/"); return new ModelAndView("index"); } }
index.html
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8" /> <title></title> </head> <body> <h1 th:text="${host}">Hello World</h1> </body> </html>
上面页面直接打开html显示的是Hello World,但是项目启动后访问http://localhost:8080/hello,这显示的 http://www.baikeyang.com/,这就做到了不破坏HTML自身内容的数据逻辑分离。
关于Thymeleaf的页面语法,大家可以查看Thymeleaf的官方文档学习使用。
下面是Thymeleaf的默认参数配置:
如果有需要修改默认配置,只需要将下面的修改属性复制到application.properties文件中,并修改成你说需要的值即可,比如修改模板文件的扩展名、模板路径 等
# #thymeleaf 配置 # # 开发时关闭缓存,不然没法看到实时页面 spring.thymeleaf.cache=false # 检查模板位置是否存在 spring.thymeleaf.check-template-location=true # Content-Type值 spring.thymeleaf.content-type=text/html # 启用MVC Thymeleaf视图分辨率 spring.thymeleaf.enabled=true # 模板编码 spring.thymeleaf.encoding=UTF-8 # 应该从解决方案中排除的视图名称的逗号分隔列表 spring.thymeleaf.excluded-view-names= # 要应用于模板的模板模式。 另请参见StandardTemplateModeHandlers spring.thymeleaf.mode=HTML5 # 在构建URL时,先前要查看名称的前缀 spring.thymeleaf.prefix=classpath:/templates/ # 构建URL时附加查看名称的后缀 spring.thymeleaf.suffix=.html # 链中模板解析器的顺序 spring.thymeleaf.template-resolver-order= # 可以解析的视图名称的逗号分隔列表 spring.thymeleaf.view-names=