jsp、jQuery、servlet交互实现登录功能
做一个web项目,往往需要有一个登录模块,验证用户名和密码之后跳转页面。为了实现更好的交互,往往需要用到 jQuery 等实现一些友好提示。比如用户名或者密码输入为空的时候提示不能为空;点击提交的时候如果用户名和密码不正确,还需要通过 ajax 异步请求实现友好提示。话不多说,先上代码(以部分为例)。
jsp:
<form action="LoginServlet" method="post" role="form" >
<div class="form-group user">
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-user"></i>
</div>
<input class="form-control" id="username-input" type="text" placeholder=" 请输入帐号" name="username">
</div>
<div id="username-error" class="error"></div>
</div>
<div class="form-group password">
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-lock"></i>
</div>
<input class="form-control" id="password-input" type="password" placeholder=" 请输入密码" name="password">
</div>
<div class="error" id="user-error"></div>
</div>
<div class="submit">
<input type="button" id="submit" name="submit" value="确认">
</div>
</form>
这样就完成了一个简单的登录界面了。(里面的 “.form-group”、".fa"、“.input-group” 等都是 bootstrap 提供的,bootstrap 是挺受欢迎的 HTML、CSS 和 JS 框架,用于开发响应式布局、移动设备优先的 WEB 项目。内容有点多,具体可以查看 bootstrap 文档。)
由于 css 比较多,就不贴上来了,按照自己喜欢的风格完成就行了。
JQuary:
var username_error = $("#username-error");
var user_error = $("#user-error");
var username_input = $("#username-input");
var password_input = $("#password-input");
var user_error = $("#user-error");
var submit = $("#submit");
username_error.hide(); // 把提示框隐藏起来
user_error.hide();
// 密码检验
function password_validate(){
var password = password_input.val();
if(password == ""){
user_error.html("密码不能为空");
user_error.show();
}
else if(password_input.val().length>15){
user_error.html("密码长度不能超过15");
user_error.show();
}
else user_error.hide();
}
// 用户名检验
function username_validate(){
var username = username_input.val();
var user = {"username": username};
if (username.trim() == "") {
username_error.html("用户名不能为空");
username_error.show();
username_input.val("").focus();
}
else username_error.hide();
}
// 提交时检验
function submit_validate(){
var username = username_input.val();
var password = password_input.val();
var user = {"username": username, "password": password};
if(username=="" || password==""){
user_error.html("用户名或密码不能为空");
user_error.show();
}
else{
$.ajax(
{
url: "/serverMonitor/webPage/LoginServlet", // 发送请求的地址
data: user, // 发送到服务器的数据
beforeSend: function(){ // 在发送请求的之前将按钮的内容设置为 “登录中...”,有一个更好的体验
submit.val("登录中...");
},
async: true, // 异步方式
type: "post", // 请求方式
dataType: "json", // 服务器返回的数据类型,有 xml、html、text、json、jsonp、script 这几种类型,具体看情况使用
success: function(msg){ // 回调函数,请求成功后调用
if(msg == false){
user_error.html("帐号或密码错误");
user_error.show();
submit.val("确认");
}
if(msg == true){
window.location.href = "./main.jsp"; // 验证成功后跳转页面
}
}
}
)
}
}
username_input.blur(username_validate); // 鼠标焦点从用户名移开触发的事件
password_input.blur(password_validate); // 鼠标移开密码输入框时触发的事件
submit.click(submit_validate); // 单击提交按钮触发的事件
这段 js 代码写得实在不规范...没怎么写 js,好好学一下怎么规范代码还是挺重要的。
由于我是先在页面把显示错误信息的 div 实现了,所以在 jQuery 里面先把他们隐藏起来,碰到错误的时候再把错误信息写入 div 中并显示出来。另外关于 Ajax 的参数我也注释在上面了,详情可以上网查找它的作用及用法。
servlet:
@WebServlet("/webPage/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public LoginServlet() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取登录页面输入的用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
// 调用 service 完成登录操作
UserService userservice = new UserService();
User user;
try {
user = userservice.loginByUser(username,password);
// 登录成功,将用户存储到 session 中
request.getSession().setAttribute("user", user);
response.getWriter().print(true);
return;
} catch (LoginException e) {
// 如果出现问题,将错误信息存储到request,并在登录界面显示错误信息
e.printStackTrace();
request.setAttribute("message", e.getMessage());
response.getWriter().print(false);
}
}
}
主要实现的就是以上的代码,至于 dao 层、service 层以及 bean 还有一个自定义异常我就不详写了。之前本来是打算用重定向实现登录成功后页面跳转,不成功的话将错误信息传到前端显示的。但是犯了一个错,在 ajax 的 dataType 写成 “html”,以至于将要跳转的页面写进了div里。后来改成返回 json。至于不能进行重定向, Ajax 是为了局部刷新网页,它终究属于前端,它只会获取请求返回的数据,其他的任何动作一概不去做,所以最好还是返回值给 Ajax 判断,通过 response.getWriter().print(); 返回值。
最后展示一下运行结果:



