//定义生成验证码图片的Servlet:
import
java.awt.Color;
import
java.awt.Graphics2D;
import
java.awt.image.BufferedImage;
import
java.io.IOException;
import
java.io.OutputStream;
import
javax.servlet.ServletException;
import
javax.servlet.http.HttpServlet;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
com.sun.image.codec.jpeg.JPEGCodec;
import
com.sun.image.codec.jpeg.JPEGEncodeParam;
import
com.sun.image.codec.jpeg.JPEGImageEncoder;
publicclass
CreateImageServlet
extends
HttpServlet {
publicvoid
doGet(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
//
取消缓存,否则没有单击后更新不了图片
response.setHeader(
"cache-control"
,
"no-cache"
);
response.setContentType(
"image/jpeg"
);
int
width=50;
int
height=30;
BufferedImage bi=
new
BufferedImage(width,height,BufferedImage.
TYPE_INT_RGB
);
Graphics2D g=bi.createGraphics();
g.setBackground(Color.
YELLOW
);
g.clearRect(0,0,width, height);
g.setColor(Color.
BLACK
);
g.drawString(getRandomString(request), 5, 20);
g.dispose();
bi.flush();
//
设定
jpg
格式解码
OutputStream outPut=response.getOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outPut);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodePara m(bi);
param.setQuality(1.0f,
false
);
encoder.setJPEGEncodeParam(param);
try
{
encoder.encode(bi);
}
catch
(IOException e) {
//
TODO
Auto-generated catch block
e.printStackTrace();
}
System.
out
.println(
"image runed ..."
);
}
publicvoid
doPost(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
this
.doGet(request, response);
}
//
随机生成的四位数的验证码
private
String getRandomString(HttpServletRequest request){
int
ranNum=(
int
)(Math.random()*9000)+1000;
//
放置进
session
request.getSession().setAttribute(
"ranNum"
, ranNum+
""
);
return
ranNum+
""
;
}
}
//
生成执行注册或者登陆的
JSP
页面
-----------------------------------
<%@
page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
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(obj){
obj.src=
"servlet/CreateImageServlet"
;
}
function
confDialog(obj){
if
(confirm(
"if yes or no"
)){
obj.href=
"a.jsp"
;
}
}
function
hrefuri(){
location.href=
"a.jsp"
;
}
</
script
>
<
base
href="<%=basePath%>">
<
title
>
My JSP 'index.jsp' starting page
</
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">
-->
</
head
>
<
body
>
This is my JSP page.
<
br
>
<
form
action="<%=request.getContextPath() %>/servlet/CheckLog" method="post">
<
img
alt="" src="servlet/CreateImageServlet" onclick="changeImage(this)">
<
input
type="text" name="checkText" >
<
input
type="submit" value="submit" />
</
form
>
</
body
>
</
html
>
//生成验证登陆的Servlet:------------------------------------------
import
java.io.IOException;
import
java.io.PrintWriter;
import
javax.servlet.ServletException;
import
javax.servlet.http.HttpServlet;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
publicclass
CheckLog
extends
HttpServlet {
publicvoid
doGet(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
this
.doPost(request, response);
}
publicvoid
doPost(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
//
获取输入图片
String submitStr=request.getParameter(
"checkText"
);
//
获取放置在
session
中的生成代码
String checkStr=request.getSession().getAttribute(
"ranNum"
).toString();
//
验证
if
(checkStr.equals(submitStr)){
System.
out
.println(
"Success!!!"
);
}
else
{
System.
out
.println(
"Failed!!!"
);
}
}
}