自己写了个验证码,简单来说就是用Graphics画出来,然后在jsp里设置contentType="img/jpeg"这样来实现
现在遇到个问题,有时候我访问这个带有验证码的页面时(该页面里用<img src="xxx.jsp">),它并没有重新加载一张新的验证码,而是从缓存里取,这样我在contentType="img/jpeg"的那个页面里放一个对象到session里的代码就不得执行,那么我访问action时,action那里就得到个空对象,怎么防止他从缓存里取这个图片的//action里的一个方法
public String enter() {

AuthCode ac = (AuthCode)request.getSession().getAttribute("authcode"); /*
 * 检查用户,如果返回空值则表示登录不成功
 */
user = service.login(account.getAccount(), account.getPwd(), identity);
if(user == null) {
addMessage("account", "用户名或密码错误");

} else if(!ac.isSame(code)) {
addMessage("code", "验证码错误");

} else {
session.put(UserType.USER, user);//将帐号保存到session中
setDestination(SUCCESS_URL);
return SUCCESS;
}
return input();
}
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page contentType="img/jpeg"  %>
<%@ page import="javax.imageio.ImageIO"%>
<%@ page import="com.freedom.scss.util.AuthCode" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <body>
    <% 
     AuthCode ac = new AuthCode(); 
     session.setAttribute("authcode", ac);
     ImageIO.write(ac.getImage(), "JPEG", response.getOutputStream()); 
     out.clear(); 
     out = pageContext.pushBody(); 
    %>
  </body>
</html>