1、创建一个servlet取名为LoginServlet,将url mappings设置成"/servlet/LogiServlet"
2、在web.xml文件中加入
<servlet>
<servlet-name>ImageServlet</servlet-name>
<servlet-class>com.test.oa.web.login.action.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ImageServlet</servlet-name>
<url-pattern>/servlet/LoginServlet</url-pattern>
</servlet-mapping>
3、在loginservlet中做如下处理:
@WebServlet("/servlet/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public LoginServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
BufferedImage img = new BufferedImage(68, 22, BufferedImage.TYPE_INT_RGB);
//得到该图片的绘图对象
Graphics g = img.getGraphics();
Random r = new Random();
Color c = new Color(200,150,225);
g.setColor(c);
//填充整个图片的颜色
g.fillRect(0, 0, 68, 22);
//向图片中输出数字和字母
StringBuffer sb = new StringBuffer();
char[] ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
int index,len = ch.length;
for (int i = 0; i < 4; i++) {
index = r.nextInt(len);
g.setColor(new Color(r.nextInt(88),r.nextInt(188),r.nextInt(225)));
g.setFont(new Font("Arial",Font.BOLD | Font.ITALIC,22));//输出的字体和大小
g.drawString("" + ch[index], (i * 15)+3, 18);//写什么数字,在图片的什么位置画
sb.append(ch[index]);
}
request.getSession().setAttribute("piccode", sb.toString());
ImageIO.write(img, "JPG", response.getOutputStream());
}
}
在jsp文件上加入
<tr><td class="left">验 证 码:</td>
<td class="right"><input type="text" id="verifycode" name="verifycode" />
<img alt="验证码" id="safecode" src="<%=request.getContextPath()%>/servlet/LoginServlet" />
</td>
</tr>
重载验证码:
//重载验证码
function reloadVerifyCode(){
var timenow = new Date().getTime();
document.getElementById("safecode").src = "<%=request.getContextPath()%>/servlet/LoginServlet?d="+timenow;
}