登陸頁面(附自動重新整理驗證碼)
阿新 • • 發佈:2018-11-28
最近閒來無事,就用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