做一个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交互实现登录功能的更多相关文章

  1. 前后端通信中使用Ajax与后台接口api交互(以登录功能为例)

    一.查阅开发文档 首先,要做这个功能前,我们必须先查阅后台接口文档,了解使用登录接口时,需要提交哪些参数,并且接口使用返回的数据. 这里我使用了一个返回json格式数据的登录接口为例,讲解怎么使用Aj ...

  2. jsp使用servlet实现用户登录 及动态验证码

    在进行表单设计中,验证码的增加恰恰可以实现是否为“人为”操作,增加验证码可以防止网站数据库信息的冗杂等... 现在,我将讲述通过servlet实现验证码: 验证码作为一个图片,在页面中为“画”出来的, ...

  3. JSP(forward动作)登录功能

    <%@ page language= "java" contentType="text/html;charset=UTF-8" %><html ...

  4. jquery 实现按回车键登录功能的写法

    <script> //登录的逻辑函数 自己写 function submitFuc(){ var loginName= $("#loginName").val(); v ...

  5. [JavaWeb基础] 002.JSP和SERVLET初级入门

    上一篇中,我介绍了javaweb项目的创建和Tomcat的搭建和部署,接下来我们要在上一篇的基础上去讲解一下简单的jsp和servlet交互,做出一个简单的登陆功能页面.该例子主要讲解了从页面请求道后 ...

  6. Bootstrap+JSP实例学习笔记一.简单的带登录功能的首页

    前言 Bootstrap 是流行的 HTML.CSS 和 JS 框架,用于开发响应式布局.移动设备优先的 WEB 项目.源自于twiteer内部的开发框架. 当前(2019-05)最新版本是v3.3. ...

  7. JSP实现登录功能(页面带样式)

    功能要求 1.完成两个页面 2.第一个登陆页面login. jsp 3.第二个用户管理页面useManage. jsp 4.有登录功能(能进行用户名密码的校验,用户名若为自己的学号密码为班级号,允许登 ...

  8. 一、JSP、servlet、SQL三者之间的数据传递(前台与后台数据交互)

    背景: 目前业界很流行的MVC(model-view-control)开发模式,理解为 模型是Bean, 视图是 Html/Jsp, 控制是Servlet, 关联数据库的Dao web的运行机制: 数 ...

  9. jQuery实现回车触发登录按钮的功能

    jQuery实现回车触发登录按钮的功能,代码如下: $('body').keyup(function(e){ if(e.keyCode===13){ $('.login').click() } }) ...

随机推荐

  1. linux shell 变量子串

    linx变量子串 在本例子中,变量 test=https://www.//cnblogs./com//jjmaokk/p/10135401.html 1,${#parameter} 返回变量$para ...

  2. HDU5813 Elegant Construction

    Elegant Construction                                                                         Time Li ...

  3. git忽视修改的文件

    对于tracked文件来说,使用.gitignore是不行的.但是git提供了新的方法. 使用命令 git update-index --assume-unchanged <files>, ...

  4. PSR-PHP开发规范(本文版权归作者:luluyrt@163.com)

    遵循PSR-4的自动加载 一.简介 首先这里要了解PSR,Proposing a Standards Recommendation(提出标准建议)的缩写,就是一种PHP开发规范,让我们研发出来的代码更 ...

  5. 【红色警报】XXE 高危漏洞将大面积影响微信支付安全,可能导致系统沦陷,请升级你的系统!

    今天,微信支付发布了一则紧急通知: 尊敬的微信支付商户: 您的系统在接受微信支付XML格式的商户回调通知(支付成功通知.退款成功通知.委托代扣签约/解约/扣款通知.车主解约通知)时,如未正确地进行安全 ...

  6. 友链 & 日记

    友链 & 日记 关于 \(Owen\) 温州中学初三 \(OIer\),目前 \(OI\) 水平一般,文化课成绩浮在中游.喜欢二次元,喜欢听音乐,标准宅一枚.虽然入宅时间很短 欢迎大家跟 \( ...

  7. 53_并发编程-线程-GIL锁

    一.GIL - 全局解释器锁   有了GIL的存在,同一时刻同一进程中只有一个线程被执行:由于线程不能使用cpu多核,可以开多个进程实现线程的并发,因为每个进程都会含有一个线程,每个进程都有自己的GI ...

  8. Javascript高级编程学习笔记(70)—— 事件(14)内存和性能

    由于事件处理程序是现代的web程序交互能力的提供者 所以在日常实践中,我们免不了要向页面中添加大量的事件处理程序(不管是用于用户交互还是用于统计用户数据) 在创建GUI(图形用户界面)的语言(如C#) ...

  9. JavaScript变量与数据类型详解

    变量 变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念.变量可以通过变量名访问. 变量的作用就是用于存储值. 语法: 声明变量时,总是以关键字var打头.任何情况下都应该这样做.然后给变 ...

  10. 第77节:Java中的事务和数据库连接池和DBUtiles

    第77节:Java中的事务和数据库连接池和DBUtiles 前言 看哭你,字数:8803,承蒙关照,谢谢朋友点赞! 事务 Transaction事务,什么是事务,事务是包含一组操作,这组操作里面包含许 ...