util包
package www.csdn.net.news.util;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.servlet.http.HttpSession;
public class RandomImage {
private final static int WIDTH = 100;
private final static int HEIGHT = 30;
public static Random rd = new Random();
public static BufferedImage creatImage(HttpSession session) {
// 在内存中创建图片
BufferedImage image = new BufferedImage(WIDTH, HEIGHT,
BufferedImage.TYPE_INT_BGR);
// 得到图形上下文
Graphics g = image.getGraphics();
// 设置背景
drawBackground(g);
// 绘制边框
drawBorder(g);
// 绘制内容
// 将验证码信息发送到当前页的session中
String code=String.valueOf(drawContent(g));
System.out.println("产生验证码======="+code);
session.setAttribute("code", code);
// 绘制干扰
drawDisturb(g);
return image;
}
private static String drawContent(Graphics g) {
// TODO Auto-generated method stub
String con = "qwertyuiopasdfgjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM";
//用于显示
StringBuffer sb = new StringBuffer();
//用于验证
StringBuffer st=new StringBuffer();
for (int i = 0; i < 4; i++) {
int index = rd.nextInt(con.length());
char str = con.charAt(index);
sb.append(str+" ");
st.append(str);
}
g.setColor(getRandomColor(10, 100));
g.setFont(new Font("Gungsuh", Font.BOLD, 20));
g.drawString(sb.toString(), 15, 20);
System.out.println(st+"=====================");
return st.toString();
}
private static void drawDisturb(Graphics g) {
// TODO Auto-generated method stub
g.setColor(Color.blue);
for (int i = 0; i < 2 * (WIDTH + HEIGHT); i++) {
int x1 = rd.nextInt(WIDTH - 10);
int y1 = rd.nextInt(HEIGHT - 10);
/*
* int x2 = rd.nextInt(WIDTH); int y2 = rd.nextInt(HEIGHT);
*/
// /g.drawLine(x1+5, y1+5, x2-5, y2-5);
g.setColor(getRandomColor(1, 255));
g.drawOval(x1 + 5, y1 + 5, 1, 1);
}
}
private static void drawBorder(Graphics g) {
// TODO Auto-generated method stub
g.setColor(Color.yellow);
g.drawRect(0, 0, WIDTH - 2, HEIGHT - 2);
}
private static void drawBackground(Graphics g) {
// TODO Auto-generated method stub
g.setColor(getRandomColor(100, 255));
g.fillRect(0, 0, WIDTH, HEIGHT);
}
// 生成随机图片颜色
private static Color getRandomColor(int fc, int bc) {
Random random = new Random();
if (fc > 255) {
fc = 255;
}
if (bc > 255) {
bc = 255;
}
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}
}
servlet代码
package www.csdn.net.news.servlet;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import www.csdn.net.news.util.RandomImage;
public class ImageServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("imgservlet第一次被执行");
// 通知浏览器以图片的方式打开
response.setContentType("image/jpeg");
// 设置浏览器不要缓存
response.setIntHeader("expires", 0);
response.setHeader("cache-control", "no-cache");
response.setHeader("pragma", "no-cache");
System.out.println("imgservlet第二次被执行");
ImageIO.write(RandomImage.creatImage(request.getSession()), "jpeg", response.getOutputStream());
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
jsp代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>用户登录界面</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript" src="../js/jquery-2.0.3.js"></script>
<script type="text/javascript" src="./js/getXmlRequest.js"></script>
<script type="text/javascript" src="./js/login.js"></script>
</head>
<body>
<div align="center">
<div align="center">
<form action="./login.do" method="post">
<table border="1px" cellspacing="0" cellpadding="0">
<tr>
<td>用户名</td>
<td><input type="text" id="name" name="name" value=""></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" id="pass" name="pass" value=""></td>
</tr>
<tr>
<td>身份</td>
<td><input type="radio" name="permission" value="admin"
checked="checked" />管理员<input type="radio" name="permission"
value="oper" />发布员</td>
</tr>
<tr>
<td>验证码</td>
<td><input type="text" id="inputCheck" name="inputCheck"
value=""></td>
</tr>
<tr>
<td colspan="2" align="center"><img alt="验证码信息" id="code"
src="./creatImage.do" /></td>
</tr>
<tr>
<td colspan="3" align="center"><input type="submit"
value="登录" id="login"> <input type="hidden" name="oper"
value="login" /></td>
</tr>
<tr>
<td colspan="3"><span id="errorMessage" style="font-size: 12px;color: red;"></span></td>
</tr>
</table>
</form>
</div>
</div>
</body>
</html>
web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>newsManager</display-name>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>www.csdn.net.news.servlet.LoginServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>ImageServlet</servlet-name>
<servlet-class>www.csdn.net.news.servlet.ImageServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>NewsMainServlet</servlet-name>
<servlet-class>www.csdn.net.news.servlet.NewsMainServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ImageServlet</servlet-name>
<url-pattern>/creatImage.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>NewsMainServlet</servlet-name>
<url-pattern>/initData.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
分享到:
相关推荐
fireFOX 支持java功能版本,可替代IE浏览器,浏览JAVA网站。
Firefox 52.0.2 渗透便携版 90SEC beta8 含多个文件 Firefox 52.0.2 渗透便携版 90SEC beta8 Firefox 52.0.2 渗透便携版 90SEC beta8 Firefox 52.0.2 渗透便携版 90SEC beta8 Firefox 52.0.2 渗透便携版 90SEC beta8...
JSP实现的图片验证码, 验证码JSP实现 .
火狐浏览器中文版Firefox Setup 99.0.1.exe 适用于Windows Arm64系统
火狐浏览器 59 版本,firefox 59版本,直接点击安装。
嵌套浏览器,火狐内核,java实现,展示效果非常漂亮。程序需要maven下载必要包,如果下载不下来,可以配置阿里代码库或代码中国代码库进行尝试
firefox_52.3.0esr+build2-0kord1_arm64.deb, firefox_52.3.0esr+build2-0kord1_armhf.deb, firefox_75.0+build3-0kylin1_amd64.deb, firefox_75.0+build3-0kylin1_arm64.deb, firefox_75.0+build3-0kylin1_...
Firefox33和selenium-java-2.44
火狐最新版firefox25
firefox 最新版3.6 带firbug最新版firefox 最新版3.6 带firbug最新版firefox 最新版3.6 带firbug最新版firefox 最新版3.6 带firbug最新版firefox 最新版3.6 带firbug最新版firefox 最新版3.6 带firbug最新版firefox ...
Firefox填写表单扩展 安装方法很简单,直接拖拽到火狐浏览器窗口中然后根据提示操作即可。 随时关注最新版: http://code.google.com/p/ffextension/downloads 火狐官方下载地址: ...
Firefox 29 - 完整包,下载后直接就能用,新手或懒得折腾的直接下载这个就行了 全新的重要自定义模式可轻松个性化您的Web体验,以访问您最常用的功能 Firefox的右上角有一个易于访问的新菜单,其中包含流行的...
firefox52.0.2最新渗透便携版,打开解压就可以使用,包含了几乎所有的渗透测试插件 Firefox是一一个出自Mozilla组织的流行的Web浏览器。Firefox的流行并不仅仅是因为它是一-个好的浏览器,而且它能够支持插件进而...
Firefox英文版(最新版)
火狐浏览器Firefox 49.0 渗透插件集成版(2018版),集成最新渗透插件
渗透测试人员人人都该用的单兵装备之一,集成工具的火狐浏览器
解压后可用,资源全名:Firefox Setup 45.0.2.exe
火狐浏览器49.0版是一款功能强大的浏览器软件,具有高速浏览和安全浏览等功能特色。FireFox 49版本安装包,可以自适应调节分辨率。
火狐浏览器简体中文版Firefox (firefox-99.0.1.tar.bz2),适用于Linux 64-bit
firefox插件的安装与更新,是用eio编写的,需要你下载永中office