Spring Boot实战系列《六》:人事管理系统的登录设计

Spring Boot实战系列《六》:人事管理系统的登录设计

1.前言

在上一篇中教大家在IEDA或者eclipse中使用spirng initializer快速创建spring boot项目,这样构造出来的spring boot项目,自动配置了基本的运行环境和项目结构。便于开发时的继续工作,推荐使用。

那么在经过了前面几篇的介绍以后,接下里我们开始做一个小小的人事管理系统,来进一步熟悉spring boot的开发流程。

本次人事管理系统的基本技术有:

废话不多说,先使用spirng initializer来快速创建人事管理系统项目。

2.创建人事管理系统项目

首先新建spring boot项目,

填写项目的名称:

就叫pmsystem吧。
勾选需要的模块依赖:

然后选择项目保存的路径,点击完成。IDEA就会开始自动导入jar包,最后完成项目构建。
最后创建好了项目如下:

鉴于pom.xml爱出问题,我这里给出源码:
pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zout</groupId><artifactId>pmsystem</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>pmsystem</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.10.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><thymeleaf.version>3.0.9.RELEASE</thymeleaf.version><!-- 布局功能的支持程序  thymeleaf3主程序  layout2以上版本 --><!-- thymeleaf2   layout1--><thymeleaf-layout-dialect.version>2.2.2</thymeleaf-layout-dialect.version></properties><dependencies><!-- 引入thymeleaf模板引擎 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!-- 引入web模块 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 引入启动器-可以使用注解来开发了 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--引入jquery-webjar--><dependency><groupId>org.webjars</groupId><artifactId>jquery</artifactId><version>3.3.1</version></dependency><!--引入bootstrap--><dependency><groupId>org.webjars</groupId><artifactId>bootstrap</artifactId><version>4.0.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

这样就创建好了一个spring boot项目,也就是我们的人事管理系统pmsystem了,找到主函数main(),右键运行。

启动项目:
然后你发发现报错了?

原因:

因为spring boot默认会加载org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration类,DataSourceAutoConfiguration类使用了@Configuration注解向spring注入了dataSource bean。因为工程中没有关于dataSource相关的配置信息,当spring创建dataSource bean因缺少相关的信息就会报错。
因为我们刚刚创建一个基础的spring boot,什么实体类都没有写,于是可以先在Application类上增加@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})来阻止spring boot自动注入dataSource bean。

解决:

@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
  • 1

图示:

等做了相关配置或者添加了@bean注解,再去掉这个注解。

运行项目,输入http://localhost:8080/

看到如下界面表示项目启动成功了。

3.登录页面设计

创建好了本项目以后,初次启动成功。证明jar包导入没有问题,接下里就开始写一个登录页面。
首先,我们使用的是bootstrap,那么需要引入jquery,css等静态资源文件。

1.引入bootstarp静态资源

静态资源文件,需要导入项目的static文件夹下:
我新建了一个asserts文件夹来存放哟。(资源就是bootstarp官网下载的4.0版。或者文末给出项目资源文件下载地址。)
图示:

2.新建登录login.html:

需要放到指定位置,不然无法让模板来解析。
这里需要说明:

假设Index.html是一个登录页面。
那么首先spring boot要默认访问首页》》是访问静态资源文件下的index.html这个界面。

举个栗子:
比如你的resources文件夹下有新建一个public文件夹,下面放个index.html,然后又在templates下放一个index.html。

他就会自己去访问public下的index而不是模板下写的index,因为首先默认去访问的是静态资源。

所以我们呢,需要更改》》》使用controller来控制默认访问的首页的位置。

做法如下:
首先在templates文件夹下新建一个login.html页面(自定义的,你可以写index,xxx一样的。):

然后记得声明这个一个模板引擎页面,然后使用thymelmeaf语法引入cssjs等资源。

源码:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><meta name="description" content=""><meta name="author" content=""><title>人事系统登录页面</title><!-- webjars是引入的jar路径 --><link href="asserts/css/bootstrap.min.css" th:href="@{/webjars/bootstrap/4.0.0/css/bootstrap.css}" rel="stylesheet"><!-- asserts是本地路径 --><link href="asserts/css/signin.css" th:href="@{/asserts/css/signin.css}" rel="stylesheet">
</head>

因为是登录页面,那么就需要写一个form表单:

里面就是账号密码登录按钮,这些。

body中的源码:

