前面两篇博客中我们简单介绍了spring Boot项目的创建、并且也带小伙伴们来DIY了一个Spring Boot自动配置功能,那么这些东西说到底最终还是要回归到Web上才能体现出它的更大的价值,so,今天我们就来看一下如何使用Spring Boot来开发Web项目。当然,如果小伙伴对Spring Boot尚不熟悉的话,可以先参考一下这两篇博客:

1.初识Spring Boot框架
2.初识Spring Boot框架(二)之DIY一个Spring Boot的自动配置
Spring Boot 提供了spring-boot-starter-web来为Web开发予以支持,spring-boot-starter-web为我们提供了嵌入的Tomcat以及SpringMVC的依赖,用起来很方便。另外,我们这里还要用到模板引擎,我们做web开发可选的模板引擎还是挺多的,这里我主要使用Thymeleaf作为模板引擎,事实上,Spring Boot提供了大量的模板引擎,包括FreeMarker、Groovy、Thymeleaf、Velocity和Mustache,在 提供的这么多中它推荐使用Thymeleaf。Thymeleaf在使用的过程中通过ThymeleafAutoConfiguration类对集成所需要的Bean进行自动配置,通过ThymeleafProperties来配置Thymeleaf,包括前缀后缀什么的,我们可以查看ThymeleafProperties一段源码:
@ConfigurationProperties("spring.thymeleaf")
public class ThymeleafProperties {
private static final Charset DEFAULT_ENCODING = Charset.forName("UTF-8");
private static final MimeType DEFAULT_CONTENT_TYPE = MimeType.valueOf("text/html");
public static final String DEFAULT_PREFIX = "classpath:/templates/";
public static final String DEFAULT_SUFFIX = ".html";
private boolean checkTemplate = true;
private boolean checkTemplateLocation = true;
private String prefix = "classpath:/templates/";
private String suffix = ".html";
private String mode = "HTML5";
......
......
......
}
OK,从这一段源码中我们可以看到默认的页面后缀名为.html,前缀为classpath:/templates/,实际上也就是我们需要把html页面放到resources文件夹下的templates文件夹中。同时我们也看到了要如何修改这个配置,在application.properties文件中以spring.thymeleaf为前缀来配置相关属性。
创建Project
注意创建的时候要选择Thymeleaf作为依赖,这样创建成功的Project中将自动包含spring-boot-starter-web,如下图:
创建JavaBean
我一会要从后台传递数据给前台页面,数据的载体就是这个JavaBean,如下:
public class Person {
private String name;
private Integer age;
public Person() {
super();
}
public Person(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
后台数据构造
在入口类中添加如下代码,由后台向前台页面返回两条数据,一个单个的Person对象,还有一个people对象是一个List集合,集合中放了3个Person对象,到时候我们直接将这两条数据在html页面上显示出来,代码如下:
@RequestMapping("/")
public String index(Model model) {
Person single = new Person("aa", 11);
List<Person> people = new ArrayList<>();
Person p1 = new Person("zhangsan", 11);
Person p2 = new Person("lisi", 22);
Person p3 = new Person("wangwu", 33);
people.add(p1);
people.add(p2);
people.add(p3);
model.addAttribute("singlePerson", single);
model.addAttribute("people", people);
return "index";
}
这里的代码都很简单,不必我多说了,就是返回给前台页面两个对象,一个singlePerson,一个people,另外,我们的前台页面叫做index.html。
引入相关的静态文件
这里我使用到了Bootstrap和jQuery两个库,当然这个并不是必须的,只是为了让我们显示的效果更好看一些,静态文件我们要放在src/main/resources/static目录下。
放置之后目录如下:
前台展示页面
刚才小伙伴们都看到了,默认情况下前台页面要放在src/main/resources/templates目录下,so,我们在该目录下新建文件就叫index.html,如下:
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<title>Test20</title>
<link th:href="@{bootstrap/css/bootstrap.min.css}" rel="external nofollow" rel="external nofollow" rel="stylesheet" />
<link th:href="@{bootstrap/css/bootstrap-theme.min.css}" rel="external nofollow" rel="stylesheet" />
</head>
<body>
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">访问Model</h3>
</div>
<div class="panel-body">
<span th:text="${singlePerson.name}"></span>
</div>
</div>
<div th:if="${not #lists.isEmpty(people)}">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">列表</h3>
</div>
<div class="panel-body">
<ul class="list-group">
<li class="list-group-item" th:each="person:${people}">
<span th:text="${person.name}"></span>
<span th:text="${person.age}"></span>
<button class="btn" th:onclick="'getName(\''+${person.name}+'\');'">获得名字</button>
</li>
</ul>
</div>
</div>
</div>
<script th:src="@{jquery-3.1.1.js}" type="text/javascript"></script>
<script th:src="@{bootstrap/js/bootstrap.min.js}" type="text/javascript"></script>
<script th:inline="javascript">
var single = [[${singlePerson}]];
console.log(single.name+"/"+single.age);
function getName(name) {
console.log(name);
}
</script>
</body>
</html>
关于这一段html文件我简单介绍一下,首先通过xmlns:th="http://www.thymeleaf.org"导入命名空间,在后期时候的时候,由于html本身是静态视图,在使用相关属性的时候加上th:前缀可以使之变为动态视图。th:href="@{bootstrap/css/bootstrap.min.css}" rel="external nofollow" rel="external nofollow" 表示引用Web静态资源。OK,这是head部分。body部分整体上分为了两大块,第一块显示我那个单独的Person对象,第二部分显示List集合中的Person对象。div的样式这个没啥好说的,照着Bootstrap的官网写就行了,th:text="${singlePerson.name}"表示访问model中singlePerson的name属性,th:if="${not #lists.isEmpty(people)}"表示判断model中的people集合是否为空,th:each="person:${people}"表示遍历people中的元素,这个和Java里的foreach差不多,person表示迭代元素。th:onclick="'getName(\''+${person.name}+'\');'"表示添加点击事件,点击事件由JavaScript来处理。th:inline="javascript"这样添加到的script标签可以通过[[${singlePerson}]]访问model中的属性。
如此之后,我们便可以运行我们自己的项目了,然后在浏览器中访问,结果如下:
点击Button也可以在浏览器控制台看到log输出:
OK,perfect!
Tomcat相关配置
上面几乎没做什么特别的配置,大部分都使用了SpringBoot提供的默认的配置方式。有的时候我们可能需要有一些自定义的配置,比如Tomcat的配置,很简单,和上上篇博客说的基本一致,有两种不同的配置方式:
在application.properties中配置
直接在application.properties中进行配置即可,如下:
server.port=8081#配置服务器端口,默认为8080 server.session-timeout=1000000#用户回话session过期时间,以秒为单位 server.context-path=/index#配置访问路径,默认为/ server.tomcat.uri-encoding=UTF-8#配置Tomcat编码,默认为UTF-8 server.tomcat.compression=on#Tomcat是否开启压缩,默认为关闭
在代码中进行配置
@Component
public class CustomServletContainer implements EmbeddedServletContainerCustomizer {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
container.setPort(8080);
container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND,"/404.html"));
container.setSessionTimeout(10, TimeUnit.MINUTES);
}
}
自定义类实现
EmbeddedServletContainerCustomizer接口,然后设置端口、设置错误请求页面、设置会话超时时间等,大家注意这里的404页面放在src/main/resources/static文件夹下,有了这个之后,当我访问一个不存在的页面的时候就会跳转到404.html页面了。
SpringMVC相关配置
虽然Spring Boot默认的配置很多情况都可以满足我们的项目需求,可是有的时候我们可能还是会需要更加灵活的SpringMVC配置,这个时候我们只需要自定义类继承自WebMvcConfigurerAdapter,然后使用@Configuration和@EnableWebMvc注解,这样我们会完全屏蔽掉Spring Boot的默认配置,但是正常情况下我们可能只是希望在Spring Boot已有默认配置的基础上再添加一些配置即Spring Boot提供的默认配置和我自定义的配置并存的情况,这个也简单,只需要去掉@EnableWebMvc注解就行了。如下代码:
@Configuration
//@EnableWebMvc//无需使用该注解,否则会覆盖掉SpringBoot的默认配置值
public class WebMVCConfig extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/hello").setViewName("/hello");
}
}
自定义Favicon
想要自定义favicon很简单,只需要将自己的favicon.ico文件放置到src/main/resources目录下即可,重新运行项目,再看浏览器左上角图标就会变了。如下:
本案例下载地址: 本案例GitHub地址
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# spring
# boot
# web
# 开发
# web项目
# springboot的web项目
# Spring Boot2.x集成JPA快速开发的示例代码
# 使用maven开发springboot项目时pom.xml常用配置(推荐)
# springboot项目监控开发小用例(实例分析)
# 解析SpringBoot项目开发之Gzip压缩过程
# 使用Spring Boot搭建Java web项目及开发过程图文详解
# 浅谈SpringBoot项目如何让前端开发提高效率(小技巧)
# Spring Boot + Thymeleaf + Activiti 快速开发平台项目 附源码
# 自定义
# 放在
# 自己的
# 默认为
# 就会
# 目录下
# 很简单
# 只需要
# 博客
# 两篇
# 是一个
# 这是
# 情况下
# 就行了
# 小伙伴们
# 让我们
# 下载地址
# 和我
# 说了
# 基础上
相关文章:
建站之星图片链接生成指南:自助建站与智能设计教程
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
家庭建站与云服务器建站,如何选择更优?
如何登录建站主机?访问步骤全解析
,南京靠谱的征婚网站?
网站企业制作流程,用什么语言做企业网站比较好?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
如何在橙子建站上传落地页?操作指南详解
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
建站主机选购指南:核心配置与性价比推荐解析
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
在线教育网站制作平台,山西立德教育官网?
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
重庆市网站制作公司,重庆招聘网站哪个好?
浅析上传头像示例及其注意事项
建站主机是什么?如何选择适合的建站主机?
如何快速搭建FTP站点实现文件共享?
如何规划企业建站流程的关键步骤?
制作网站的公司有哪些,做一个公司网站要多少钱?
制作国外网站的软件,国外有哪些比较优质的网站推荐?
网站制作知乎推荐,想做自己的网站用什么工具比较好?
如何通过VPS搭建网站快速盈利?
制作宣传网站的软件,小红书可以宣传网站吗?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
建站之星如何防范黑客攻击与数据泄露?
PHP正则匹配日期和时间(时间戳转换)的实例代码
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
微信h5制作网站有哪些,免费微信H5页面制作工具?
如何在Tomcat中配置并部署网站项目?
视频网站制作教程,怎么样制作优酷网的小视频?
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
已有域名和空间如何快速搭建网站?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
潮流网站制作头像软件下载,适合母子的网名有哪些?
建站主机如何安装配置?新手必看操作指南
佛山网站制作系统,佛山企业变更地址网上办理步骤?
广州美橙建站如何快速搭建多端合一网站?
太平洋网站制作公司,网络用语太平洋是什么意思?
建站之星微信建站一键生成小程序+多端营销系统
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
建站之星后台管理系统如何操作?
营销式网站制作方案,销售哪个网站招聘效果最好?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
建站之星导航配置指南:自助建站与SEO优化全解析
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
如何零基础开发自助建站系统?完整教程解析
*请认真填写需求信息,我们会在24小时内与您取得联系。