本文共 5822 字,大约阅读时间需要 19 分钟。
构建简单的微博应用 由发表在
使用Spring Boot可以快速开发一个非常简易的Micro Blog应用。包含微博列表、发表微博、用户登录/登出等功能。
注:有兴趣的同学可以参考一下。
是一个生成Spring Boot应用初始代码的工具,在网站上选择需要的功能特性,然后下载的zip包中会添加响应的配置代码,在这里我们选择Web
, Thymeleaf
, JDBC
以及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请求:
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
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:/";}
在获取用户输入的username
和password
后,需要对其进行验证,这里我们仅仅用了最简单的静态用户名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:/";}
首页包含两个功能:
@Autowiredprivate JdbcTemplate jdbcTemplate;@RequestMapping(value = "", method = RequestMethod.GET)public String index(Model model) { Listentries = 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
- Unbelievable. No entries here so far
页面模板包含两部分,首先是一个表单,包含title
和text
两个<input>
用于输入Micro Blog的标题和内容;然后是<ul>
展示Micro Blog列表,这里用到的是Thymeleaf模板语言中的th:each
迭代条目集合。
注意th:if="${session.logged_in}"
的使用,在页面中当用户处于登录状态时,应该显示登出链接以及表单;如果用户没有登录,那么只应该给出一个登录按钮。
当然,现在的首页是没有任何内容的,仅仅会显示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
完成上述配置后,运行应用有两种方法:
main
方法mvn spring-boot:run
maven clean install
,运行:java -jar build/libs/${appname}-{version}.jar
在浏览器中访问即可看到我们的Micro Blog应用了
更多文章请访问