java初探(1)之登录初解
初识登录
登录的应用场景
登录比较常见,大多数网站都有登录的操作。然后登录本身也从简单到复杂有着漫长的发展历史。本文记录博主对登录的应用场景的剖析,深究不在于学习如何实现,主要关注其编码思想,过程中用到的技术,以及改进的可能。
搭建环境
本文使用SSM框架构建登录的场景,网页不采用jsp技术,而是用thymeleaf来构建模板。
简单的网页login.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>登录</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <!-- jquery -->
<script type="text/javascript" th:src="@{/js/jquery.min.js}"></script>
<!-- jquery-validator -->
<script type="text/javascript" th:src="@{/jquery-validation/jquery.validate.min.js}"></script>
<script type="text/javascript" th:src="@{/jquery-validation/localization/messages_zh.min.js}"></script> </head>
<body> <form name="loginForm" id="loginForm" method="post" style="width:30%; margin:0 auto;"> <h2 style="text-align:center; margin-bottom: 20px">用户登录</h2> <div>
<div>
<label>请输入手机号码</label>
<div >
<input id="mobile" name = "mobile" type="text" placeholder="手机号码"/>
</div>
</div>
</div> <div>
<div>
<label>请输入密码</label>
<div>
<input id="password" name="password" type="password" placeholder="密码"/>
</div>
</div>
</div> <div style="margin-top:40px;">
<div >
<button type="submit" onclick="login()">登录</button>
</div>
</div> </form>
</body>
<script>
//此处增加验证代码
// function login(){
// $("#loginForm").validate({
//
// submitHandler:function(form){
// doLogin();
// }
// });
// }
function login(){ $.ajax({
url: "/login/do_login",
type: "POST",
data:{
mobile:$("#mobile").val(),
password: $("#password").val()
},
success:function(data){
alert(data)
//逻辑判断代码,暂时不写
}
});
}
</script>
</html>网页做了个及其简陋的页面,但对于登录的逻辑判断已然足够。在springboot环境下,该html页面一定要放在resource目录下的templates子目录下,才会被视图解析器拿到。
搭建依赖包环境-pom文件
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--<dependency>-->
<!--<groupId>org.mybatis.spring.boot</groupId>-->
<!--<artifactId>mybatis-spring-boot-starter</artifactId>-->
<!--<version>1.3.1</version>-->
<!--</dependency>--> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency> <!--<dependency>-->
<!--<groupId>com.alibaba</groupId>-->
<!--<artifactId>druid</artifactId>-->
<!--<version>1.0.5</version>-->
<!--</dependency>-->
<!--<dependency>-->
<!--<groupId>redis.clients</groupId>-->
<!--<artifactId>jedis</artifactId>-->
<!--</dependency>--> <dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.38</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.6</version>
</dependency>
<!-- 参数校验工具 -->
<!--<dependency>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-validation</artifactId>-->
<!--</dependency>-->
<!--<dependency>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-amqp</artifactId>-->
<!--</dependency>-->
</dependencies>
这里主要导入spring相关的包,spring-boot-starter-web以及spring-boot-starter-thymeleaf,因为springboot可以一键搭建环境,此处暂时不做配置,如需配置,只需要在resource下创建application.yml文件即可。
创建实体类domain
对于登录功能而言,需要的一定是一个用户的实体类,因为我们网页只有手机号和密码两个属性,因此用户实体类也只有这两个属性
public class Person {
// @NotNull
private String mobile;
private String password;
@Override
public String toString() {
return "Person{" +
"mobile='" + mobile + '\'' +
", password='" + password + '\'' +
'}';
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
实体类的属性上可以添加验证标签,但现在先跳过。
创建springboot的启动类
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class);
}
}
该类要放在所有类的父包之上,保证能扫描到所有的类。
创建LoginController类
@Controller
@RequestMapping("/login")
public class LoginController { @RequestMapping("/to_login")
public String tologin(){
return "login";
} @RequestMapping("/do_login")
@ResponseBody
public String dologin(HttpServletResponse response, Person person){ System.out.println(person);
return person.toString();
}
}
测试
做到这里,已经完成了SSM环境的搭建,启动MyApplication类的main方法,springboot会自动的加载各种资源,并开启tomcat。
打开浏览器,输入网址:http://localhost:8080/login/to_login 即可跳转到login.html页面上
输入手机号码和密码点击登录,实现登录请求。
以上就是环境搭建的全过程
搭建完环境以后,会发现此刻点登陆按钮,会在页面弹出用户的信息。基本的功能已经实现,假设现在已经做好了数据库查询的功能,则需要对controller类做进一步的改进,来实现真正的登陆操作
此时,需要对controller类中的response返回对象做一些要求,最好是带有一定的规则约束,比如{code:xx,msg:xx,date:xx}这种类型。
创建Result<>类,泛型类
public class Result<T> {
private Integer code;
private String Msg;
private T date;
@Override
public String toString() {
return "Result{" +
"code=" + code +
", Msg='" + Msg + '\'' +
", date=" + date +
'}';
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return Msg;
}
public void setMsg(String msg) {
Msg = msg;
}
public T getDate() {
return date;
}
public void setDate(T date) {
this.date = date;
}
}
上述结果类的定义比较简单,可以在后面逐渐完善
建立Service类,来提供登陆验证的方法
因为之前没有建立与数据库的连接,因此,这里先模拟数据库的连接。
@Service
public class UserService { //1.登录 public Result<Boolean> login(Person person){ Result<Boolean> re=new Result<Boolean>(); Person persondb=personByMobile(person.getMobile()); if(persondb==null){
re.setCode(0);
re.setMsg("查无此人");
re.setDate(false);
}else if(!persondb.getPassword().equals(person.getPassword())){
re.setCode(01);
re.setMsg("密码错误");
re.setDate(false);
}else{
re.setCode(1);
re.setMsg("登录成功");
re.setDate(true);
} return re;
} //2.根据用户手机查询用户
public Person personByMobile(String mobile){ Person person=new Person();
person.setMobile("123");
person.setPassword("123"); if(mobile.equals(person.getMobile())){
return person;
}else
{
return null;
}
} }
以上代码,仍然是一个比较简单,只用来实现功能的代码,后期需要不断修改。
修改LoginController类如下:
@Controller
@RequestMapping("/login")
public class LoginController { @Autowired
UserService userService; @RequestMapping("/to_login")
public String tologin(){
return "login";
} @RequestMapping("/do_login")
@ResponseBody
public Result<Boolean> dologin(HttpServletResponse response, Person person){ System.out.println(person); Result<Boolean> result = userService.login(person); return result;
}
}
此时返回的数据data就是Result<Boolean>类型的数据格式。启动项目,在浏览器中按F12对response回来的数据进行查看,但此时页面已经刷新,无法看到,可以通过修改ajax的success处代码,将code,msg。data都打印出来观看。

