JavaWeb用戶登陸功能的實現

    大四快畢業了,3年多的時間中,亂七八糟得學了一大堆,想趁找工做以前把所學的東西整理一遍,因此就嘗試着作一個完整的JavaWeb系統,這幾天試着作了一個用戶登陸的功能,分享給你們,確定有不少不完善的地方,但願你們提提寶貴的意見,必將努力完善它。css

    我貼出此篇博客的目的是,將一些之後有可能用到的重複性的代碼保存下來,用於之後須要時直接複製粘貼,因此,此篇博客大部分都是代碼,講解性的語句並很少,若是你們看得頭疼,不如不看,之後萬一用到的話再拿過來修修改改便可。html

    有可能用獲得的部分:生成驗證碼的Java類、操做數據庫的Java類java

用戶登陸模塊採用了多種語言:jquery

Html、css、query:頁面web

Servlet、java:後臺sql

運行效果圖:數據庫

wpsB3BB.tmp

Login.html代碼:

<!DOCTYPE html>瀏覽器

<html>session

<head lang="en">app

    <meta charset="UTF-8">

    <title>登陸界面</title>

    <script src="js/jquery-1.11.1.js"></script>

    <script src="js/login.js"></script>

    <link href="css/style.css" rel="stylesheet" type="text/css" />

</head>

<body>

    <div id="loginpanelwrap">

        <div class="loginheader">

            <div class="logintitle">登陸</div>

        </div>

        <form action = "/UserLogin/Sample1/loginServlet">

            <div class="loginform">

                <div class="loginform_row">

                    <label>用戶名:</label>

                    <input type="text" class="loginform_input" name="username" />

                </div>

                <div class="loginform_row">

                    <label>密碼:</label>

                    <input type="password" class="loginform_input" name="password" />

                </div>

                <div class = "loginform_row">

                    <label>驗證碼:</label>

                    <input type = "text" class="loginform_input_validationCode" name = "validationCode"/>

                    <img class = "validationCode_img" src="/UserLogin/Sample1/validationCode">

                </div>

                <div class="loginform_row">

                    <span class = "returnInfo"></span>

                    <input type="submit" class="loginform_submit" value="登陸" />

                </div>

                <div class="clear"></div>

            </div>

        </form>

    </div>

</body>

</html>

JQuery代碼:login.js

 

$(function(){

   $(".loginform_submit").click(function(){

       if(checkInput()) {

           $("form").action("/loginServlet");

       }else{

           return false;

       }

   });

   $(".validationCode_img").click(function(){

       $(".validationCode_img").attr("src","/UserLogin/Sample1/validationCode?"+Math.random());

   });

    function checkInput(){

        //判斷用戶名

        if($("input[name=username]").val() == null || $("input[name=username]").val() == ""){

            alert("用戶名不能爲空");

            $("input[name=username]").focus();

            return false;

        }

        //判斷密碼

        if($("input[name=password]").val() == null || $("input[name=password]").val() == ""){

            alert("密碼不能爲空");

            $("input[name=password]").focus();

            return false;

        }

        //判斷驗證碼

        if($("input[name=validationCode]").val() == null || $("input[name=validationCode]").val() == ""){

            alert("驗證碼不能爲空");

            $("input[name=validationCode]").focus();

            return false;

        }

        return true;

    }

});

生成驗證碼的Servlet:ValidationCode.java

package zh.userlogin.sample;

import javax.imageio.ImageIO;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import java.awt.*;

import java.awt.image.BufferedImage;

import java.io.IOException;

import java.io.OutputStream;

import java.util.Random;

/**

* Created by zhang on 2014/9/13.

*/

public class ValidationCode extends HttpServlet{

    @Override

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //得到驗證碼集合的長度

        int charsLength = codeChars.length();

        //下面3條記錄是關閉客戶端瀏覽器的緩衝區

        //這3條語句均可以關閉瀏覽器的緩衝區,可是因爲瀏覽器的版本不一樣,對這3條語句的支持也不一樣

