springboot 整合 MongoDB 实现登录注册,html 页面获取后台参数的方法
springboot简介:
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
MongoDB的简介:
做完这一个小练习,发现 springboot 对 html 要求十分严格,稍不注意就会出现某个标签 必须加上结束标签才不会报错,但是有些标签即使加上了结束标签,仍然报错。
只能做一个springboot对html的不严格检查的处理:
在pom.xml配置上:
<!--启用不严格检查html-->
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
</dependency>
还要在application.properties配置:
#对html检查不那么严格
spring.thymeleaf.mode = LEGACYHTML5
spring boot建议不要使用JSP,建议使用Thymeleaf来做动态页面传递参数到html页面,也就是html页面
在pom.xml中启用themleaf模板依赖:
注意的是:在controller层中配置 @Controller 才能在controller层中 return 到 html 页面,
因为使用 @Controller 才可以返回html页面,使用@ResController 返回的是字符串
<!-- themleaf模板依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
使用的是 MongoDB数据库,所以需要增加mongodb支持 :
<!-- 增加mongodb支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
因为MongoDB默认是没有用户名密码,所以在 application.properties 对 MongoDB 的只需要配置上:选择要操作的数据库名称
当要选择操作数据库的某个集合(表)的时候,就是定义的实体类的名称,所以实体类的名称一定要与你选择的数据库里面的集合(表)名相对应,如果不存在,就会自动创建该集合(表)
# 选择数据库名称
spring.data.mongodb.database=krry_test
springboot框架,html 页面要想从后台接收参数,需要这样子:
后台可使用 model 存放数据,注意的是 Model 是 request 级别的
@RequestMapping(value="/index")
public String index(Model model){ User usero = new User("##errors##","1234");
model.addAttribute("user", usero); return "index";
}
在 html 标签设置:<html xmlns:th="http://www.thymeleaf.org">
在标签内部用 th:text="${user.username}" 获取
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>首页</title>
</head>
<body> <span class="username" th:text="${user.username}"></span> </body>
</html>
话不多少,先看看目录结构:

