jsp实现简单图片验证码功能(jsp加入图片的代码)太疯狂了

随心笔谈11个月前发布 admin
96 0



本文实例为大家分享了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=”https://www.jb51.net/article/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=”https://www.jb51.net/article/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;

@WebServlet(“/LoginServlet”)
public class LoginServlet extends HttpServlet {
?private static final long serialVersionUID=1L;
? ? ? ?
? ?
? ? public LoginServlet() {
? ? ? ? super();
? ? ? ? // TODO Auto-generated constructor stub
? ? }

?
?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);
? ?}
?} ?
?
?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;

@WebServlet(“/AuthorServlet”)
public class AuthorServlet extends HttpServlet {
?private static final long serialVersionUID=1L;
? ? ? ?
? ?
? ? public AuthorServlet() {
? ? ? ? super();
? ? ? ? // TODO Auto-generated constructor stub
? ? }

?
?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);
?
?
?}

?
?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)查询结果显示页面

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:在JSP页面中动态生成图片验证码的方法实例JSP开发之生成图片验证码技术的详解JSP实用教程之简易图片验证码的实现方法(附源码)

© 版权声明

相关文章