servlet编写验证码程序:
package org.zhou.webhw2;
import org.apache.commons.lang3.RandomUtils;
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 javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
public class yanzhengmaServlet extends HttpServlet {
private static final int WIDTH=100;
private static final int HEIGHT=40;
public static String ma;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取session
HttpSession session =request.getSession();
System.out.println(session.getId());
//产生一张图片
BufferedImage image=new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
Graphics g=image.getGraphics();//制图类
//设置背景色
g.setColor(Color.WHITE);
//设置背景填充色
g.fillRect(0,0,WIDTH,HEIGHT);
//设置前景色(验证码颜色)
g.setColor(Color.black);
//获取一个字体类对象
Font font=new Font("黑体",Font.BOLD,30);
//设置图字体
g.setFont(font);
//调用随机获取字母的方法
ma=genRandomString(4,g);
session.setAttribute("str",ma);
//画线
for(int i=0;i<20;i++){
//随机获取线条坐标值
int x1=RandomUtils.nextInt(0,WIDTH);
int x2=RandomUtils.nextInt(0,WIDTH);
int y1=RandomUtils.nextInt(0,HEIGHT);
int y2=RandomUtils.nextInt(0,HEIGHT);
//随机获取线条颜色
Color color=new Color(RandomUtils.nextInt(0,255),RandomUtils.nextInt(0,255),RandomUtils.nextInt(0,255));
//设置图中线条颜色
g.setColor(color);
//画线
g.drawLine(x1,x2,y1,y2);
}
//输出图片
ImageIO.write(image,"jpg",response.getOutputStream());
}
private String genRandomString(int i,Graphics g) {
String suiji="";
int k=20;
int l=0;
for(int j=0;j<i;j++){
char c1=(char) RandomUtils.nextInt(48,58);
char c2=(char) RandomUtils.nextInt(65,91);
char c3=(char) RandomUtils.nextInt(97,123);
char ccc[]={c1,c2,c3};
char cc=ccc[RandomUtils.nextInt(0,3)];
String str=String.valueOf(cc);
int x=RandomUtils.nextInt(l,l+k);
int y=RandomUtils.nextInt(20,40);
g.drawString(str,x,y);
l=l+k+2;
suiji+=cc;
}
return suiji;
}
}
servlet编写服务器反馈界面:
package org.zhou.webhw2;
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 java.io.IOException;
@WebServlet(name = "UserServlet")
public class UserServlet 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 {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
// response.getWriter().print("<!DOCTYPE html> <html lang=\"zh-CN\"> <head> <meta charset=\"utf-8\"> <meta http-equiv=\"X-UA-Compatible\" content=\"IE-edge\"> <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"> <title>vue01</title> </head> <body>");
// response.getWriter().print("<form name='form1' action='' method='post'>");
// response.getWriter().print("<p><b>注册:</p>");
// response.getWriter().print("<p>请输入用户名:<input type='text' name='usename'/></p>");
// response.getWriter().print("<p>请输入密码:<input type='password' name='password'/></p>");
// response.getWriter().print("<p>请输入验证码:<input type='text' name='yanzheng'/><img src='./web1'></p>");
// response.getWriter().print("<button type='submit'>提交</button>");
// response.getWriter().print("</form>");
//获取用户输入的验证码值
String str=request.getParameter("yanzheng");
// String str2=yanzhengmaServlet.ma;
HttpSession session2 =request.getSession();
String str2=String.valueOf(session2.getAttribute("str"));
if(request.getParameter("r1")!=null){
if(equals2(str,str2)){
response.getWriter().print("<p>登录成功!</p>");
response.getWriter().print(request.getParameter("usename"));
response.getWriter().print("密码是:"+request.getParameter("password"));
}else{
response.getWriter().print("<script>alert('验证码错误1')</script>");
}
}else{
if(str.equals(str2)){
response.getWriter().print("<p>登录成功!</p>");
response.getWriter().print(request.getParameter("usename"));
response.getWriter().print("密码是:"+request.getParameter("password"));
}else{
response.getWriter().print("<script>alert('验证码错误2')</script>");
}
}
// response.getWriter().print("</body></html>");
}
public boolean equals2(String str1,String str2) {
String s1=str1.toUpperCase();
String s2=str2.toUpperCase();
if(s1.equals(s2)){
return true;
}else {
return false;
}
}
}
网页代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form name='form1' action='./web2' method='post'>
<p><b>注册:</p>
<p>请输入用户名:<input type='text' name='usename'/></p>
<p>请输入密码:<input type='password' name='password'/></p>
<p>请输入验证码:<input type='text' name='yanzheng'/>
<input type='checkbox' name="r1"/>不区分大小写
<img src="./web1"></p>
<button type='submit'>提交</button>
</form>
</body>
</html>
web.xml文件的配置:
<?xml version='1.0' encoding='UTF-8'?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="true">
<display-name>java web01</display-name>
<description>
java web01
</description>
<servlet>
<servlet-name>Servletid</servlet-name>
<servlet-class>org.zhou.webhw2.yanzhengmaServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servletid</servlet-name>
<url-pattern>/web1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Servletid2</servlet-name>
<servlet-class>org.zhou.webhw2.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servletid2</servlet-name>
<url-pattern>/web2</url-pattern>
</servlet-mapping>
</web-app>
运行程序需要的包:
效果图: