欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

jsp實現(xiàn)簡單圖片驗證碼功能

 更新時間:2022年02月09日 11:12:44   作者:一只小小的螞蟻  
這篇文章主要為大家詳細(xì)介紹了jsp實現(xiàn)簡單圖片驗證碼功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了jsp實現(xiàn)簡單圖片驗證碼的具體代碼,供大家參考,具體內(nèi)容如下

一、實現(xiàn)的功能分析

(1)在登陸頁面加驗證碼的功能,起到一定的安全性。在輸入正確的驗證碼,用戶名和密碼的情況下,才可以實現(xiàn)登錄。
(2)實現(xiàn)查詢數(shù)據(jù)庫的功能。在登陸后的頁面中,顯示用戶名和密碼,并且設(shè)置有一個超鏈接,實現(xiàn)查詢數(shù)據(jù)庫的功能。
(3)代碼核心是:隨機(jī)生成驗證碼,并且顯示在頁面上。同時要和輸入框中的輸入驗證碼進(jìn)行校驗。
(4)主頁面使用img標(biāo)簽的src屬性引入驗證頁面的jsp文件。
(5)驗證碼的實現(xiàn)頁面使用BufferedImage類的方法產(chǎn)生圖片。
(6)使用Graphics類的各種方法實現(xiàn)驗證碼的構(gòu)成。

二、代碼實現(xiàn)

(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>
<% ?
? ? //內(nèi)置對象
? ? 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)實現(xiàn)數(shù)據(jù)查詢頁面: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>數(shù)量</td>
? ? ? ? ?<td>日期</td>
? ? ? ? ?<td>風(fēng)格</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類,用于接收數(shù)據(jù)庫中的元素。

package com.entity;
//用于獲取數(shù)據(jù)庫中的元素對象
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文件。用于登錄檢驗和驗證碼匹配。

//交互層(客戶端和服務(wù)器的交互)
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
?? ??? ?//內(nèi)置對象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)) {
?? ??? ??? ?//獲取表單數(shù)據(jù)
?? ??? ??? ?String username = request.getParameter("username");
?? ??? ??? ?int password = Integer.valueOf(request.getParameter("password"));
?? ??? ??? ?
?? ??? ??? ?//判斷用戶信息是否正確,查詢數(shù)據(jù)庫獲取用戶信息
?? ??? ??? ? AuthorDao ad = new AuthorDao();
?? ??? ? ? ? Author obj = ad.check(username, password);
?? ??? ? ? ??
?? ??? ? ? ? //判斷
?? ??? ? ? ? if(obj != null) {
?? ??? ? ? ??? ??
?? ??? ? ? ??? ? //重新放入用戶信息
?? ??? ? ? ?//?? ? HttpSession session = request.getSession();
?? ??? ? ? ??? ? session.setAttribute("authorInfo", obj);
?? ??? ? ? ??? ? //設(shè)置session的有效期為10秒
?? ??? ? ? ??? ? session.setMaxInactiveInterval(10);
?? ??? ? ? ??? ??
?? ??? ? ? ??? ? //頁面轉(zhuǎn)發(fā)
?? ??? ? ? ??? ? 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)數(shù)據(jù)庫查詢的交互層: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
?? ??? ?//設(shè)置編碼方式
?? ??? ? request.setCharacterEncoding("utf-8");
?? ??? ??
?? ??? ? //查詢用戶列表
?? ??? ? AuthorDao ad = new AuthorDao();
?? ??? ? //將Dao層中的結(jié)果放入list中
?? ??? ? List<Author> list = ad.queryAuthorList();
?? ??? ? request.setAttribute("authorList", list);
?? ??? ??
?? ??? ? //請求轉(zhuǎn)發(fā)的方式將查詢結(jié)果放入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類實現(xiàn)查詢數(shù)據(jù)庫和檢驗登錄的用戶名和密碼。

