1. 程式人生 > >登陸頁面(附自動重新整理驗證碼)

登陸頁面(附自動重新整理驗證碼)

最近閒來無事,就用idea寫了一個簡單的登陸頁面,僅供自學java程式碼的java初學者,以下是我的原始碼,包括簡單的前端程式碼:

按照MVC,先來javaBean程式碼

package com.test.bean;

/**
 * 包名:com.test.bean
 * 作者:David
 * 日期:2018/7/16 15:42
 **/


public class Student {
    private int id;
    private String name;
    private String password;
    private String love;

    public Student(int id, String name, String password, String love) {
        this.id = id;
        this.name = name;
        this.password = password;
        this.love = love;
    }

    public Student() {

    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                ", love='" + love + '\'' +
                '}';
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getLove() {
        return love;
    }

    public void setLove(String love) {
        this.love = love;
    }
}業務層:
package com.test.service;

import com.test.bean.Student;
import com.test.dao.checkDao;

/**
 * 包名:com.test.service
 * 作者:David
 * 日期:2018/7/16 16:21
 **/


public class checkService {
    public Student check(String name, String password, String love) {
        checkDao dao = new checkDao();
        Student student = null;
        try {
            student = dao.check(name,password,love);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return student;
    }
}

dao層:

package com.test.dao;

import com.test.bean.Student;
import com.test.utils.JDBCUtilDruid;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

/**
 * 包名:com.test.dao
 * 作者:David
 * 日期:2018/7/16 16:24
 **/


public class checkDao {
    public Student check(String name, String password, String love) throws Exception {
        JdbcTemplate template = new JdbcTemplate(JDBCUtilDruid.getDataSource());
        String sql = "select * from student where name=? and password=? and love=?";
        Student student = template.queryForObject(sql, new BeanPropertyRowMapper<>(Student.class), name, password, love);
        return student;
    }
}

servlet層:(登陸)

package com.test.web.servlet;

import com.test.bean.Student;
import com.test.service.checkService;

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 java.io.IOException;

/**
 * 包名:${PACKAGE_NAME}
 * 作者:David
 * 日期:2018/7/16 15:47
 **/


@WebServlet(name = "loginServlet", urlPatterns ="/login")
public class loginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name = request.getParameter("name");
        String password = request.getParameter("password");
        String love = request.getParameter("love");
        String codeName = request.getParameter("codeName");
        String codeSession = (String) request.getSession().getAttribute("codeSession");
        if (codeName.equalsIgnoreCase( codeSession)){
            checkService service = new checkService();
            Student student = service.check(name,password,love);
            if (student != null){
                request.setAttribute("student",student);
                request.getRequestDispatcher("welcome.jsp").forward(request,response);
            }
            else {
                request.setAttribute("msg","使用者資訊錯誤,請從新輸入");
                request.getRequestDispatcher("login.jsp").forward(request,response);
            }
        }
        else {
            request.setAttribute("codeMsg","驗證碼錯誤");
            request.getRequestDispatcher("login.jsp").forward(request,response);
        }


    }
}

驗證碼:

package com.test.web.servlet;

import javax.imageio.ImageIO;
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 java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

@WebServlet(urlPatterns = "/codeTest")
public class CheckcodeServlet extends HttpServlet {
   private static final long serialVersionUID = 1L;

   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      //  建立畫布
      int width = 120;
      int height = 40;
      BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
      //  獲得畫筆
      Graphics g = bufferedImage.getGraphics();
      //  填充背景顏色
      g.setColor(Color.white);
      g.fillRect(0, 0, width, height);
      //  繪製邊框
      g.setColor(Color.red);
      g.drawRect(0, 0, width - 1, height - 1);
      //  生成隨機字元
      //  準備資料
      String data = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
      //  準備隨機物件
      Random r = new Random();
      //  宣告一個變數 儲存驗證碼
      String code = "";
      //  書寫4個隨機字元
      for (int i = 0; i < 4; i++) {
         //  設定字型
         g.setFont(new Font("宋體", Font.BOLD, 28));
         //  設定隨機顏色
         g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));

         String str = data.charAt(r.nextInt(data.length())) + "";
         g.drawString(str, 10 + i * 28, 30);

         //  將新的字元 儲存到驗證碼中
         code = code + str;
      }
      //  繪製干擾線
      for (int i = 0; i < 6; i++) {
         //  設定隨機顏色
         g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)));

         g.drawLine(r.nextInt(width), r.nextInt(height), r.nextInt(width), r.nextInt(height));
      }

      //  將驗證碼 列印到控制檯
      System.out.println(code);

      //  將驗證碼放到session中
      request.getSession().setAttribute("codeSession", code);

      //  將畫布顯示在瀏覽器中
      ImageIO.write(bufferedImage, "jpg", response.getOutputStream());
   }

   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      doGet(request, response);
   }

}