以上,登录的验证功能用提升了一下。
java初探(1)之登录初解的更多相关文章
- [java初探总结篇]__java初探总结
前言 终于,java初探系列的学习,要告一阶段了,java初探系列在我的计划中是从头学java中的第一个阶段,知识主要涉及java的基础知识,所以在笔记上实在花了不少的功夫.虽然是在第一阶段上面花费了 ...
- [java初探10]__关于数字处理类
前言 在我们的日常开发过程中,我们会经常性的使用到数字类型的数据,同时,也会有众多的对数字处理的需求,针对这个方面的问题,在JAVA语言中.提供解决方法的类就是数字处理类 java中的数字处理类包括: ...
- Java 实现 ssh命令 登录主机执行shell命令
Java 实现 ssh命令 登录主机执行shell命令 1.SSH命令 SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SS ...
- java初探(1)之登录总结
登录总结 前几章总结了登录各个步骤中遇到的问题,现在完成的做一个登录的案例,其难点不在于实现功能,而在于抽象各种功能模块,提高复用性,较低耦合度. 前端页面: 对于前端页面来说,不是后端程序员要考虑的 ...
- java初探(1)之登录再探
https://www.cnblogs.com/lovejune/p/java_login_1.html 上一章内容搭建起了登录应用场景的环境,模拟实现了登录操作,页面与后端数据的交互过程,使用的是异 ...
- java初探(1)之登录补充
在登录之后,可能服务器是分布式的,因此不能通过一个本地的session来管理登录信息,导致登录的信息不能传递,即在这台服务器上可以得到用户登录信息,但在那台就得不到.因此,需要设置分布式的sessio ...
- java初探(1)之登录终探
上一章讲了表单验证,数据验证和加密.这一章,将研究服务器和数据库的交互过程. 后端服务器有两种主流的形式,SQL数据库和NOSQL数据库.其中MYSQL属于SQL数据库,REDIS属于非SQL数据库. ...
- Java简单示例-用户登录、单个页面的增删改查及简单分页
index.html -登录->stulist.jsp (index.html传递到LoginServlet,进行登录检测及写入session,NO返回index.html界面,OK 跳转到s ...
- jasig CAS 实现单点登录 - java、php客户端登录实现
jasig CAS项目本身就是一个完整的CAS单点登录服务 1.服务端需要把 认证处理类.用户属性返回值处理类 调整成我们自己处理类即可实现单点登录 2.java客户端需要引入cas-client- ...
随机推荐
- springboot配置字符编码
这边主要有两种方式 方式一.使用传统的Spring提供的字符编码过滤器(Filter的方式) 因为,字符编码过滤器在框架中已经有了,所以我们不需要自己写了.直接进行配置类的实现: @Configura ...
- 图计算实现ID_Mapping、Oneid打通数据孤岛
图计算实现ID_Mapping.Oneid打通数据孤岛 ID_Mapping与Oneid的作用 大神告诉我们Oneid能用来做什么 输入数据源格式样例 实现原理 当日代码生成 引用jar包 启动命令 ...
- Java 字符流
字符编码表:其实就是生活中字符和计算机二进制的对应关系表. 1.ascii: 一个字节中的7位就可以表示.对应的字节都是正数.0-xxxxxxx 2.iso-8859-1:拉丁码表 latin,用了一 ...
- 2020-06-16:Redis hgetall时间复杂度?
福哥答案2020-06-16: 时间复杂度是O(N).时间复杂度:O(N) where N is the size of the hash.
- C#LeetCode刷题之#459-重复的子字符串(Repeated Substring Pattern)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3945 访问. 给定一个非空的字符串,判断它是否可以由它的一个子串 ...
- 使用Prometheus监控Golang服务-基于YoyoGo框架
Prometheus Prometheus是一个非常棒的工具,结合grafana能够让我在不写代码,或者少写代码的情况下搭建一套有效的监控体系.这里介绍一下Prometheus监控golang程序的方 ...
- 检查型异常和非检查型异常——Java
文章目录 检查型异常和非检查型异常--Java 检查型异常 非检查型异常 结语 检查型异常和非检查型异常--Java Java语言规范将派生于Error类或RuntimeExceprion类的所有异常 ...
- 精灵小巧的 Jsonpath 万精油:Snack3
前几天和一个群里的朋友交流一个需求:在 Json 里像 XPath 一样找出节点,并修改值,然后输出新的Json. 很多人马上就会说,Jsonpath 啊. 是的 Jsonpath 确实能快速找出节点 ...
- BiLSTM:序列标注任务的标杆
Bidirectional LSTM-CRF Models for Sequence Tagging. Zhiheng Huang. 2015 在2015年,本文第一个提出使用BiLSTM-CRF来做 ...
- 5年Java程序员,五面蚂蚁险拿offer定级P7,大厂面试不过如此?
当时面试能记下的就这些了,可能不太全请见谅: 一面 1.HashMap和ConcurrentHashMap: 2.再谈谈一致hash算法? 3.乐观锁还有悲观锁: 4.可重入锁和Synchronize ...
