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() } }) ...
随机推荐
- Centos7 登录mysql 出现mysql.sock不存在
记一次纠错大战 本来今天开开心心地部署nginx和uwsgi到我的Django服务器,刚想给老师演示一遍我这项目如何酷炫时,一登陆就出现mysql连接不上了 (2003, "Can't co ...
- 探索微信小程序之路
记录一下每日的知识点,时不时温习一下. 视图与渲染对于页面中的数据,以json的方式存放在js文件的data中 判断的使用: <view wx:if='{{true}}'> 为真时显示 & ...
- ubuntu安装spyder和jupyter notebook
ubuntu安装spyder和jupyter notebook 安装spyder 安装spyder sudo apt install spyder sudo apt install spyder3 安 ...
- Note on Preliminary Introduction to Distributed System
今天读了几篇分布式相关的内容,记录一下.非经典论文,非系统化阅读,非严谨思考和总结.主要的着眼点在于分布式存储:好处是,跨越单台物理机器的计算和存储能力的限制,防止单点故障(single point ...
- Note of Python Math
Note of Python Math math 库是Python 提供的内置数学类函数库,而其中复数类型常用于科学计算,一般计算并不常用,因此math 库不支持复数类型.math 库一共提供4个数学 ...
- 洛谷P1776--宝物筛选(单调队列+多重背包)
https://www.luogu.org/problemnew/show/P1776 单调队列+多重背包的讲解https://www.cnblogs.com/JoeFan/p/4165956.htm ...
- dubbo环境搭建
主要是通过使用tomcat和使用main方法进行发布服务 参考文章: http://blog.csdn.net/aixiaoyang168/article/details/51362675 http: ...
- MFC编程汇总
1.visual2017专业版MFC编程环境搭建及第一个MFC程序的创建 2.通过MFC设计一个简单的计价程序 3.控件——静态空间.编辑框控件.命令按钮.复选框和单选控件 4.控件添加——静态控件. ...
- CCNA学前基础一
网络设备: 集线器:集线器就是一种采用共享式工作状态的设备.Hub将信号放大后传输给其他端口,即传输线路是共享的. 交换机:用于连接终端设备,和基本的安全功能还有广播域的隔离.优点实现多用户同时访问, ...
- keepalived给LVS带来了什么
LVS+Keepalived 1>Keepalived简介 Keepalived是Linux下一个轻量级别的高可用解决方案,高可用(High Avalilability,HA),其实两种不同的 ...