摘要:頁(yè)面向傳遞一個(gè)參數(shù),其值表示調(diào)用那個(gè)方法用戶名密碼驗(yàn)證碼換一張登錄重置代碼得到所有的錯(cuò)誤信息,循環(huán)遍歷之。
jsp頁(yè)面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
"> My JSP "login.jsp" starting page
用戶名 | ||
密碼 | ||
驗(yàn)證碼 | ||
換一張 | ||
???? |
js代碼:
$(function(){
//得到所有的錯(cuò)誤信息,循環(huán)遍歷之。調(diào)用一個(gè)方法來(lái)確定是否顯示錯(cuò)誤信息! $(".errorClass").each(function() { showError($(this));//遍歷每個(gè)元素,使用每個(gè)元素來(lái)調(diào)用showError方法 }); // 輸入框得到焦點(diǎn)隱藏錯(cuò)誤信息 $(".inputClass").focus(function() { var labelId = $(this).attr("id") + "Error";//通過(guò)輸入框找到對(duì)應(yīng)的label的id $("#" + labelId).text("");//把label的內(nèi)容清空! showError($("#" + labelId));//隱藏沒(méi)有信息的label }); //輸入框失去焦點(diǎn)進(jìn)行校驗(yàn) $(".inputClass").blur(function() { var id = $(this).attr("id");//獲取當(dāng)前輸入框的id var funName = "validate" + id.substring(0,1).toUpperCase() + id.substring(1) + "()";//得到對(duì)應(yīng)的校驗(yàn)函數(shù)名 eval(funName);//執(zhí)行函數(shù)調(diào)用,把字符串當(dāng)成js代碼執(zhí)行 }); });
function login(){
var bool = true;//表示校驗(yàn)通過(guò) if(!validateLoginname()) { bool = false; } if(!validateLoginpass()) { bool = false; } if(!validateVerifyCode()){ bool = false; } if(bool) { var loginname=$("#loginname").val(); var loginpass=$("#loginpass").val(); $.ajax({ cache: false, async: false, type: "POST", dataType: "json", data: {method: "loginValidate", login: loginname,password:loginpass}, url: "/onlineexam/LoginStudentServlet", success: function(data) { if(data.success){ if(data.successExam){ window.location.href="/onlineexam/demo.jsp"; }else{ window.location.href="/onlineexam/exam.jsp"; } }else{ $.messager.alert("警告",data.msg); } } }); }
}
// 校驗(yàn)登錄名
function validateLoginname() {
var bool = true; $("#loginnameError").css("display", "none"); var value = $("#loginname").val(); if(!value) {// 非空校驗(yàn) $("#loginnameError").css("display", ""); $("#loginnameError").text("用戶名不能為空!"); bool = false; } else if(value.length < 3 || value.length > 20) {//長(zhǎng)度校驗(yàn) $("#loginnameError").css("display", ""); $("#loginnameError").text("用戶名長(zhǎng)度必須在3 ~ 20之間!"); bool = false; } return bool;
}
function validateLoginpass() {
var bool = true; $("#loginpassError").css("display", "none"); var value = $("#loginpass").val(); if(!value) {// 非空校驗(yàn) $("#loginpassError").css("display", ""); $("#loginpassError").text("密碼不能為空!"); bool = false; } else if(value.length < 3 || value.length > 20) {//長(zhǎng)度校驗(yàn) $("#loginpassError").css("display", ""); $("#loginpassError").text("密碼長(zhǎng)度必須在3 ~ 20之間!"); bool = false; } return bool;
}
// 校驗(yàn)驗(yàn)證碼
function validateVerifyCode() {
var bool = true; $("#verifyCodeError").css("display", "none"); var value = $("#verifyCode").val(); if(!value) {//非空校驗(yàn) $("#verifyCodeError").css("display", ""); $("#verifyCodeError").text("驗(yàn)證碼不能為空!"); bool = false; } else if(value.length != 4) {//長(zhǎng)度不為4就是錯(cuò)誤的 $("#verifyCodeError").css("display", ""); $("#verifyCodeError").text("錯(cuò)誤的驗(yàn)證碼!"); bool = false; } else {//驗(yàn)證碼是否正確 $.ajax({ cache: false, async: false, type: "POST", dataType: "json", data: {method: "ajaxValidateVerifyCode", verifyCode: value}, url: "/onlineexam/LoginStudentServlet", success: function(flag) { if(!flag) { $("#verifyCodeError").css("display", ""); $("#verifyCodeError").text("錯(cuò)誤的驗(yàn)證碼!"); bool = false; } } }); } return bool;
}
// 判斷當(dāng)前元素是否存在內(nèi)容,如果存在顯示,不存在不顯示!
function showError(ele) {
var text = ele.text();//獲取元素的內(nèi)容 if(!text) {//如果沒(méi)有內(nèi)容 ele.css("display", "none");//隱藏元素 } else {//如果有內(nèi)容 ele.css("display", "");//顯示元素 }
}
// 換一張驗(yàn)證碼
function _hyz(){
var img=document.getElementById("imgVcode");
//需要給出一個(gè)參數(shù),這個(gè)參數(shù)每次都不同,這樣才不會(huì)因?yàn)闉g覽器的緩存,使得不能進(jìn)行換一張
img.src="/onlineexam/VerifyCodeServlet?a="+new Date().getTime();
}
后臺(tái)web.servlet層:
service層dao層就不一一寫(xiě)出了。
public class LoginStudentServlet extends BaseServlet {
StudentService studentService = new StudentService(); ExamService examService=new ExamService(); public String ajaxValidateLoginname(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1. 獲取用戶名 String loginname = req.getParameter("loginname"); //2. 通過(guò)service得到校驗(yàn)結(jié)果 boolean b = studentService.ajaxValidateLoginname(loginname); resp.getWriter().print(b); return null; } public String ajaxValidateVerifyCode(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1. 獲取輸入框中的驗(yàn)證碼 String verifyCode = req.getParameter("verifyCode"); // 2. 獲取圖片上真實(shí)的校驗(yàn)碼 String vcode = (String) req.getSession().getAttribute("vCode"); boolean b = verifyCode.equalsIgnoreCase(vcode); resp.getWriter().print(b); return null; } // 登錄功能 public void loginValidate(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException, SQLException { String name = req.getParameter("login"); String password = req.getParameter("password"); Student student = studentService.login(name, password); Score score=examService.findStudent(name); Json json = new Json(); if (student == null) { json.setSuccess(false); json.setMsg("用戶名或密碼錯(cuò)誤"); resp.getWriter().print(json.toString()); resp.getWriter().close(); //return "r:/loginStudent.jsp"; } else { if(score!=null){ json.setSuccessExam(true); } HttpSession session = req.getSession(); session.setAttribute("sessionStudent",student); session.setAttribute("sessionScore",score); //String string=(String) session.getAttribute("sessionName"); //System.out.println(string); json.setSuccess(true); json.setMsg("登錄成功"); json.setStudent(student); resp.getWriter().print(json); resp.getWriter().close(); //return "r:/exam.jsp";//重定向到主頁(yè) } }
}
注意:這里我自己編寫(xiě)了一個(gè)BaseServlet繼承了HttpServlet然后通過(guò)獲得method參數(shù),然后通過(guò)反射調(diào)用對(duì)應(yīng)的方法。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/65651.html
摘要:頁(yè)面向傳遞一個(gè)參數(shù),其值表示調(diào)用那個(gè)方法用戶名密碼驗(yàn)證碼換一張登錄重置代碼得到所有的錯(cuò)誤信息,循環(huán)遍歷之。 jsp頁(yè)面: My JSP login.jsp starting page body{ background-image:url(image/bg.jpg); background-repeat: repeat-x;...
摘要:本項(xiàng)目發(fā)布在實(shí)驗(yàn)樓,分為四部分內(nèi)容前端頁(yè)面制作,驗(yàn)證碼制作,實(shí)現(xiàn)注冊(cè)登陸,功能完善。全部章節(jié)及代碼詳解可以在實(shí)驗(yàn)樓中在線完成實(shí)現(xiàn)用戶注冊(cè)登錄功能驗(yàn)證碼制作一實(shí)驗(yàn)簡(jiǎn)介本次實(shí)驗(yàn)將會(huì)帶領(lǐng)大家使用面向?qū)ο蟮乃枷敕庋b一個(gè)驗(yàn)證碼類。 項(xiàng)目簡(jiǎn)介:本課程通過(guò)使用 PHP 及 Web 前端技術(shù)實(shí)現(xiàn)一個(gè)網(wǎng)站注冊(cè)登錄入口頁(yè)面,學(xué)習(xí)并實(shí)踐 PHP 編程,GD庫(kù),MySQL 擴(kuò)展,Bootstrap 響應(yīng)式布局...
摘要:框架開(kāi)發(fā)解放了生產(chǎn)力,讓一個(gè)靜態(tài)頁(yè)面效果更逼真,也讓用戶體驗(yàn)逐漸上去,但是目前對(duì)網(wǎng)站的需求主要還是為了展示和宣傳一些東西,反觀教育機(jī)構(gòu)和政府部門(mén)的網(wǎng)站都是偏動(dòng)畫(huà)少,體現(xiàn)了公關(guān)的嚴(yán)肅性。 showImg(https://segmentfault.com/img/remote/1460000009262879?w=1183&h=522); 前言 最近很久沒(méi)有寫(xiě)文章,不忙也忙的生活節(jié)奏,博客...
閱讀 867·2021-11-25 09:44
閱讀 1086·2021-11-19 09:40
閱讀 7112·2021-09-07 10:23
閱讀 1987·2019-08-28 17:51
閱讀 1117·2019-08-26 10:59
閱讀 1939·2019-08-26 10:25
閱讀 3149·2019-08-23 18:22
閱讀 872·2019-08-23 16:58