简单的登录验证码由servlet实现
- 创建包util,类ImageServlet
package util;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
public class ImageServlet extends HttpServlet {
public ImageServlet() {
super();
}
@Override
public void destroy() {
super.destroy();
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
int width=78;
int height=20;
//创建对象
BufferedImage bim=new BufferedImage(68,20,BufferedImage.TYPE_INT_RGB);
/*
获取图片对象bim的图形上下文对象g,这个g的功能如同一支绘图笔,程序中使用这支笔来绘制、修改图片对象bim
*/
Graphics g=bim.getGraphics();
Random rm=new Random();
g.setColor(new Color(rm.nextInt(100),205,rm.nextInt(100)));
g.fillRect(0,0,width,height);
StringBuffer sbf=new StringBuffer();
//输出数字
for(int i=0;i<4;i++){
g.setColor(Color.black);
g.setFont(new Font("微软雅黑",Font.BOLD|Font.ITALIC,22));
int n=rm.nextInt(10);
sbf.append(n);
g.drawString(""+n,i*15+5,18);
}
//生成的验证码保存到session中
HttpSession sn=req.getSession();
sn.setAttribute("piccode",sbf);
//禁止缓存
resp.addHeader("Prama","no-cache");
resp.setHeader("Coche-Control","no-cache");
resp.setDateHeader("Expires",0);
resp.setContentType("image/jpeg");
//将bim图片以"jpg"格式返回给浏览器
ImageIO.write(bim,"JPG",resp.getOutputStream());
resp.getOutputStream().close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
@Override
public void init() throws ServletException {
super.init();
}
}
2.配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>ImageServlet</servlet-name>
<servlet-class>util.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ImageServlet</servlet-name>
<url-pattern>/ImageServlet</url-pattern>
</servlet-mapping>
</web-app>
3.创建登录界面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录</title>
<script>
function reloadImage(t) {
t.src="ImageServlet?flag="+Math.random();
}
</script>
</head>
<body>
<div align="center">
<form action="checkUser.jsp" method="post">
<table bgcolor="#e7daff">
<tr><td colspan="2" align="center">用户登录</td></tr>
<tr><td>用户名:</td>
<td><input type="text" name="user"></td>
</tr>
<tr><td>密码:</td>
<td><input type="password" name="password"></td>
</tr>
<tr><td>验证码</td>
<td><input type="text" name="checkcode">
<img src="ImageServlet" align="middle" alt="看不清,点击这里!" onclick="reloadImage(this)"></td>
</tr>
<tr><td colspan="2" align="center"><input type="submit" value="登录"></td></tr>
</table>
</form>
</div>
</body>
</html>
4.创建javabean,里面java代码用来连接数据库,与jsp部分相分离来
package bean;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBcon {
private String str="com.mysql.cj.jdbc.Driver";
private String root="root";
private String password="2001223";
private String url="jdbc:mysql://localhost:3306/users";
public Connection getconnection() throws ClassNotFoundException, SQLException {
Class.forName(str);
return DriverManager.getConnection(url,root,password);
}
}
5.创建登录验证的jsp文件
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.Statement" %>
<%@ page import="java.sql.ResultSet" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<jsp:useBean id="db" class="bean.DBcon" scope="request"></jsp:useBean>
<html>
<head>
<title>登录验证</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
String username=request.getParameter("user");
String password=request.getParameter("password");
String checkcode=request.getParameter("checkcode");
String piccode=request.getSession().getAttribute("piccode").toString();
%>
你输入的验证码是:<%=checkcode%><br>
由servlet生成的验证码是:<%=piccode%><br>
你输入的用户名是:<%=username%><br>
你输入的密码是:<%=password%><br><hr>
<%
Connection con=db.getconnection();
Statement stmt=con.createStatement();
String sql="select * from userinfo";
sql+=" where loginname='"+username+"' and password='"+password+"'";
ResultSet rs=stmt.executeQuery(sql);
if(checkcode.equals(piccode)&&rs.next()){
session.setAttribute("userName",username);
out.print("<span style='color:green'>恭喜你,验证通过!</span><br><br>");
out.print("<a href='main.jsp'>转向主页面</a>");
}else {
out.print("<span style='color:red'>验证错误或无此用户或密码错误,登录失败!</span><br>");
out.print("<a href='login.jsp'>重新登录</a>");
}
%>
</body>
</html>
6.运行效果图