登錄功能之添加驗證碼(包含切換驗證碼)


主要功能,在登錄頁面上添加驗證碼,然后如果用戶看不清,可以點擊“換一張”,切換驗證碼,如果驗證碼輸入錯誤,會提示驗證碼輸入錯誤並無法登錄

首先是LoginServlet

package cn.itcast.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class LoginServlet
 */
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /**
         * 校驗驗證碼
         * 1.從session中獲取正確的驗證碼
         * 2.從表單中用戶填寫的驗證碼
         * 3.進行比較
         * 4.如果相同,向下運行,否則保存錯誤信息到request域,轉發到login.jsp
         */
        String sessionCode =(String) request.getSession().getAttribute("session_vcode");
        String paramCode = request.getParameter("verifyCode");
        
        if(!paramCode.equalsIgnoreCase(sessionCode)){
            request.setAttribute("msg", "驗證碼錯誤");
            request.getRequestDispatcher("/day11_4/login.jsp").forward(request,response);
            return;
        }
        
        /**
         * 1.獲取表單數據
         */
        //處理中文問題
        request.setCharacterEncoding("utf-8");
        //獲取
        String username=request.getParameter("username");
        String password = request.getParameter("password");
        //2.校驗用戶名和密碼是否正確
        if(!"itcast".equalsIgnoreCase(username)){//登錄成功
            /**
             * 附加項:把用戶名保存到cookie中,發送給客戶端瀏覽器
             * 當再次打開login.jsp時,login.jsp中會讀取request中的cookie,把它顯示到用戶名文本框中
             */
            
        }    
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

下面是VerifyCodeServlet(驗證碼的關鍵一步)

package cn.itcast.servlet;

import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.itcast.image.VerifyCode;

@WebServlet("/VerifyCodeServlet")
public class VerifyCodeServlet extends HttpServlet {
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    /**
     * 1.生成圖片
     * 2.保存圖片上的本文到session域中
     * 3.把圖片響應給客戶端
     */
    VerifyCode vc = new VerifyCode();
    BufferedImage image = vc.getImage();
    request.getSession().setAttribute("session_vcode", vc.getText());//保存圖片上的文本到session域
    
    VerifyCode.output(image,response.getOutputStream());
    
    }
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        doGet(request,response);
    }

}

再下面是login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>My JSP 'login.jsp' starting page</title>

<meta http-equiv="param" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">

<link rel="stylesheet" type="text/css" href="style.css">
 
 <script type="text/javascript"></script>
 <script>
 function _change(){
     /**
     1.得到img元素
     2.修改其src為/day11_4/VerifyCodeServlet
     */
     var imgEle = document.getElementById("img");
     imgEle.src="/day11_4/VerifyCodeServlet?a="+ new Date().getTime();
 }
 
 </script>
</head>
<body>

<%--本頁面提供登錄表單,還要顯示錯誤信息 --%>
<h1>登錄</h1>
<%
/**
讀取名為uname的Cookie
如果為空顯示:""
如果不為空顯示:Cookie的值
*/
String uname = " ";
Cookie[] cs = request.getCookies();//獲取請求中所有的cookie
if(cs!=null){//如果存在cookie
    for(Cookie c:cs){//循環遍歷所有的cookie
        if("uname".equals(c.getName())){//查找名為uname的cookie
            uname = c.getValue();//獲取這個cookie的值,給uname這個變量
        }
    }
}

%>
<%
    String message=" ";
    String msg = (String)request.getAttribute("msg");//獲取request域中的名為msg的屬性
    if(msg!=null){
        message=msg;
    }
%>
<font color="red"><b><%=message%></b></font>
<form action="/day11_4/LoginServlet" method="post">
用戶名:<input type="text" name="username" value="<%=uname %>" /><br/><%-- --%>
密碼:<input type="password" name="password"/><br/>
驗證碼:<input type="text" name="verifyCode" /><br/>
    <img id="img" src=" /day11_4/VerifyCodeServlet"/>
    <a href="javascript:_change()">換一張</a>
    <br/>
    <input type="submit" value="登錄"/>

</form>

</body>
</html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM