实现普通的验证码
---使用Tomcat7.0和MyEclipse实现
一开始一验证码不显示,折腾好久才搞好,发现我的MyEclipse版本是6.0,把jdk版本更换为1.8,编译版本改为5.0就好了。。。最后下载了新的MyEclipse10.0后没问题了,估计是版本不一直的兼容性问题
JDK更改步骤:windos-->perference-->InstalJREs-->右边的ADD选择下载好的版本更换即可
Compiler更改步骤:windos-->perference-->complier-->JDK compiler选择5.0即可
1--jsp部分
<body>
<h1>验证码</h1>
<form name="tijiao" action="<%=request.getContextPath() %>/servlet/LoginServlet" method="get">
验证码:<input type="text" name="checkcode"/>
<img alt="验证码" id="imagecode" src="<%=request.getContextPath() %>/servlet/ImageServlet" />
<a href="javascript:reload();">看不清</a> <br>
<input type="submit" value="确认"/>
</form>
</body>
2--Servlet部分
2.1--图片部分
/*---一开始验证码一直不显示,程序检查无错误,最终自己好了,确定是MyEclipse的问题,决定更换版本解决
*
* */
package com.servlet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ImageServlet extends HttpServlet {
public void doGet(HttpServletRequest request,HttpServletResponse response){
//图片缓存,设置宽高
BufferedImage bi = new BufferedImage(68,22,BufferedImage.TYPE_INT_RGB);
Graphics g = bi.getGraphics();
Color c = new Color(200,150,255);//设置背景色
g.setColor(c);
g.fillRect(0, 0, 68, 22);//绘图的坐标
char[] ch="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
Random r = new Random();
int len=ch.length,index;
StringBuffer sb = new StringBuffer();
for(int i=0;i<4;i++){
index = r.nextInt(len);
g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(255)));
g.drawString(ch[index]+"", (i*15)+3, 18);
sb.append(ch[index]);
}
request.getSession().setAttribute("piccode",sb.toString());
try {//ImageIO写图片
ImageIO.write(bi, "JPG", response.getOutputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("绘图成功。。。");
}
}
2.2--登录验证部分
package com.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;
public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
String checkcode = request.getParameter("checkcode");
checkcode = checkcode.toUpperCase();//换成大写
out.println(checkcode.toUpperCase());//在此处输出的是大写,可是checkcode的值没变仍然是小写
String piccode = (String)request.getSession().getAttribute("piccode");
if(checkcode.equals(piccode)){
out.println("验证码输入正确"+checkcode.toUpperCase());
}else
out.println("验证码输入错误"+checkcode.toUpperCase());
out.flush();
out.close();
}
}
3--配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
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_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 配置Servlet -->
<servlet>
<servlet-name>imageServlet</servlet-name>
<servlet-class>com.servlet.ImageServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>ImageServlet</servlet-name>
<servlet-class>servlet.ImageServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ImageServlet</servlet-name>
<url-pattern>/servlet/ImageServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/servlet/LoginServlet</url-pattern>
</servlet-mapping>
</web-app>