//用于檢驗登錄頁面所填入信息是否正確
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();
?? ??? ??? ??? ?//獲取數(shù)據(jù)庫連接
?? ??? ??? ??? ?Connection conn = db.getConn();
?? ??? ??? ??? ?//設(shè)置要執(zhí)行的數(shù)據(jù)庫語句
?? ??? ??? ??? ?String sql = "select *from furnitures where name = ? and id = ?";
?? ??? ??? ??? ?
?? ??? ??? ??? ?PreparedStatement ps = ?conn.prepareStatement(sql);
?? ??? ??? ??? ?//設(shè)置用戶名和密碼放入sql語句
?? ??? ??? ??? ?ps.setString(1, username);
?? ??? ??? ??? ?ps.setInt(2, password);
?? ??? ??? ??? ?
?? ??? ??? ??? ?//執(zhí)行sql查詢語句 , 并將執(zhí)行結(jié)果放入結(jié)果集中
?? ??? ??? ? ? ?ResultSet rs = ps.executeQuery();
?? ??? ??? ??? ?
?? ??? ??? ? ? ?//用戶名和密碼都正確
?? ??? ??? ? ? ?if(rs.next()) {
?? ??? ??? ? ? ??? ?
?? ??? ??? ? ? ??? ?//新創(chuàng)建一個obj 將查詢結(jié)果放入
?? ??? ??? ? ? ??? ?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集合,用于存放查詢結(jié)果
?? ??? ?List<Author> list = new ArrayList<Author>() ;
?? ??? ?try {
?? ??? ??? ?
?? ??? ??? ?
?? ??? ??? ?DBConnection db = new DBConnection();
?? ??? ??? ?//獲取數(shù)據(jù)庫連接
?? ??? ??? ?Connection conn = db.getConn();
?? ??? ??? ?//設(shè)置數(shù)據(jù)庫要查詢的語句
?? ??? ??? ?String sql = "select *from furnitures ";
?? ??? ??? ?
?? ??? ??? ?PreparedStatement ps = conn.prepareStatement(sql);
?? ??? ??? ?
?? ??? ??? ?//執(zhí)行數(shù)據(jù)庫查詢語句,并將查詢結(jié)果放入結(jié)果集
?? ??? ??? ?ResultSet rs = ps.executeQuery();
?? ??? ??? ?
?? ??? ??? ?//利用循環(huán)將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";
?? ?
?? ?//定義隨機(jī)數(shù)
?? ?private Random random = new Random();
?? ?
?? ?//隨機(jī)生成四個字符
?? ?public String getStr()
?? ?{
?? ??? ?String s = "";
?? ??? ?int len = str.length();
?? ??? ?for(int i=0;i<4;i++) {
?? ??? ??? ?s+=str.charAt(random.nextInt(len));
?? ??? ?}
?? ??? ?return s;
?? ?}
?? ?
?? ?//隨機(jī)顏色
?? ?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輸出流進(jìn)行圖片的輸出
?? ??? ?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)創(chuàng)建DBConnectoin.java類用戶獲取數(shù)據(jù)庫連接。(我用的是mysql)

//獲取數(shù)據(jù)庫連接
package com.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBConnection {
?? ?private static String username="填入自己的數(shù)據(jù)庫名";
?? ?private static String password="填入自己的數(shù)據(jù)庫密碼";
?? ?private static String driver = "com.mysql.jdbc.Driver";
?? ?private static String url="jdbc:mysql://localhost:3306/已經(jīng)創(chuàng)建數(shù)據(jù)庫名";
?? ?
?? ?private Connection conn;
?? ?
?? ?static {
?? ??? ?try {
?? ??? ??? ?//加載驅(qū)動,捕獲異常
?? ??? ??? ?Class.forName(driver);
?? ??? ?} catch (ClassNotFoundException e) {
?? ??? ??? ?// TODO Auto-generated catch block
?? ??? ??? ?e.printStackTrace();
?? ??? ?}
?? ?}
?? ?
?? ?public DBConnection () throws SQLException {
?? ??? ?//連接數(shù)據(jù)庫
?? ??? ?conn = DriverManager.getConnection(url,username,password);
?? ?}
?? ?
?? ?//用于獲取conn
?? ?public Connection getConn() {
?? ??? ?return conn;
?? ?}

?? ?public void setConn(Connection conn) {
?? ??? ?this.conn = conn;
?? ?}?
?? ?

}

三、頁面

(1)登錄頁面

(2)數(shù)據(jù)查詢頁面

(3)查詢結(jié)果顯示頁面

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論