今天在学习一次性验证码的时候,发现刚开始打开网页的时候验证码能够加载出来,但是换一张的时候就加载不出来了。
最开始是这样的:
点击换一张后:
可以看到验证码区域的图片加载不出来了。对于我这个菜鸡来说,这个问题真的挺烦人。
后来怎么办呢?办法来了!
首先,我的MyEclipse控制台没有报错,好,那就在浏览器页面右键,点击检查,打开Console,可以看到400报错:
说到这里,可以看到是服务器理解不了,好,那先来看看我的代码
这里是前台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>
<base href="<%=basePath%>">
<title>My JSP 'form.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">
<script type="text/javascript">
function _hyz(){
var img = document.getElementById("imgVerifyCode");
img.src = "/tools/VerifyCodeServlet" + new Date().getTime;
}
</script>
</head>
<!--img的src指向CerifyCodeServlet,需要在web.xml中部署VerfiyCodeServlet -->
<body>
<form action="tools/LoginServlet" method="post">
用户名:<input type="text" name="name" /><br />
密   码:<input type="password" name="pwd" /><br />
验证码:<input type="text" name="verifyCode"><br />
<img src="/tools/VerifyCodeServlet" id="imgVerifyCode"/>
<a href="javascript:_hyz()">换一张</a>
<br/>
<input type="submit" value="提交" />
</form>
</body>
</html>
问题出现在jsp上。jsp哪有问题,看到jsp上的js代码,Date().getTime
,这里是是一个函数,一个带上括号,所以应该改成Date().getTime()
到这里,我又启动tomcat看了看,发现还有问题报错404
继续找问题,发现还是js部分的问题,img的src我是直接字符串相加的,我原本的意思是想跟新时间,不然验证码图片就不刷新,但是我这样直接字符串相加以后就导致原来的地址变了,就会出现找不到的现象。就是这里
如果是想要改变参数的话,不应该直接字符串相加,后面的内容应该以参数的形式呈现,就应该写上?method=
修改完成后再次测试,发现问题已解决
上面的验证码代码在这里,仅供参考。