jsp、jQuery、servlet交互实现登录功能的更多相关文章
- 前后端通信中使用Ajax与后台接口api交互(以登录功能为例)
一.查阅开发文档 首先,要做这个功能前,我们必须先查阅后台接口文档,了解使用登录接口时,需要提交哪些参数,并且接口使用返回的数据. 这里我使用了一个返回json格式数据的登录接口为例,讲解怎么使用Aj ...
- jsp使用servlet实现用户登录 及动态验证码
在进行表单设计中,验证码的增加恰恰可以实现是否为“人为”操作,增加验证码可以防止网站数据库信息的冗杂等... 现在,我将讲述通过servlet实现验证码: 验证码作为一个图片,在页面中为“画”出来的, ...
- JSP(forward动作)登录功能
<%@ page language= "java" contentType="text/html;charset=UTF-8" %><html ...
- jquery 实现按回车键登录功能的写法
<script> //登录的逻辑函数 自己写 function submitFuc(){ var loginName= $("#loginName").val(); v ...
- [JavaWeb基础] 002.JSP和SERVLET初级入门
上一篇中,我介绍了javaweb项目的创建和Tomcat的搭建和部署,接下来我们要在上一篇的基础上去讲解一下简单的jsp和servlet交互,做出一个简单的登陆功能页面.该例子主要讲解了从页面请求道后 ...
- Bootstrap+JSP实例学习笔记一.简单的带登录功能的首页
前言 Bootstrap 是流行的 HTML.CSS 和 JS 框架,用于开发响应式布局.移动设备优先的 WEB 项目.源自于twiteer内部的开发框架. 当前(2019-05)最新版本是v3.3. ...
- JSP实现登录功能(页面带样式)
功能要求 1.完成两个页面 2.第一个登陆页面login. jsp 3.第二个用户管理页面useManage. jsp 4.有登录功能(能进行用户名密码的校验,用户名若为自己的学号密码为班级号,允许登 ...
- 一、JSP、servlet、SQL三者之间的数据传递(前台与后台数据交互)
背景: 目前业界很流行的MVC(model-view-control)开发模式,理解为 模型是Bean, 视图是 Html/Jsp, 控制是Servlet, 关联数据库的Dao web的运行机制: 数 ...
- jQuery实现回车触发登录按钮的功能
jQuery实现回车触发登录按钮的功能,代码如下: $('body').keyup(function(e){ if(e.keyCode===13){ $('.login').click() } }) ...
随机推荐
- Codeforces Round #532 (Div. 2) F 线性基(新坑) + 贪心 + 离线处理
https://codeforces.com/contest/1100/problem/F 题意 一个有n个数组c[],q次询问,每次询问一个区间的子集最大异或和 题解 单问区间子集最大异或和,线性基 ...
- 前端(主要html/css)学习笔记
一个浪漫的网站: http://www.romancortes.com/blog/1k-rose/
- Ubuntu修改系统时间
在新版的ubuntu中,使用timedatectl 替换了ntpdate来进行时间管理. 1.查看当前时间状态 查看当前时间状态 timedatectl status : res@ubuntu:~$ ...
- Unity使用代码动态给按钮赋值各个状态下的图片
一个小知识点,怕忘记,所以记录下.废话不多说,直接上代码: 未赋值之前: 使用下面代码赋值: using UnityEngine; using UnityEngine.UI; public class ...
- [swarthmore cs75] Compiler 3 – Cobra
课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业.本随笔记录了相关的课堂笔记以及第5次大作业. 增加了bool数据表示和比较运算符的支持,具体语法参考下图: 第一种int和bo ...
- kali入门
第一章:入门kalilinux By:鬼尘 第一章基本上就是涵盖以下的主题: ·kali的发展简史 ·kali的一般用途 ·kali的下载与安装 ·kali的配置与更新 在本章结尾部分,我们还会介绍k ...
- Spring Boot中使用Spring Security进行安全控制转载来自翟永超
我们在编写Web应用时,经常需要对页面做一些安全控制,比如:对于没有访问权限的用户需要转到登录表单页面.要实现访问控制的方法多种多样,可以通过Aop.拦截器实现,也可以通过框架实现(比如:Apache ...
- 项目小程序笔记-登录界面+FPGA管脚分配文件生成
声明:只是为了记录我遇到的一些问题,其中有我理解错的望勿参考. (1)qt designer设计好窗口 主窗口: 登录窗口: 关于qt designer的使用,大可以百度,很简单的,要注意的是部件的参 ...
- jQuery-弹幕
该方法可能有bug,毕竟简单粗暴 <!DOCTYPE html><html> <head> <meta charset="UTF-8"&g ...
- 《高质量C++&C 编程指南》学习笔记
这本电子书是在国科大上课时候,老师在课件资源里边提供的.之所以会重视这个文件,是因为本科时候,有个老师提到过:那个学生遍的代码很整齐,看起来让人舒服,我就知道工大留不下他.因此,我就格外注意这件事,但 ...