我有struts2生成验证码的源码
解决方案 »
- 不是说javase是专做桌面软件的吗?还有javaee也可以做C/S的!倒底哪个好用啊?
- 求教session的问题
- jade webservice
- struts 2 怎样判断数据库字段是否为空
- JNDI访问File System错误
- 一般企业开发中hibernate和ibatis哪个用的多?哪个更好?
- 刚学struts,就对userform,晕,请教各位,多谢
- 启动Tomcat时出现这样的提示,具体怎么做?
- 往mysql中插入数据抛出StringIndexOutOfBoundsException,怎么解决
- sql server返回行数好像比预计的少,很急的应用问题,大家帮我看看
- 怎么回事啊?求解?????
- 元方,在么??
package responseDemo;import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//验证码:
public class ResponseDemo2 extends HttpServlet {
public static final int WIDTH=100;
public static final int HEIGHT=25;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
BufferedImage image=new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
Graphics g=image.getGraphics();
//1,設置背景顏色
setBackGround(g);
//2,设置边框
setBorder(g);
//3,画干扰线
drawRandomLine(g);
//4,写随机数
drawRandomNum((Graphics2D) g);
//5,图形写给浏览器
response.setContentType("image/jpeg"); //发头控制浏览器不要缓存
response.setDateHeader("expries", -1);
response.setHeader("cache-contorl","no-cache");
response.setHeader("Pragma","no-cache");
ImageIO.write(image, "jpg", response.getOutputStream());
}
private void setBackGround(Graphics g)
{
g.setColor(Color.WHITE);
g.fillRect(0, 0, WIDTH, HEIGHT);
}
private void setBorder(Graphics g)
{
g.setColor(Color.gray);
g.drawRect(1, 1,WIDTH-2, HEIGHT-2);
}
private void drawRandomLine(Graphics g)
{
g.setColor(Color.gray);
for(int i=0;i<4;i++)
{
int x1=new Random().nextInt(WIDTH);
int y1=new Random().nextInt(HEIGHT);
int x2=new Random().nextInt(WIDTH);
int y2=new Random().nextInt(HEIGHT);
g.drawLine(x1, y1, x2, y2);
}
}
private void drawRandomNum(Graphics2D g)
{
g.setFont(new Font("宋体",Font.BOLD,20));
int x=5;
for(int i=0;i<4;i++)
{
int r=new Random().nextInt(225);
int gr=new Random().nextInt(225);
int b=new Random().nextInt(225);
g.setColor(new Color(r,gr,b));
int degree=new Random().nextInt()%30;
String number=new Random().nextInt(9)+1+"";
g.rotate(degree*Math.PI/180,x,20);
g.drawString(number,x,20);
g.rotate(-degree*Math.PI/180,x,20);
x+=25;
}
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { }}
ResponseDemo2.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>
<script type="text/javascript">
function changeImage(img)
{
img.src=img.src+"?"+new Date().getTime();
}
</script> </head>
<body>
<form action="">
用戶名:<input type="text" name="username"/><br/>
密碼:<input type="password" name="password"/><br/>
認證碼:<input type="text" name="checkcode"/>
<img src="/Week01/servlet/ResponseDemo2" onclick="changeImage(this)" alt="換一張" style="cusor:hand"/><br/>
<input type="submit" value="註冊"/>
</form>
</body>
</html>