<body class="text-center">
<form class="form-signin" action="dashboard.html" method="post"><img class="mb-4" th:src="@{/asserts/img/bootstrap-solid.svg}" src="asserts/img/bootstrap-solid.svg" alt="" width="72" height="72"><h1 class="h3 mb-3 font-weight-normal">Please sign in</h1><label class="sr-only">Username</label><input type="text" class="form-control" placeholder="Username" required="" autofocus=""><label class="sr-only">Password</label><input type="password" class="form-control" placeholder="Password" required=""><div class="checkbox mb-3"><label><input type="checkbox" value="remember-me"> Remember me</label></div><button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button><p class="mt-5 mb-3 text-muted">© 2018-www.zoutao.info/zt</p><a class="btn btn-sm">中文</a><a class="btn btn-sm">English</a>
</form>
</body>
</html>

解释:
如图中的是使用thymeleaf模板语法来指明引用的地址,

那么,比如说,我们要引用一些公共资源,是不需要引入到自己的项目下,可以直接引入jar包,然后使用webjar来引入对应的公共资源即可啊。
就是在pom.xml中引入:

然后使用模板引擎的方式来正确引用即可。
Webjar下的请求都来jar的resources文件夹下来找的。

它存在于项目的:

这就是上面
th:href="@{/webjars/bootstrap/4.0.0/css/bootstrap.css}"
这句话的意思,就是去当前引用的项目下找到对应的公共资源。
这只是引用公共资源的一种举例,为了告诉大家以后可以采用这种方式来引入pom.xml里面导入的插件包。(以上做为了解就好。)

3.新建controller来控制默认访问的首页的位置。

因为spring boot配置了URL默认会加上前后缀:templates和html。

控制默认访问的首页的位置有三种方式:

第一种:在controller层里面新建一个hellocontroller:

跟spring mvc一样的写法:

@RequestMapping({"/","/index.html"})public String index(){return "login";}

注意:/表示当前项目路径,/index.html表示当前url。就是这两种URL都由index这个方法来处理的意思。

启动sprite boot,运行:可以看到默认访问位置已经来到了我们刚才写的login.html页面。

但是这种方式,以后我们每次一个URL变化都要来为页面写一个空方法,比较麻烦,于是改为使用config》》控制文件来控制即可。

第二种:
直接使用视图映射,直接把请求映射到某个页面即可。也就是我们常用的spring mvc的方式。
创建config文件夹和mymvcconfig.java:

这样写:写一个addViewControllers方法,使用ViewControllerRegistry对象。该对象的addViewController方法,就是一个视图解析器。跟ModelAndView()有点像。

源码:

