在上一节STEP3.2 服务器对于HTTP请求的处理流程中,我们学会了后端服务相关的理论知识。

接下来,我们就要落实到代码层面。

没有需求何来的代码开发?正所谓需求(DDL)是第一生产力,为了让我们在学习过程中不要冒出“学这个有什么用?”的奇怪想法,我们先来拟订一个需求,然后根据这个需求开展我们相关的学习,以及最后的代码开发。

我们假设我们的老板有如下三个需求:

  1. 用户可以通过账号密码登录
  2. 已经登录的用户可以查看全用户名列表(没登录就不能看)
  3. 用户可以注销

为了这三个需求,我们需要以怎样的顺序,开展哪些内容的学习呢?

  1. 学会如何搭建、配置、启动、访问服务(本节内容)
  2. 为了正常使用我们需要的第三方包,我们需要理解SpringBoot是如何管理依赖的(STEP4.2 认识pom.xml)
  3. 理解会话的概念,学会如何保持登录状态,并进行相应代码实践()
  4. 写代码搭建项目login-demo,逐步完成需求()

最后,我们还会利用Spring的特性(SpringBoot内置Spring)来优化一下我们的项目:

  • 理解Spring IOC特性()
  • 使用我们的IOC特性来为login-demo做代码优化()

那么接下来,就开始我们的第一步吧!


在这一节中,我们要用代码来实践最简单的后台处理。

其实也就是我们学任何语言or框架都首先会有的 Hello World!


一、新建SpringBoot项目

1.新建项目,选择Spring Initializr

2.设置项目基本信息

3.勾选依赖界面。我们勾选Web→Spring Web。(依赖是什么?我们到4.2节再说)

4.指定我们的项目名和项目路径

5.此时可以看到idea为我们创建的项目结构

简单说一说我们SpringBoot的项目结构,如图:

红色框:java文件夹

在这个文件夹中,主要写我们的业务代码。包括controller、service、dao,还有各种工具类等等,以及我们的程序主入口:xxxApplication。

蓝色框:resources文件夹

在这个文件夹中,有我们的全局配置文件application.properties,一般我们也会放一些其他的配置文件,比如mapper.xml(暂时不用着急在意它是什么)等等。如果是前后端不分离项目,在resources文件夹中还会放一些静态页面资源(.html等)。

绿色框:test文件夹

在这个文件夹中,主要写我们的软件测试代码。这个文件夹基本上不在我们专栏研究的范围内。

橙色框:pom.xml

这是我们管理项目依赖的文件夹,具体解释请看4.2节。在这一节中我们并不会用到它。


二、修改application.properties配置文件

首先,application.properties配置文件是什么?

这是我们SpringBoot项目的默认配置文件,在这个文件里可以设置我们的服务启动端口、数据库连接信息(连到哪个数据库)、资源文件路径(比如mybatis的xml路径)、编码、时区等等等等,很多适用于整个项目的配置都会在这里写。

不要想得太复杂,我们从本质的角度来思考一下:

.properties其实也就是一种文件格式,完全可以用我们的txt文本文档或者.xlsx表格文档等等来替代。然后我们的程序读取这个文档,比如读取这个文档里的数据库配置信息,那么我们的程序也就知道应该去访问哪个数据库。

当然,我们也完全可以丢弃配置文件,把数据库配置等等信息直接写到代码里。但这就产生了一个硬编码的问题,当我们要修改配置的时候就要回到代码去修改,非常不便。

不仅是SpringBoot,各种流行的框架都会考虑这一点,把全局配置信息分离出来,放到一个或几个单独文件里。

application.properties就是这样的文件。

但是一般应用场景中,我们会用.yml来替代.properties文件。简单举个例子讲一下.properties和.yml的区别:

对于同样的数据库配置:

.properties的配置方式:

# 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

.yml的配置方式:

# 数据源配置
spring:datasource:url: jdbc:mysql://localhost:3306/testusername: rootpassword: 123456driver-class-name: com.mysql.jdbc.Driver

.yml文件采用缩进的方式,解决了.properties需要反复写前缀的麻烦之处。

具体用.yml还是.properties来配置全凭个人喜好,笔者在这里会使用.yml来讲解~

然后,现在先来改一下配置文件后缀:

在application.properties上右键,Refactor→Rename

在application.yml中输入以下内容,为我们的Hello World项目设置一下服务启动端口(如果不设置的话,默认也是8080):

server:port: 8080

注意:port后面的冒号后面要有空格。不然配置会失效。

正确的写法:

错误的写法:

我们可以看到,如果冒号后面没有空格,port会变黑色。


三、构建项目结构

按照上篇的内容(STEP3.2 服务器对于HTTP请求的处理流程)我们应该有Controller、Service、Dao的分层,为项目添加结构如下:

注:保持良好习惯,包名小写

第一个SpringBoot程序只是写helloworld,所以service和dao层暂时用不到。但是保持良好习惯,文件夹可以先建在那里。


四、写一个HelloWorld服务

在controller包中新建一个类MyController.java,写入以下代码:

import 

涉及到的两个关键注解,释义如下:

(1)@RestController

我们查看一下RestController的定义(Ctrl+鼠标左键点进@RestController可以看到)

@Target

@RestController是@ResponseBody和@Controller的集合(一个注解包含了两个注解,同时具有两个注解的功能)。

@Controller

@Controller方法可以修饰类,指定该类是一个控制器类。这意味着该类下的方法在返回时,会自动通过视图解析器解析(如果有解析器的话),返回页面资源。(参考我们的springboot-helloworld项目的myController2:springboot-helloworld项目)

@Controller是前后端不分离的解决方案(页面通过后台来返回),不属于我们的重点内容。

@ResponseBody

