<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了jsp實現簡單圖片驗證碼的具體程式碼,供大家參考,具體內容如下
(1)在登陸頁面加驗證碼的功能,起到一定的安全性。在輸入正確的驗證碼,使用者名稱和密碼的情況下,才可以實現登入。
(2)實現查詢資料庫的功能。在登陸後的頁面中,顯示使用者名稱和密碼,並且設定有一個超連結,實現查詢資料庫的功能。
(3)程式碼核心是:隨機生成驗證碼,並且顯示在頁面上。同時要和輸入框中的輸入驗證碼進行校驗。
(4)主頁面使用img標籤的src屬性引入驗證頁面的jsp檔案。
(5)驗證碼的實現頁面使用BufferedImage類的方法產生圖片。
(6)使用Graphics類的各種方法實現驗證碼的構成。
(1)登入頁面:index.jsp檔案。
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>登入頁面</title> </head> <body> <form action="LoginServlet" method="post"> 使用者名稱:<input name="username" type="text" value=""/><br/><br/> 密碼:<input name="password" type="password" value=""/><br/><br/> 驗證碼: <input type="text" name="checkCode" height="20px " value=""/> <img src="CodeServlet"/><span>${error_code}</span><br/> <input type="submit" value="提交"> </form> </body> </html>
(2)登入後的頁面:user.jsp檔案。
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page import = "com.entity.Author"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>顯示登入使用者的使用者名稱和密碼頁面</title> </head> <body> <% //內建物件 request.setCharacterEncoding("utf-8"); //獲取互動層放入session中的obj Author obj = (Author)session.getAttribute("authorInfo"); if(obj != null){ out.print("<p>使用者名稱:"+obj.getName()+"</p>"); out.print("<p>密碼:"+obj.getId()+"</p>"); } else{ response.sendRedirect("index.jsp"); } %> <br/> <a href="AuthorServlet">使用者資訊查詢 </a> </body> </html>
(3)實現資料查詢頁面:ueslist.jsp檔案。
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>查詢資訊顯示頁面</title> </head> <body> <table border="1"> <tr> <td>編號</td> <td>名稱</td> <td>價格</td> <td>數量</td> <td>日期</td> <td>風格</td> </tr> <c:forEach items="${authorList}" var="author"> <tr> <td>${author.id}</td> <td>${author.name }</td> <td>${author.price }</td> <td>${author.num }</td> <td>${author.dates}</td> <td>${author.style}</td> </tr> </c:forEach> </table> </body> </html>
(4)定義一個Author類,用於接收資料庫中的元素。
package com.entity; //用於獲取資料庫中的元素物件 public class Author { private int id; private String name; private int price ; private int num; private String dates; private String style; 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 int getPrice() { return price; } public void setPrice(int price) { this.price = price; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public String getDates() { return dates; } public void setDates(String dates) { this.dates = dates; } public String getStyle() { return style; } public void setStyle(String style) { this.style = style; } }
(5)登入頁面的互動層:LoginServlet.java檔案。用於登入檢驗和驗證碼匹配。
//互動層(使用者端和伺服器的互動) package com.servlet; import java.io.IOException; import java.sql.SQLException; 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 javax.servlet.http.HttpSession; import com.dao.AuthorDao; import com.entity.Author; /** * Servlet implementation class LoginServlet */ @WebServlet("/LoginServlet") public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public LoginServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //內建物件request,response request.setCharacterEncoding("utf-8"); HttpSession session = request.getSession(); //獲取使用者輸入驗證碼 String checkCode = request.getParameter("checkCode"); //獲取session中的驗證碼,也就是CodeServlet中生成的四個字元 String sessionCode = (String)session.getAttribute("sCode"); //驗證碼正確 if(checkCode.equals(sessionCode)) { //獲取表單資料 String username = request.getParameter("username"); int password = Integer.valueOf(request.getParameter("password")); //判斷使用者資訊是否正確,查詢資料庫獲取使用者資訊 AuthorDao ad = new AuthorDao(); Author obj = ad.check(username, password); //判斷 if(obj != null) { //重新放入使用者資訊 // HttpSession session = request.getSession(); session.setAttribute("authorInfo", obj); //設定session的有效期為10秒 session.setMaxInactiveInterval(10); //頁面轉發 response.sendRedirect("user.jsp"); } else { //頁面重定向到登入頁面 response.sendRedirect("index.jsp"); } } else { //驗證碼不正確 request.setAttribute("error_code", "驗證碼不匹配"); request.getRequestDispatcher("index.jsp").forward(request, response); } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
(6)資料庫查詢的互動層:AuthorServlet.java檔案。
package com.servlet; import java.io.IOException; import java.util.List; 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 com.dao.AuthorDao; import com.entity.Author; /** * Servlet implementation class AuthorServlet */ @WebServlet("/AuthorServlet") public class AuthorServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public AuthorServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //設定編碼方式 request.setCharacterEncoding("utf-8"); //查詢使用者列表 AuthorDao ad = new AuthorDao(); //將Dao層中的結果放入list中 List<Author> list = ad.queryAuthorList(); request.setAttribute("authorList", list); //請求轉發的方式將查詢結果放入request中,再將超連結直接存取AuthorServlet就將資訊顯示出來了。 request.getRequestDispatcher("uselist.jsp").forward(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
(7)定義一個AuthorDao類實現查詢資料庫和檢驗登入的使用者名稱和密碼。
//用於檢驗登入頁面所填入資訊是否正確 package com.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import com.entity.Author; public class AuthorDao { public Author check(String username ,int password) { Author obj = null ; try { DBConnection db = new DBConnection(); //獲取資料庫連線 Connection conn = db.getConn(); //設定要執行的資料庫語句 String sql = "select *from furnitures where name = ? and id = ?"; PreparedStatement ps = conn.prepareStatement(sql); //設定使用者名稱和密碼放入sql語句 ps.setString(1, username); ps.setInt(2, password); //執行sql查詢語句 , 並將執行結果放入結果集中 ResultSet rs = ps.executeQuery(); //使用者名稱和密碼都正確 if(rs.next()) { //新建立一個obj 將查詢結果放入 obj = new Author(); obj.setId(rs.getInt(1)); obj.setName(rs.getString(2)); obj.setPrice(rs.getInt(3)); obj.setNum(rs.getInt(4)); obj.setDates(rs.getString(5)); obj.setStyle(rs.getString(6)); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return obj; } public List<Author> queryAuthorList(){ Author obj = null; //定義一個list集合,用於存放查詢結果 List<Author> list = new ArrayList<Author>() ; try { DBConnection db = new DBConnection(); //獲取資料庫連線 Connection conn = db.getConn(); //設定資料庫要查詢的語句 String sql = "select *from furnitures "; PreparedStatement ps = conn.prepareStatement(sql); //執行資料庫查詢語句,並將查詢結果放入結果集 ResultSet rs = ps.executeQuery(); //利用迴圈將obj放入list集合中 while(rs.next()) { obj = new Author(); obj.setId(rs.getInt(1)); obj.setName(rs.getNString(2)); obj.setPrice(rs.getInt(3)); obj.setNum(rs.getInt(4)); obj.setDates(rs.getString(5)); obj.setStyle(rs.getString(6)); //將obj加入到list list.add(obj); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } }
(8)定義一個驗證碼生成CodeServlet類,用於生成驗證碼。
package com.servlet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; @WebServlet("/CodeServlet") public class CodeServlet extends HttpServlet{ //定義驗證碼的原始碼 private static final String str ="abcdefghijklmnopqrstuvwxyaABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; //定義亂數 private Random random = new Random(); //隨機生成四個字元 public String getStr() { String s = ""; int len = str.length(); for(int i=0;i<4;i++) { s+=str.charAt(random.nextInt(len)); } return s; } //隨機顏色 public Color getColor() { int red = random.nextInt(256); int green = random.nextInt(256); int blue = random.nextInt(256); Color color = new Color(red,green,blue); return color; } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub //生成驗證碼圖片 //畫板 BufferedImage image = new BufferedImage(70,20,BufferedImage.TYPE_INT_RGB ); //畫筆 Graphics pen = image.getGraphics(); //矩形 pen.fillRect(0, 0, 70, 20); //字型 pen.setFont(new Font("微軟雅黑",Font.BOLD,20)); //獲取4個字元 String code = getStr(); //繪製圖片 for(int i=0;i<code.length();i++) { pen.setColor(getColor()); pen.drawString(String.valueOf(code.charAt(i)), i*15+5, 20);; } //response物件繪製圖片到頁面,Servle輸出流進行圖片的輸出 ServletOutputStream sos = resp.getOutputStream(); ImageIO.write(image, "png", sos); sos.flush(); sos.close(); //驗證碼放入session HttpSession session = req.getSession(); session.setAttribute("sCode", code); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub doPost(req, resp); } }
(9)建立DBConnectoin.java類使用者獲取資料庫連線。(我用的是mysql)
//獲取資料庫連線 package com.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBConnection { private static String username="填入自己的資料庫名"; private static String password="填入自己的資料庫密碼"; private static String driver = "com.mysql.jdbc.Driver"; private static String url="jdbc:mysql://localhost:3306/已經建立資料庫名"; private Connection conn; static { try { //載入驅動,捕獲異常 Class.forName(driver); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public DBConnection () throws SQLException { //連線資料庫 conn = DriverManager.getConnection(url,username,password); } //用於獲取conn public Connection getConn() { return conn; } public void setConn(Connection conn) { this.conn = conn; } }
(1)登入頁面
(2)資料查詢頁面
(3)查詢結果顯示頁面
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45