        //所以,爲了保險起見,同時使用這3條語句來關閉瀏覽器的緩衝區

        resp.setHeader("ragma", "No-cache");

        resp.setHeader("Cache-Control", "no-cache");

        resp.setDateHeader("Expires", 0);

        //設置圖形驗證碼的長和寬

        int width = 90, height = 30;

        BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

        Graphics g = image.getGraphics(); //得到用於輸出文字的Graphics對象

        Random random = new Random();

        g.setColor(getRandomColor(180, 250));

        g.fillRect(0, 0, width, height);

        g.setFont(new Font("Times New Roman",Font.ITALIC,height));

        g.setColor(getRandomColor(120, 180));

        //用戶保存最後隨機生成的驗證碼

        StringBuilder validationCode = new StringBuilder();

        //驗證碼的隨機字體

        String[] fontNames = {"Times New Roman","Book antiqua","Arial"};

        //隨機生成4個驗證碼

        for(int i = 0; i < 4; i++){

            //隨機設置當前驗證碼的字符的字體

            g.setFont(new Font(fontNames[random.nextInt(3)],Font.ITALIC,height));

            //隨機得到當前驗證碼的字符

            char codeChar = codeChars.charAt(random.nextInt(charsLength));

            validationCode.append(codeChar);

            //隨機設置當前驗證碼字符的顏色

            g.setColor(getRandomColor(10, 100));

            //在圖形上輸出驗證碼字符,x和y都是隨機生成的

            g.drawString(String.valueOf(codeChar), 16*i + random.nextInt(7), height-random.nextInt(6));

        }

        //得到HttpSession對象

        HttpSession session = req.getSession();

        //設置session對象5分鐘失效

        session.setMaxInactiveInterval(5*60);

        //將驗證碼保存在session對象中,key爲validation_code

        session.setAttribute("validation_code", validationCode.toString());

        //關閉Graphics對象

        g.dispose();

        OutputStream outS = resp.getOutputStream();

        ImageIO.write(image, "JPEG", outS);

    }

    @Override

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        doGet(req,resp);

    }

    //圖形驗證碼的字符集,系統將隨機從這個字符串中選擇一些字符做爲驗證碼

    private static String codeChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

    //返回一個隨機顏色

    private static Color getRandomColor(int minColor, int maxColor){

        Random random = new Random();

        if(minColor > 255){

            minColor = 255;

        }

        if(maxColor > 255){

            maxColor = 255;

        }

        //得到r的隨機顏色值

        int red = minColor + random.nextInt(maxColor-minColor);

        //g

        int green = minColor + random.nextInt(maxColor-minColor);

        //b

        int blue = minColor + random.nextInt(maxColor-minColor);

        return new Color(red,green,blue);

    }

}

操做數據庫的代碼:ManageSQLServer2008.java(本人使用的數據庫爲SQLServer 2008)

package zh.userlogin.sample.dbmanager;

import java.beans.Statement;

import java.sql.*;

public class ManageSQLServer2008 {

    //數據庫的驅動名

    private final String dbDriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";

    //數據庫的url地址

    private final String url = "jdbc:sqlserver://localhost:1433;databaseName=zhDemo";

    private final String userName = "sa";

    private final String password = "123";

    private Connection conn = null;

    public ManageSQLServer2008(){

        //加載數據庫驅動

        try {

            Class.forName(dbDriver).newInstance();

            //System.out.println("加載驅動成功");

        } catch (Exception e) {

            e.printStackTrace();

            System.err.println("數據庫驅動加載失敗");

        }

        //獲取數據庫連接

        try {

            conn = DriverManager.getConnection(url,userName,password);

        } catch (SQLException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

            System.err.println("獲取數據庫連接失敗");

        }

    }

    //執行各類SQL語句的方法