该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。本质上就是把返回页面资源的控制器转变成返回数据(字符串、浮点数、json对象等等)的控制器。

(2)@GetMapping

我们查看一下@GetMapping的定义:

@Target

也就是说,如下这两种写法是等价的:

@GetMapping

@RequestMapping

那么看到下面这个@RequestMappling的写法也就很好理解了。

@GetMapping也就是指定请求方式为GET方式,里面传的参数也就是value值,代表请求的URL。

换言之,用户通过"/hello"这个url发送一个GET请求,可以进入@GetMapping("/hello")修饰的方法public String hello()里,执行里面的业务逻辑并返回。

最后运行我们的服务(在入口类SpringbootHelloworldApplication上右键运行),控制台会显示如下字样:

会首先显示一个Spring的大图标,在倒数第二行会显示服务运行在8080端口上(支持http协议访问)

打开浏览器输入localhost:8080/hello可以看到如下界面:

至此,最简易的服务就算是搭建完成了~完结撒花~

我们的helloworld项目的地址:

springboot-helloworld

springboot静态网页放哪里_STEP4.1 第一个SpringBoot项目相关推荐

  1. SpringBoot非官方教程 | 第一篇:构建第一个SpringBoot工程

    转载请标明出处:  http://blog.csdn.net/forezp/article/details/70341651  本文出自方志朋的博客 简介 spring boot 它的设计目的就是为例 ...

  2. 【Vue+SpringBoot】超详细!一周开发一个SpringBoot + Vue+MybatisPlus+Shiro+JWT+Redis前后端分离个人博客项目!!!【项目完结】

    项目目录 资源准备 前后端分离项目 技术栈 Java后端接口开发 1.前言 2.新建Springboot项目 3.整合mybatis plus 3.统一结果封装 4.整合shiro+jwt,并会话共享 ...

  3. SpringBoot系列二:搭建自己的第一个SpringBoot程序

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 一.根据官网手工搭建(http://projects.spring.io/spring-boot/#quick-start) 1 ...

  4. SpringBoot入门篇———快速开始你的第一个SpringBoot应用

    环境需要:IDEA+JDK1.8+maven xiaoxin@xiaoxin-Inspiron-5567:~$ java -version java version "1.8.0_151&q ...

  5. python爬取网页停止_Python爬虫之爬取静态网页

    所谓网络爬虫,通俗的讲,就是通过向我们需要的URL发出http请求,获取该URL对应的http报文主体内容,之后提取该报文主体中我们所需要的信息.所以,想要学习python爬虫,需要具备一些http的 ...

  6. 静态网页的制作(美食美刻)

    以下所有内容均是通过所看教程记录的笔记. 静态网页制作步骤: 1. 创建一个完整网络目录结构 一个文件夹:管理当前网站中所有的文件 index.html/default.html(文件):当前网站的入 ...

  7. python爬虫如何从一个页面进入另一个页面-Python爬虫 (一):爬取一个简单的静态网页...

    版本:python3.7 平台:windows10 工具 :pycharm 断断续续学习了py3爬虫2周左右的时间,发现自己学习的过于零散化,所以想通过这个专栏系统的整理下自己所学过的知识.如有错误, ...

  8. python 简单网页_Python爬虫 (一):爬取一个简单的静态网页

    版本:python3.7 平台:windows10 工具 :pycharm 断断续续学习了py3爬虫2周左右的时间,发现自己学习的过于零散化,所以想通过这个专栏系统的整理下自己所学过的知识.如有错误, ...

  9. abv asp是静态网页吗_2019年seo动态网页优化“指南针”

    相信那些SEO优化的那些朋友们,肯定还在一股脑的想着如何让自己的网站安静下来,他们都把这一点列入了重中之重的位置.傲马创新营销培训专家不赞成此观点,网站页面是动态还是静态,根据网站实际目的需求来确定就 ...

最新文章

  1. 饿了么监控体系:从架构的减法中演进而来
  2. 0715PHP基础:文件操作
  3. WPF 表格控件 ReoGrid 的简单使用
  4. JavaEE实战班第19天
  5. Android 8.0系统源码分析--开篇
  6. Mac上emacs gpg: 无法检查签名:没有公钥
  7. 一步步打造一个移动端手势库
  8. 19年计算机专硕学硕报名人数,2019年研究生招生报考权威数据排行,报考人数逐年上升的态势!...
  9. STM32官方封装库下载方法
  10. 轻量级日志收集转发 | fluent-bit指令详解(一)
  11. 计算机系统结构安全检测,计算机软件安全检测法综述
  12. 【OpenCV】“帧差法”实现移动物体的检测(车辆识别)
  13. 数学建模作图准备(Python-Matplotlib)Matplotlib
  14. 【flutter】整合高德地图amap_base
  15. GEE:GEE平台怎么提高用户内存限制
  16. vlog 12110错误及解决
  17. 旧金山犯罪预测与可视化分析
  18. 智能手表APP方案开发公司那个好
  19. 并发编程(五)python实现生产者消费者模式多线程爬虫
  20. python c++情侣网名是什么意思_“果然,他用的是情侣网名!”

热门文章

  1. solr系列之solr-5.5.5 window单机版默认Jetty安装
  2. NYOJ 110 剑客决斗
  3. JAVA Thread Dumps 三部曲
  4. Hazelcast介绍与使用
  5. Define in the var of function
  6. 使用cacti对mysql监控的图像解释_Linux下的监控软件cacti的安装与配置
  7. java jsp 文件上传_用JSP编写文件上传
  8. unmappable character for encoding UTF8
  9. java 10新_【Java基础】Java10 新特性
  10. 云计算三层架构_金山云发布星曜裸金属服务器 打造面向云计算2.0的云基础架构...