博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot构建简单的微博应用
阅读量:4089 次
发布时间:2019-05-25

本文共 5822 字,大约阅读时间需要 19 分钟。

构建简单的微博应用 由发表在

使用Spring Boot可以快速开发一个非常简易的Micro Blog应用。包含微博列表、发表微博、用户登录/登出等功能。

注:有兴趣的同学可以参考一下。

环境准备

  • 文本编辑器或IDE
  • ,如果使用Eclipse或Idea IntelliJ等IDE,Maven是内置的

初始化代码

是一个生成Spring Boot应用初始代码的工具,在网站上选择需要的功能特性,然后下载的zip包中会添加响应的配置代码,在这里我们选择WebThymeleafJDBC以及H2四个选项:

  • Spring Mvc作为Web框架
  • Thymeleaf作为模板引擎
  • Spring JDBC连接H2内存数据库(H2仅用在开发测试、而不用于生产环境)

选择Generate Project后会下载得到一个zip包,解压缩后目录结构如下:

~/Downloads  unzip -l microblog-demo.zipArchive:  microblog-demo.zip  Length     Date   Time    Name --------    ----   ----    ----        0  08-04-15 12:40   microblog-demo/        0  08-04-15 12:40   microblog-demo/src/        0  08-04-15 12:40   microblog-demo/src/main/        0  08-04-15 12:40   microblog-demo/src/main/java/        0  08-04-15 12:40   microblog-demo/src/main/java/demo/        0  08-04-15 12:40   microblog-demo/src/main/java/demo/microblog/        0  08-04-15 12:40   microblog-demo/src/main/resources/        0  08-04-15 12:40   microblog-demo/src/main/resources/static/        0  08-04-15 12:40   microblog-demo/src/main/resources/templates/        0  08-04-15 12:40   microblog-demo/src/test/        0  08-04-15 12:40   microblog-demo/src/test/java/        0  08-04-15 12:40   microblog-demo/src/test/java/demo/        0  08-04-15 12:40   microblog-demo/src/test/java/demo/microblog/     1777  08-04-15 12:40   microblog-demo/pom.xml      332  08-04-15 12:40   microblog-demo/src/main/java/demo/microblog/MicroblogDemoApplication.java        0  08-04-15 12:40   microblog-demo/src/main/resources/application.properties      512  08-04-15 12:40   microblog-demo/src/test/java/demo/microblog/MicroblogDemoApplicationTests.java --------                   -------     2621                   17 files

接下来可以根据自己的喜欢,选择在IDE中导入项目,或者直接选用称手的文本编辑器进行开发。

功能与页面分析

根据功能描述,我们需要实现几个页面以及处理用户表单提交数据的POST请求:

  • 页面GET请求:首页——包含Micro Bog列表和创建Micro Blog条目的表单
  • POST请求:创建Micro Blog
  • GET请求:登录(log in)页面,包含用户登录的输入表单
  • POST请求:登录
  • GET, Post请求:登出(log out)

数据模型与数据库设计

Micro Blog的条目可以简单的用Entry类来抽象:

class Entry {    public String title;    public String text;    public Entry() {    }    public Entry(String title, String text) {        this.title = title;        this.text = text;    }}

为了将数据持久化到关系型数据库,创建src/main/resource/schema.sql

drop table if exists entries;create table entries (  id integer primary key auto_increment,  title text not null,  `text` text not null);

Spring Boot在默认情况下,会加载classpath上的schema.sql并执行,这样在应用启动时数据库中的entries表已经建立好。

登录页面

创建src/main/resources/templates/login.html

Login

Username:
Password:

处理登录请求:

private static final String LOGGED_IN = "logged_in";private boolean verify( String username, String password) {    return "admin".equals(username) && "password".equals(password);}@RequestMapping(value = "/login", method = RequestMethod.POST)public String login(@RequestParam("username") String username,                    @RequestParam("password") String password,                    HttpSession session) {    if (session.getAttribute(LOGGED_IN) != null) {        return "redirect:/";    }    if (!verify(username, password)) {        return "login";    }    session.setAttribute(LOGGED_IN, true);    return "redirect:/";}

在获取用户输入的usernamepassword后,需要对其进行验证,这里我们仅仅用了最简单的静态用户名admin和静态密码password,只有完全相等才能够通过验证,在真实的环境中可以编写另外的逻辑——例如获取数据库中的密码进行比对。