    private ResultSet execSQL(String sql,Object... args) throws SQLException{

        //創建PreparedStatement對象

        PreparedStatement pStmt = conn.prepareStatement(sql);

        //爲pStmt對象設置SQL參數值

        for(int i = 0; i < args.length; i++){

            pStmt.setObject(i+1, args[i]);

        }

        //執行SQL語句

        pStmt.execute();

        //返回結果集,若是執行的SQL語句不返回結果集,則返回null

        return pStmt.getResultSet();

    }

    private void closeSQLConn(){

        //關閉數據庫連接

        if(conn != null){

            try {

                conn.close();

            } catch (SQLException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

    }

    public String checkUser(String username,String password){

        boolean has_username = false;

        boolean password_correct = false;

        ResultSet rs = null;

        try {

            rs = execSQL("select * from zh_users");

        } catch (SQLException e) {

            System.err.println("查詢數據庫出錯");

            e.printStackTrace();

            return null;

        }

        try {

            while(rs.next()){

                String temp_username = rs.getString("user_name").trim();

                String temp_password = rs.getString("password_md5").trim();

                if(username.equals(temp_username)){

                    has_username = true;

                    if(password.equals(temp_password)){

                        password_correct = true;

                        return "hasUserNameAndPasswordCorrect";

                    }

                    return "hasUserNameButPasswordInCorrect";

                }

            }

        } catch (SQLException e) {

            System.err.println("操做ResultSet出錯");

            e.printStackTrace();

        }

        return "hasNoUserName";

    }

}

用於處理用戶登陸的Servlet:LoginServlet.java

package zh.userlogin.sample;

import zh.userlogin.sample.dbmanager.ManageSQLServer2008;

import javax.servlet.RequestDispatcher;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import java.io.IOException;

import java.io.OutputStream;

/**

* Created by zhang on 2014/9/13.

*/

public class LoginServlet extends HttpServlet{

    @Override

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        OutputStream out = resp.getOutputStream();

        String username = req.getParameter("username");

        String password = req.getParameter("password");

        String validationCode = req.getParameter("validationCode");

        HttpSession session = req.getSession();

        String validation_code = (String)session.getAttribute("validation_code");

        if(validationCode.equalsIgnoreCase(validation_code)){

            System.out.println("驗證碼正確");

        }else{

            System.out.println("驗證碼錯誤");

        }

        ManageSQLServer2008 mss = new ManageSQLServer2008();

        String result = mss.checkUser(username,password);

        if (result.equals("hasUserNameAndPasswordCorrect")) {

            System.out.println("用戶名和密碼均正確");

        } else if (result.equals("hasUserNameButPasswordInCorrect")) {

            System.out.println("用戶名正確,密碼不正確");

        } else if (result.equals("hasNoUserName")) {

            System.out.println("沒有此用戶");

        }

        //轉發到result.jsp

        RequestDispatcher rd = req.getRequestDispatcher("Login.html");

        rd.forward(req, resp);

    }

    @Override

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        doGet(req,resp);

    }

}

web.xml文件的配置:

<servlet>

        <servlet-name>loginServlet</servlet-name>

        <servlet-class>zh.userlogin.sample.LoginServlet</servlet-class>

    </servlet>

    <servlet-mapping>

        <servlet-name>loginServlet</servlet-name>

        <url-pattern>/loginServlet</url-pattern>

    </servlet-mapping>

    <servlet>

        <servlet-name>validationCode</servlet-name>

        <servlet-class>zh.userlogin.sample.ValidationCode</servlet-class>

    </servlet>

    <servlet-mapping>

        <servlet-name>validationCode</servlet-name>

        <url-pattern>/validationCode</url-pattern>

</servlet-mapping>

最後的style.css代碼,太多了,並且有點亂,因此就沒有貼出來,至於CSS代碼,你們能夠去網上下載:http://sc.chinaz.com/tag_moban/htmlMoBan.html這個上面就有好多,你們根據喜愛選擇一個,而後稍加便可。

相關文章
相關標籤/搜索