<%@ page language="java" pageEncoding="UTF-8"%><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %><%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
  <head>
    <base href="<%=basePath%>">
    
    <title>login.jsp</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">
-->
 <script type="text/javascript">
           function refreshValidateCode(){
              var _img=document.getElementById("validateCodeImage");
              _img.src="";
              setTimeout(function(){     
              _img.src="validateCodeServlet";              
              },10);
           }           
           function login(){
             alert('${sessionScope.validateCode}');
           }
        
</script>
  </head><body>
<div align="center">
<h1>
后台登录
<h1/>
</div>
<form action="../shopback.do?operate=login" method="post" >
<center>
<table>
<tr>
<td>
用户名:
<input type="text" name="name" />
<br>
</td>
</tr> <tr>
<td>
密码:
<input type="password" name="pass" />
<br>
</td>
</tr>
<tr>
<td>
<span class="myFont">验证码:</span>
<input type="text" name="validCode"
class="loginCheckCodeTextField" id="textfield3">
<img id="validateCodeImage" width="60" height="20" alt="验证码"
src="validateCodeServlet" mce_src="validateCodeServlet" />
<input name="button2" type="button" class="loginBtn" id="button2"
class="loginBtn" value="看不清" onclick=refreshValidateCode();;>
</td>
</tr> </table>
<input name="button" type="submit"
 class="loginBtn" id="button" value="提交" />
</center>
</form>
</body>
</html:html>

解决方案 »

  1.   

    HTTP Status 404 - --------------------------------------------------------------------------------type Status reportmessage description The requested resource () is not available.
    --------------------------------------------------------------------------------Apache Tomcat/6.0.29
      

  2.   

    验证码的java类
    package com.cxz.yanzheng;import java.awt.Color;  
    import java.awt.Font;  
    import java.awt.Graphics2D;  
    import java.awt.image.BufferedImage;  
    import java.io.IOException;  
    import java.util.Random;  
      
    import javax.imageio.ImageIO;  
    import javax.servlet.ServletException;  
    import javax.servlet.ServletOutputStream;  
    import javax.servlet.http.HttpServlet;  
    import javax.servlet.http.HttpServletRequest;  
    import javax.servlet.http.HttpServletResponse;    
    public class ValidateCodeServlet extends HttpServlet {  
     // 常量   
     private static final long serialVersionUID = 1L;  
     // 验证码图片的宽度。   
     private int width = 60;  
     // 验证码图片的高度。   
     private int height = 20;  
     // 验证码字符个数   
     private int codeCount = 4;  
     private int x = 0;  
     // 字体高度   
     private int fontHeight;  
     private int codeY;  
      
     char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',  
       'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',  
       'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',  
       'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',  
       'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };  
     /** 
      * 构造方法 
      */  
     public ValidateCodeServlet() {  
      super();  
     }  
      
     /** 
      * 初始化 
      */  
     public void init() throws ServletException {  
      // 宽度   
      String strWidth = this.getInitParameter("width");  
      // 高度   
      String strHeight = this.getInitParameter("height");  
      // 字符个数   
      String strCodeCount = this.getInitParameter("codeCount");  
      
      // 将配置的信息转换成数值   
      try {  
       if (strWidth != null && strWidth.length() != 0) {  
        width = Integer.parseInt(strWidth);  
       }  
       if (strHeight != null && strHeight.length() != 0) {  
        height = Integer.parseInt(strHeight);  
       }  
       if (strCodeCount != null && strCodeCount.length() != 0) {  
        codeCount = Integer.parseInt(strCodeCount);  
       }  
      } catch (NumberFormatException e) {  
      }  
      
      x = width / (codeCount + 2);  
      fontHeight = height - 1;  
      codeY = height - 4;  
      
     }  
      
     /** 
      * 服务 
      */  
     public void doGet(HttpServletRequest request, HttpServletResponse response)  
       throws ServletException, IOException {  
      doPost(request, response);  
     }  
      
     /** 
      * 服务 
      */  
     public void doPost(HttpServletRequest request, HttpServletResponse response)  
       throws ServletException, IOException {  
      // 定义图像buffer   
      BufferedImage buffImg = new BufferedImage(width, height,  
        BufferedImage.TYPE_INT_RGB);  
      Graphics2D g = buffImg.createGraphics();  
      
      // 创建一个随机数生成器类   
      Random random = new Random();  
      
      // 将图像填充为白色   
      g.setColor(Color.WHITE);  
      g.fillRect(0, 0, width, height);  
      
      // 创建字体,字体的大小应该根据图片的高度来定。   
      Font font = new Font("宋体", Font.BOLD, fontHeight);  
      // 设置字体。   
      g.setFont(font);  
      
      // 画边框。   
      g.setColor(Color.GRAY);  
      g.drawRect(0, 0, width - 1, height - 1);  
      
      // 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。   
      g.setColor(Color.GRAY);  
      for (int i = 0; i < 40; i++) {  
       int x = random.nextInt(width);  
       int y = random.nextInt(height);  
       int xl = random.nextInt(2);  
       int yl = random.nextInt(2);  
       g.drawLine(x, y, x + xl, y + yl);  
      }  
      
      // randomCode用于保存随机产生的验证码,以便用户登录后进行验证。   
      StringBuffer randomCode = new StringBuffer();  
      int red = 0, green = 0, blue = 0;  
      
      // 随机产生codeCount数字的验证码。   
      for (int i = 0; i < codeCount; i++) {  
       // 得到随机产生的验证码数字。   
       String strRand = String.valueOf(codeSequence[random.nextInt(62)]);  
       // 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。   
       red = random.nextInt(127);  
       green = random.nextInt(127);  
       blue = random.nextInt(127);  
      
       // 用随机产生的颜色将验证码绘制到图像中。   
       g.setColor(new Color(red, green, blue));  
       g.drawString(strRand, (i + 1) * x, codeY);  
      
       // 将产生的四个随机数组合在一起。   
       randomCode.append(strRand);  
      }  
      // 将四位数字的验证码保存到Session中。   
      request.getSession().setAttribute("validateCode", randomCode.toString());  
      System.out.println("----------------------->动态生成了验证码:"+randomCode.toString());  
      //session.setAttribute("validateCode", randomCode.toString());   
      
      // 禁止图像缓存。   
      response.setHeader("Pragma", "no-cache");  
      response.setHeader("Cache-Control", "no-cache");  
      response.setDateHeader("Expires", 0);  
      
      response.setContentType("image/jpeg");  
      
      // 将图像输出到Servlet输出流中。   
      ServletOutputStream sos = response.getOutputStream();  
      ImageIO.write(buffImg, "jpeg", sos);  
      sos.flush();  
      sos.close();  
     }  
      
     /** 
      * 销毁 
      */  
     public void destroy() {  
      super.destroy();  
     }  
      
    }  
      

  3.   

    <form action="<%=path%>/shopback.do?operate=login" method="post" >
    改成这样试试
      

  4.   

    我怎么觉得是这个setTimeout用的有点问题啊。。