pom.xml
<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.krry</groupId>
<artifactId>springboot_mongodb</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--
spring boot 父节点依赖,
引入这个之后相关的引入就不需要添加version配置,
spring boot会自动选择最合适的版本进行添加。
-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
</parent> <!-- spring boot web支持:mvc,aop... -->
<dependencies> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- themleaf模板依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency> <!--启用不严格检查html-->
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
</dependency> <!-- 增加mongodb支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency> </dependencies> </project>
application.properties
# MongoDB 默认是无密码,这里配置一下要操作的数据库名称就行
#spring.data.mongodb.authentication-database= # Authentication database name.
# 选择数据库名称
spring.data.mongodb.database=krry_test
#对html检查不那么严格
spring.thymeleaf.mode = LEGACYHTML5
#spring.data.mongodb.field-naming-strategy= # Fully qualified name of the FieldNamingStrategy to use.
#spring.data.mongodb.grid-fs-database= # GridFS database name.
#spring.data.mongodb.host=localhost # Mongo server host.
#spring.data.mongodb.password= # Login password of the mongo server.
#spring.data.mongodb.port=27017 # Mongo server port.
#spring.data.mongodb.repositories.enabled=true # Enable Mongo repositories.
#spring.data.mongodb.uri=mongodb://localhost/test # Mongo database URI. When set, host and port are ignored.
#spring.data.mongodb.username= # Login user of the mongo server.
实体类:User.java
package com.krry.entity; import org.springframework.data.annotation.Id; /**
* 实体类,类名对应的是MongoDB的集合名(表名),若没有,则自动创建
* @author asusaad
*
*/
public class User { /**
* cid:该字段用于mongodb的“_id"索引
* 1 需要 @Id的注解
* 2定义为String类型 ,如果定义为Integer可能索引只会是0
* 会出现key重复导致数据库插不进去的情况
* 3该类型也是MongoRepository泛型类主键的ID
*
*/
@Id
private String cid;
private String username;
private String password; public User(){ } public User(String username, String password) {
this.username = username;
this.password = password;
} public String getCid() {
return cid;
}
public void setCid(String cid) {
this.cid = cid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
} }
数据库操作的接口:UserRepository.java
package com.krry.repository;
import org.springframework.data.mongodb.repository.MongoRepository;
import com.krry.entity.User;
public interface UserRepository extends MongoRepository<User, String> {
/**
*
* findByUsername 命名有研究,比如 findBy后面的名称是实体类属性名称
* Username
*
*/
public User findByUsername(String username);
}
控制层:UserController.java
package com.krry.controller; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import com.krry.entity.User;
import com.krry.repository.UserRepository; //使用@Controller 才可以返回html页面,使用@ResController 返回的是字符串
@Controller
@RequestMapping(value="/index")
public class UserController { @Autowired
private UserRepository userRepository; @Autowired
private MongoTemplate mongoTemplate; //spring boot建议不要使用JSP,默认使用Thymeleaf来做动态页面传递参数到html页面
//Model是request级别的
/**
* 首页
* @param request
* @return
*/
@RequestMapping(value="/index")
public String index(Model model,HttpServletRequest request){ User user = (User) request.getAttribute("user"); if(user == null){
// System.out.println(user);
User usero = new User("##errors##","1234");
model.addAttribute("user", usero);
} return "index";
} /**
* 打开登录界面
* @return
*/
@RequestMapping(value="/oplogin")
public String oplogin(){ return "login";
} /**
* 登录
* @param model
* @return
*/
@RequestMapping(value="/login")
public String login(HttpServletRequest request){
//获取用户和密码
String username = request.getParameter("username");
String password = request.getParameter("password"); //根据用户名查询,用户是否存在
User user = userRepository.findByUsername(username); //如果存在
if(user!=null){ if(password.equals(user.getPassword())){
//如果密码正确
//将用户信息放入到会话中...
request.setAttribute("user", user); return "index"; }else{
//如果密码错误
System.out.println("密码错误");
return "ferror";
}
}else{
//如果不存在,代码邮箱和密码输入有误
System.out.println("用户不存在");
return "ferror";
}
} /**
* 打开注册界面
* @return
*/
@RequestMapping("/resgi")
public String resgi(){ return "resgi";
} /**
* 注册控制层
* @param request
* @return
*/
@RequestMapping(value="/rege")
public String resig(HttpServletRequest request){
//获取用户和密码
String username = request.getParameter("username");
String password = request.getParameter("password"); //根据昵称查询,用户是否存在
User user = userRepository.findByUsername(username); //若存在
if(user != null){ //昵称重复
return "ferror";
} //若不存在
User newUser = new User(username,password);
//注册
userRepository.save(newUser); //将信息设置session作用域
request.setAttribute("user", newUser); return "index";
} @ResponseBody
@RequestMapping("/findByName")
public User findByName(){ return userRepository.findByUsername("krryxq");
} @ResponseBody
@RequestMapping("/find")
public List<User> find(){ return mongoTemplate.findAll(User.class);
}
}
启动类:MongoDBApllication.java
package com.krry; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
public class MongoDBApllication { public static void main(String[] args) {
SpringApplication.run(MongoDBApllication.class, args);
}
}
首页 index.html:
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>首页</title>
</head>
<body> <p class="title">用户名:<span class="username" th:text="${user.username}"></span>已登录</p>
<a href="/index/logout" id="login"></a> <script type="text/javascript" th:src="@{/js/jquery-1.11.2.min.js}"></script>
<script type="text/javascript">
if($(".username").text() == "##errors##"){
$(".title").text("未登录");
$("#login").attr("href","/index/oplogin");
$("#login").text("点击登陆");
}
/**
* 判断非空
*
* @param val
* @returns {Boolean}
*/
function isEmpty(val) {
val = $.trim(val);
if (val == null)
return true;
if (val == undefined || val == 'undefined')
return true;
if (val == "")
return true;
if (val.length == 0)
return true;
if (!/[^(^\s*)|(\s*$)]/.test(val))
return true;
return false;
}
</script>
</body>
</html>
登录界面 login.html:
<!DOCTYPE HTML>
<html>
<head> <title>登录界面</title>
</head>
<body>
<form action="/index/login" method="post">
用户名:<input type="text" name="username"></input><br/>
密 码:<input type="password" name="password"/></input>
<input type="submit"></input><br/><br/>
</form>
<a href="/index/resgi">点我注册</a>
</body>
</html>
注册界面 resgi.html:
<!DOCTYPE HTML>
<html>
<head> <title>注册界面</title> </head> <body>
<form action="/index/rege" method="post">
用户名:<input type="text" name="username"/></input><br/>
密 码:<input type="password" name="password"/></input><br/>
<input type="submit">
</form>
</body>
</html>
错误界面 ferror.html:
<!DOCTYPE HTML>
<html>
<head> <title>错误</title> </head> <body>
登录时:用户名或密码错误<br/>或<br/>注册时:用户名已存在
<a href="/index/oplogin">返回登录</a>
</body>
</html>
这里说一下,如果错误界面命名为 error.html 的话,那么 springboot 报错时跳转的页面就是默认跳转到你定义的 error.html 页面。
springboot 整合 MongoDB 实现登录注册,html 页面获取后台参数的方法的更多相关文章
- springboot整合freemarker模板引擎后在页面获取basePath绝对路径
在项目中引用静态资源文件或者进行ajax请求时我们有时候会使用 ${basePath} ,其实这就是一种获取绝对路径的方式: 那么在springboot项目中要怎么配置才能使用 basePaht呢? ...
- 8、SpringBoot整合之SpringBoot整合MongoDB
SpringBoot整合MongoDB 一.创建项目,选择依赖 仅选择Spring Web.Spring Data MongoDB即可 二.引入相关依赖(非必要) 这里只是为了实体类的创建方便而引入l ...
- SpringBoot 整合 MongoDB 实战介绍
一.介绍 在前面的文章中,我们详细的介绍了 MongoDB 的配置和使用,如果你对 MongoDB 还不是很了解,也没关系,在 MongoDB 中有三个比较重要的名词:数据库.集合.文档! 数据库(D ...
- java操作mongodb & springboot整合mongodb
简单的研究原生API操作MongoDB以及封装的工具类操作,最后也会研究整合spring之后作为dao层的完整的操作. 1.原生的API操作 pom.xml <!-- https://mvnre ...
- SpringBoot整合mongoDB
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 这一片文章介绍一个springboot整合mongodb,如果你了解整合mysql之类的 ...
- SpringBoot 整合mongoDB并自定义连接池
SpringBoot 整合mongoDB并自定义连接池 得力于SpringBoot的特性,整合mongoDB是很容易的,我们整合mongoDB的目的就是想用它给我们提供的mongoTemplate,它 ...
- Springboot整合MongoDB的Docker开发,其它应用也类似
1 前言 Docker是容器开发的事实标准,而Springboot是Java微服务常用框架,二者必然是会走到一起的.本文将讲解如何开发Springboot项目,把它做成Docker镜像,并运行起来. ...
- SpringBoot 整合 Shiro 密码登录与邮件验证码登录(多 Realm 认证)
导入依赖(pom.xml) <!--整合Shiro安全框架--> <dependency> <groupId>org.apache.shiro</group ...
- nodejs+express+mongodb实现登录注册
nodejs+express+mongodb实现登录注册 1 简介 登录注册功能使用nodejs+express+mongodb完成,其中对mongodb的操作使用mongoose完成,对mongod ...
随机推荐
- Python基础——字符串
Python版本:3.6.2 操作系统:Windows 作者:SmallWZQ 在Python中,字符串也是一种数据类型.相比其它数据类型,字符串算是比较复杂的.为何呢?因为字符串不仅包含英文字母 ...
- vue——安装并新建项目
一.对于vue的安装: 1.安装vue之前先安装node,https://nodejs.org/zh-cn/download/,我装的是windows64位的: 2.下载好了之后就可以按照正常顺序安装 ...
- 吾八哥学Selenium(三):操作复选框checkbox/单选框radio的方法
复选框checkbox和单选框radio是web网站里经常会使用到的两个控件,那么在web自动化测试的时候如何利用Selenium来操作这俩控件呢?今天我们就来简单入门练习一下! html测试页面代码 ...
- python函数式编程之装饰器(二)
以前用装饰器,都是定义好了装饰器后,使用@装饰器名的方法写入被装饰函数的正上方 在这里,定义的装饰器都是没有参数的 在定义装饰器的函数的时候,没有在括号里定义参数,这就叫做无参装饰器 既然有无参装饰器 ...
- mysql数据库 索引 事务和事务回滚
mysql索引 索引相当于书的目录优点:加快数据的查询速度缺点:占物理存储空间,添加,删除,会减慢写的速度 查看表使用的索引 mysql> show index from 表名\G;(\G分行显 ...
- Linux基础五
Yum软件包管理 yum:基于rpm包构建的软件更新机制 自动解决软件包依赖关系 所有软件包由集中的yum软件仓库提供. [root@hydra桌面]#ls /misc/cd/repodata/ (r ...
- SQL 脚本持续收集...
1.复制表 ---sqlserver (包括表结构和表数据) SELECT * INTO TABEL_NEW FROM TABLE_OLD---sqlserver(只复制表结构)CREATE TABL ...
- canvas API总结
从简单的基本图形,到复杂炫酷的动画,通过canvas元素获取的2D图形渲染上下文CanvasRenderingContext2D,能够使用丰富的API来进行图形绘制.这篇文章将会总结在之前的canva ...
- 经典案例之MouseJack
引言:在昨天的文章<无线键鼠监听与劫持>中,我们提到今天会向您介绍一个无线键鼠的监听与劫持的经典案例,<MouseJack>:MouseJack能利用无线鼠标和键盘存在的一些问 ...
- 获取JSON对象的属性名称
1.问题背景 一个json对象,是以键值对组成,通过循环json对象,获取json对象中的属性名称 2.实现源码 <!DOCTYPE html PUBLIC "-//W3C//DTD ...