JAVA开发实例—简易的登陆系统
一、前言
本系列文章是构建一个登陆系统,主要使用SpringBoot框架和前端的ajax请求。在文章中,会分享完成的顺序以及代码。本文章不会提供Maven的搭建教程,以及各种依赖项的配置,会提供相关的参考文章。本文会将从前端和后端两个部分分别讲解。
二、准备
实例开发的环境:
1.idea2022.3.1专业版
2.jdk17
3.maven3
4.mysql8.0
在开始实例之前,需要有以下准备:
1.项目的创建:
https://blog.csdn.net/weixin_51309915/article/details/123349773
需要注意的是,最好是配置自己的镜像仓库,不然下载依赖的时候会很慢。如何配置就不细说了,上链接。
https://www.cnblogs.com/Eastry/p/12795238.html
三、前端的实现
由于时间的关系,没有实现注册的相关操作。首先是前端界面的实现,大家也可以找自己喜欢的界面。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
html {
height: 100%;
}
body {
height: 100%;
}
.container {
height: 100%;
background-image: linear-gradient(to right, #fbc2eb, #a6c1ee);
}
.login-wrapper {
background-color: #fff;
width: 358px;
height: 588px;
border-radius: 15px;
padding: 0 50px;
position: relative;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
.header {
font-size: 38px;
font-weight: bold;
text-align: center;
line-height: 200px;
}
.input-item {
display: block;
width: 100%;
margin-bottom: 20px;
border: 0;
padding: 10px;
border-bottom: 1px solid rgb(128, 125, 125);
font-size: 15px;
outline: none;
}
.input-item::placeholder {
text-transform: uppercase;
}
.btn {
text-align: center;
padding: 10px;
width: 100%;
margin-top: 40px;
background-image: linear-gradient(to right, #a6c1ee, #fbc2eb);
color: #fff;
}
.msg {
text-align: center;
line-height: 88px;
}
a {
text-decoration-line: none;
color: #abc1ee;
}
</style>
</head>
这段代码主要呈现css样式。
<body>
<div class="container">
<div class="login-wrapper">
<div class="header">Login</div>
<div class="form-wrapper">
<form id="loginform" name="wrapper" action="#" method="post" onsubmit="return false">
<input type="text" name="username" placeholder="username" class="input-item">
<input type="password" name="password" placeholder="password" class="input-item">
<input type="button" class="btn" onclick="getInputVal()" value="login">
</form>
<!-- <p class="alert">cap</p>-->
</div>
<div class="msg">
没有该系统的用户?
<a href="#">注册</a>
</div>
</div>
</div>
这段代码使用了form表单,为了能够接收到用户输入的登陆信息,并且弃用表单提交,原因是表单提交会使页面跳转,给用户带来不好的体验。而使用ajax请求能很好的解决这一点。
<script type="text/javascript" src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js">
</script>
<script>
function getInputVal(){
var params = $("#loginform").serializeArray();
var result = {};
$.each(params, function(index, value) {
result[value.name] = value.value;
})
// console.log(JSON.stringify(result))
$.ajax({
contentType:"application/json;charset=UTF-8",
traditional:true,
type:"POST",
async: true,
dataType:"json",
url:"http://localhost:8080/index",
data:JSON.stringify(result),
success: function (jr){
// var obj= JSON.parse(data);
// alert(obj.result);
console.log(jr)
},
error: function (data1){
// alert(data1.stringify())
}
})
}
</script>
</body>
</html>
请求类型为POST,发送类型为JSON字符串,需要注意的是,发送类型一定要定义为
contentType:"application/json;charset=UTF-8",否则,后端无法接收数据!!
将三块代码拼接在一起就是完整的前端代码。
四、后端的实现
1.接收数据
由于前端发送的是JSON字符串,后端接收时必须使用@ResponseBody和@RequestBody注解,
并且要使用JAVA类进行封装,可以自定义USER类,也可以使用MAP类,但要注意自定义类的属性要与JSON字符串的属性个数一致,不然会接收不到数据。
2.数据库查询
使用了mybatis,mybatis是公司项目使用最多的mysql数据库框架,比JDBC更简洁、更快、更安全。附上配置链接MyBatis:一文带你全面了解 - 知乎,至于数据库如何创建,相信大家是有基础的哈哈哈。
需要在UserMapper中定义以下sql语句:
<select id="findByusername" parameterType="String" resultType="String">
select nullif(password,0) from tb_user where username=#{name}
</select>
使用nullif(),是为了防止查询为空时报错,阻止程序正常运行。
完成配置以后,可以使用Test类进行查询测试。
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import pojo.User;
import java.io.IOException;
import java.io.Reader;
public class UserTest {
@Test
public void userFindByTest() {
String resources = "MybatisConfig.xml";
Reader reader = null;
try {
reader = Resources.getResourceAsReader(resources);
}catch (IOException e) {
e.printStackTrace();
}
SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sqlMapper.openSession();
String upassword = session.selectOne("findByusername","kz");
System.out.println(upassword);
session.close();
}
}
注意类名的修改。测试成功后,直接将配置粘贴复制到contorll类中。
String resources = "MybatisConfig.xml";
Reader reader = null;
try {
reader = Resources.getResourceAsReader(resources);
}catch (IOException e) {
e.printStackTrace();
}
SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sqlMapper.openSession();
接下来就使用JAVA语言中的分支结构,进行对登陆数据的判断。
先判断输入是否为空:
if (Objects.equals(username, "") || Objects.equals(password, "")) {
json.put("result","error: haven't username or password");
System.out.println(json);
return json;
}
再进行查询,有三种结果,分别是无用户名,密码错误,登陆成功。
else{
String upassword = session.selectOne("findByusername",username);
if(upassword==null){
json.put("result","error: don't find username");
}else if (upassword.equals(password)){
json.put("result","success: login success");
}else json.put("result","error: password error");
System.out.println(json);
return json;
}
由于需要返回给前端一个JSON数据,还需要在MAVEN中配置JSON相关的依赖。可参考以下文章
Maven项目使用JSON需要的依赖包_maven org.json-CSDN博客
附上完整的contorll代码:
package com.example.gc_web.contorller;
import com.fasterxml.jackson.databind.util.JSONPObject;
import jakarta.servlet.http.HttpServletRequest;
import net.sf.json.JSONObject;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.web.bind.annotation.*;
import pojo.User;
import java.io.IOException;
import java.io.Reader;
import java.util.Map;
import java.util.Objects;
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@RestController
@CrossOrigin(origins = "*")
public class login_contorll {
@RequestMapping(path = "/index",method = RequestMethod.POST)
@ResponseBody
public JSONObject login(@RequestBody Map map){
// System.out.println(map.get("username"));//hahah
// System.out.println(map.get("password"));//123456
String username= (String) map.get("username");
String password= (String) map.get("password");
JSONObject json = new JSONObject();
String resources = "MybatisConfig.xml";
Reader reader = null;
try {
reader = Resources.getResourceAsReader(resources);
}catch (IOException e) {
e.printStackTrace();
}
SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sqlMapper.openSession();
if (Objects.equals(username, "") || Objects.equals(password, "")) {
json.put("result","error: haven't username or password");
System.out.println(json);
return json;
}
else{
String upassword = session.selectOne("findByusername",username);
if(upassword==null){
json.put("result","error: don't find username");
}else if (upassword.equals(password)){
json.put("result","success: login success");
}else json.put("result","error: password error");
System.out.println(json);
return json;
}
// return new JSONObject();
}
}
附上Application代码:
package com.example.gc_web;
import com.example.gc_web.contorller.login_contorll;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.web.bind.annotation.*;
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@RestController
public class GcWebApplication {
public static void main(String[] args) {
SpringApplication.run(login_contorll.class,args);
}
}
五、总结
这个案例在只有java基础下,做了5天之久,对于SpringBoot下各种框架的使用还不够熟练,还需要多加的练习。做这个案例的初衷是为了实现一个基于深度学习的垃圾分类系统,所以前后端的开发并不是我主要的任务,如果本文章出现原则上的错误,希望各位大佬指导指导。
总结了以下难点:
1.ajax请求的发送与接收
2.mybatis的配置以及使用
后续文章将对登陆系统的注册部分进行完善。
更多推荐


所有评论(0)