public void addViewControllers(ViewControllerRegistry registry){//浏览器发送 /请求来到 login.html页面registry.addViewController("/").setViewName("login");}

运行:也是一样的效果,记得注释掉第一种方法,在运行哟。

第三种方法:推荐
因为所有的WebMvcConfigurerAdapter组件都会一起起作用,那么我们就应该写成一个总体方法,不要一个一个的单独写。
专门做返回视图解析。

重写视图解析器,经常使用spring mvc的同学都知道,我们经过controller来跳转页面都是一个视图解析的过程,那么spring boot也已经提供了视图解析器给大家使用,这样重写,以后我们就可以把所有需要解析的写在里面即可。

 /***告诉spring boot存在这个视图解析的专门方法。* @return adapter 视图解析对象*/@Beanpublic WebMvcConfigurerAdapter webMvcConfigurerAdapter(){WebMvcConfigurerAdapter adapter =new WebMvcConfigurerAdapter(){//重写他的视图映射方法-以后所有的视图解析都可以写在这里面了。@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/").setViewName("login");}};return adapter;}

将组件注册在容器》这样才能生效,相当于告诉springboot这个东西的存在。使用的是**@bean**注解。

最后运行:

依旧可以访问到。

上面三种方法,推荐第三种,第三种相当于第二种的封装,第一种的抽象。

最后给出MyMvcConfig的源码:

package com.zout.config;import com.zout.component.MyLocaleResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;/*** @Description: 自定义配置,必须继承自动配置类* @Author: Zoutao* @Date: 2018/12/4*/
@Configuration
public class MyMvcConfig extends WebMvcConfigurerAdapter{/*public void addViewControllers(ViewControllerRegistry registry){//浏览器发送 /请求来到loginregistry.addViewController("/").setViewName("login");}*//***告诉spring boot存在这个视图解析的专门方法。* @return adapter 视图解析对象*/@Beanpublic WebMvcConfigurerAdapter webMvcConfigurerAdapter(){WebMvcConfigurerAdapter adapter =new WebMvcConfigurerAdapter(){//重写他的视图映射方法-以后所有的视图解析都可以写在这里面了@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/").setViewName("login");registry.addViewController("/index.html").setViewName("login");}};return adapter;}
}

上面就是整个人事管理系统的登录设计,主要是使用bootstarp来做一个登录页面效果,然后使用MyMvcConfig来自定义视图解析器,做到URL请求和设置默认访问的首页效果。

Spring Boot实战系列《六》:人事管理系统的登录设计相关推荐

  1. Spring Boot 实战系列课程终于齐啦~

    Spring Boot 如今已成为 Java 开发必学技术,其可以大大简化 Spring 应用的初始搭建以及开发过程. Spring Boot 不仅支持直接嵌入 Tomcat,Jetty 或 Unde ...

  2. spring boot实战(第六篇)加载application资源文件源码分析

    前言 在上一篇中了解了spring配置资源的加载过程,本篇在此基础上学习spring boot如何默认加载application.xml等文件信息的. ConfigFileApplicationLis ...

  3. 最新Spring Boot实战项目(权限后台管理系统)详解

    Spring Boot实战项目 - 权限后台管理系统 简介 这是一套基于spring boot 2.16.shiro.jwt.redis.swagger2.mybatis .thymeleaf.lay ...

  4. Spring Boot干货系列:(六)静态资源和拦截器处理 | 掘金技术征文

    原本地址:Spring Boot干货系列:(六)静态资源和拦截器处理 博客地址:tengj.top/ 前言 本章我们来介绍下SpringBoot对静态资源的支持以及很重要的一个类WebMvcConfi ...

  5. Spring Boot入门系列(十六)整合pagehelper,一秒实现分页功能!

    之前讲了Springboot整合Mybatis,然后介绍了如何自动生成pojo实体类.mapper类和对应的mapper.xml 文件,并实现最基本的增删改查功能.接下来要说一说Mybatis 的分页 ...

  6. Spring Boot 实战 —— MyBatis(注解版)使用方法

    原文链接: Spring Boot 实战 -- MyBatis(注解版)使用方法 简介 MyBatis 官网 是这么介绍它自己的: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过 ...

  7. 那些在《JavaEE开发的颠覆者 Spring Boot实战》中遇到的坑,,。(一)

    一.一开始下了一本PDF书,影印版,看一般的字还是看的清,但是看到代码部分的话,还是会有模糊,尤其是一些配置的时候,后来是在不行就去网上搜了一下,找到一个网易云阅读上有网页版的<JavaEE开发 ...

  8. 程序猿最终之路-架构师:Spring boot实战战役解析

    什么是架构师 所谓架构师,通俗地说就是设计师或结构设计者,这些定义如果用在建筑学上,则是很容易理解的.在软件工程领域中,软件架构师实际上就是软件项目的总体设计师,是软件组织新产品的开发与集成.新技术体 ...

  9. Spring Boot:(六)默认日志logback配置解析

    Spring Boot:(六)默认日志logback配置解析 前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的,你呢 如何引入日志? 日 ...

最新文章

  1. phpstrom配置svn/git提交
  2. flink 写入到es_《从0到1学习Flink》—— Flink 写入数据到 Kafka
  3. 举例讲清楚模型树和回归树的区别
  4. Git的使用教程(三)
  5. C++ 枚举类型的思考
  6. python中文版软件下载-Python IDLE(Python集成开发环境)v3.7中文版
  7. Mapx中的图元移动
  8. Parallels Desktop 16 提示“已损坏,无法打开”的解决办法
  9. Spring Boot 接入 Dubbo 指导文档
  10. 【igraph实例】Commmunity 识别
  11. python量化交易--因子选股策略
  12. 高德地图坐标转平面坐标
  13. Adguard,一键屏蔽电脑所有广告
  14. CMDN Club #23 开放平台和O2O移动产品开发
  15. 老男孩51CTO博客博文列表整理版20170620更新
  16. 「实验性讲稿」载谭 Binomial Sums 详解
  17. 一般来说,联盟链相对于公有链的优势在哪里?
  18. 案例:程序员离职在家,全职接单心得
  19. 企业微信_H5应用如何真机调试_host配置及代理相关
  20. spring cloud gateway 与spring cloud版本对应问题

热门文章

  1. 在VS中建立一个易于管理的C++工程
  2. volley 调用php接口,使用Volley发送帖子请求并使用PHP接收
  3. Oralcle存储过程书写规范
  4. php 菜谱 源码,基于php的菜谱大全api调用代码实例
  5. CCF 2017年题目题解 - Python
  6. DBoW2 cmake代码注释
  7. C++模板基本概念及语法
  8. tar php启动,安装php过程(FastCGI模式)
  9. 错误记录 Could NOT find GTest (missing: GTEST_INCLUDE_DIR)
  10. 强化学习(十三) 策略梯度(Policy Gradient)