使用過濾器,解決所有請求響應的中文亂碼:

package com.test.web.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

/**
 * 包名:${PACKAGE_NAME}
 * 作者:David
 * 日期:2018/7/16 15:45
 **/


@WebFilter(filterName = "encodeFilter",urlPatterns = "/*")
public class encodeFilter implements Filter {
    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=UTF-8");
        chain.doFilter(req, resp);
    }

    public void init(FilterConfig config) throws ServletException {

    }

}

自定義一個druid連線池工具類:

package com.test.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * 包名:com.itheima.utils
 * 作者:Leevi
 * 日期2018-06-21  17:55
 */
public class JDBCUtilDruid {
    private static DataSource ds;
    static {
        InputStream in = null;
        try {
            Properties properties = new Properties();
            in = JDBCUtilDruid.class.getResourceAsStream("/druidconfig.properties");
            properties.load(in);
            ds = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    public static DataSource getDataSource(){
        return ds;
    }
    public static Connection getConnection() throws SQLException {
        //從Druid連線池中獲取連線物件
        return ds.getConnection();
    }
    public static void close(Statement stm, Connection conn) throws SQLException {
        if (stm != null) {
            stm.close();
        }
        if (conn != null) {
            conn.close();
        }
    }
    public static void close(ResultSet rst, Statement stm, Connection conn) throws SQLException {
        if (rst != null) {
            rst.close();
        }
        close(stm,conn);
    }

    public static void main(String[] args) throws SQLException {
        //要使用Druid連線池獲取一個連線
        Connection conn = JDBCUtilDruid.getConnection();

        //怎麼將conn還到池子中
        conn.close();
    }
}

三個簡單的前端頁面:首頁,登陸,歡迎頁面

%--一:
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2018/7/16
  Time: 15:28
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>首頁</title>
  </head>
  <body>
  <h1 style="color: pink">你好,歡迎來到英雄聯盟</h1>
  <a href="login.jsp"><span style="color: red">點選進入登陸頁面</span></a>
  </body>
</html>

二:

%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2018/7/16
  Time: 15:48
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登陸頁面</title>
</head>
<script>
    function fun1(obj) {
        obj.src = "codeTest?time="+new Date()
    }
</script>
<body>
<form method="post" action="login">
    <table>
        <tr>
            <td><span style="color: orange">使用者名稱</span></td>
            <td><input type="text" name="name"></td>
        </tr>
        <tr>
            <td><span style="color: orange">密碼</span></td>
            <td><input type="text" name="password"></td>
        </tr>
        <tr>
            <td><span style="color: orange">愛好</span></td>
            <td><input type="text" name="love"></td>
        </tr>
        <tr>
            <td><span style="color: orange">驗證碼</span></td>
            <td><input type="text" name="codeName"></td>
        </tr>
        <tr>
            <td><span style="color: orange">點選圖片重新整理</span></td>
            <td><img src="codeTest" onclick="fun1(this)"></td>
        </tr>
        <tr>
            <td><input type="submit" value="登陸"></td>
        </tr>
    </table>

</form>
<div style="color: red">${msg}</div>
<div style="color: pink">${codeMsg}</div>

</body>
</html>

三:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>歡迎頁面</title>
</head>
<body>
<div style="color: blueviolet">歡迎${student.name}來到召喚師峽谷</div>

</body>
</html>

所需所有jar包:

commons-beanutils-1.8.3.jar
commons-logging-1.1.1.jar
druid-1.0.9.jar
javax.servlet.jsp.jstl.jar
jstl-impl.jar
mysql-connector-java-5.1.18-bin.jar
spring-beans-4.2.4.RELEASE.jar
spring-core-4.2.4.RELEASE.jar
spring-jdbc-4.2.4.RELEASE.jar
spring-tx-4.2.4.RELEASE.jar

druid配置檔案:

druidconfig.properties