如果登录成功,我们会在session中放置一个属性LOGGED_IN作为标志,那么一个优化是如果用户在已经登录的情况下仍然访问/login,那么直接为其跳转到首页。

登出请求

@RequestMapping(value = "/logout", method = { RequestMethod.GET, RequestMethod.POST})public String logout(HttpSession session) {    session.removeAttribute(LOGGED_IN);    return "redirect:/";}

首页

首页包含两个功能:

  • 为用户创建Micro Blog条目提供输入表单
  • 展示已经创建(存储于数据库中)的Micro Blog条目列表

从数据库中获取条目

@Autowiredprivate JdbcTemplate jdbcTemplate;@RequestMapping(value = "", method = RequestMethod.GET)public String index(Model model) {    List
entries = this.jdbcTemplate.query("select title, text from entries", (rs, i) -> new Entry(rs.getString("title"), rs.getString("text"))); model.addAttribute("entries", entries); return "index";}

JdbcTemplate是Spring JDBC提供的访问数据库的模板类,通过它可以执行SQL语句并将查询结果集映射为Java对象。通过jdbcTemplate.query获取对象列表后,将其放入Spring WebMvc提供的Model中,以便在模板中将其渲染为HTML展示给用户。

页面模板

创建src/main/resources/templates/index.html

Micro Blog

Title:
Text:
  • Unbelievable. No entries here so far

页面模板包含两部分,首先是一个表单,包含titletext两个<input>用于输入Micro Blog的标题和内容;然后是<ul>展示Micro Blog列表,这里用到的是Thymeleaf模板语言中的th:each迭代条目集合。

注意th:if="${session.logged_in}"的使用,在页面中当用户处于登录状态时,应该显示登出链接以及表单;如果用户没有登录,那么只应该给出一个登录按钮。

创建Micro Blog条目

当然,现在的首页是没有任何内容的,仅仅会显示Unbelievable. No entries here so far,因为我们的数据库中尚未添加任何数据。为了能够获取用户表单的输入数据,必须添加一个@Controller处理表单请求:

@RequestMapping(value = "", method = RequestMethod.POST)public String create(@RequestParam("title") String title,                     @RequestParam("text") String text) {    this.jdbcTemplate.update("insert into entries(title, text) values(?,?)", title, text);    return "redirect:/";}
  • @RequestParam可以获取表单中的输入,它的作用相当于HttpServletRequest.getParameter(String name)
  • 获得用户输入后,jdbcTemplate.update()方法执行insert语句,将数据存储至数据库中。
  • 数据保存完成后,redirect:/跳转回首页,这时刚刚提交的数据已经显示在条目列表中了。

静态资源

为了让页面更加美观、交互性更强,通常需要引入CSS和JavaScript代码。Spring Boot默认将classpath上的static目录serve出去作为静态资源访问目录,例如[]()会被映射为static/css/style.css并将其内容返回给用户。

在Thymeleaf模板中可以通过th:href引入CSS文件:

  Microblog based on Spring Boot  

运行应用

完成上述配置后,运行应用有两种方法:

  • 在IDE中直接运行main方法
  • 使用Maven插件:mvn spring-boot:run
  • 通过Maven打包应用:maven clean install,运行:java -jar build/libs/${appname}-{version}.jar

在浏览器中访问即可看到我们的Micro Blog应用了

更多文章请访问

你可能感兴趣的文章
OpenCV meanshift目标跟踪总结
查看>>
人工神经网络——神经元模型介绍
查看>>
人工神经网络——感知器介绍
查看>>
人工神经网络——反向传播算法(BackPropagation)
查看>>
进程的地址空间概述
查看>>
Windows 窗口底层原理
查看>>
一种函数指针的运用
查看>>
Win32程序之进程的原理
查看>>
C++虚函数原理
查看>>
MySQL的索引
查看>>
今天,Python信息量很大!
查看>>
Flash 已死,Deno 当立?
查看>>
编程差的程序员,90%都是吃了数学的亏!骨灰级开发:方法不对,努力也白费...
查看>>
编程差的程序员,90%都是吃了数学的亏!骨灰级开发:方法不对,努力也白费...
查看>>
都无代码了,还要程序员吗?
查看>>
程序员:凭自己能力吃饭,有什么理由瞧不起?
查看>>
面试想拿 10K,HR 说我只配7k?
查看>>
副业过万的程序员都知道的网站有哪些
查看>>
那些人生“开挂”的程序员,都在干什么?
查看>>
影响科学圈的那些计算机代码
查看>>