我在company项目的com包下建了个 PictureCheckCode (用来生成验证码的)类
然后在 根目录建立了个login.jsp页面在下面的配置中login.jsp能过正常显示验证码图片
现在我把login.jsp移动到根目录的admin目录下了,验证码无法显示了应该怎么修改 下面的配置啊?<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
xmlns="http://java.sun.com/xml/ns/j2ee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <display-name>FCKeditor.Java Sample Web Application</display-name>
<description>FCKeditor.Java Sample Web Application</description> <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>PictureCheckCode</servlet-name>
    <servlet-class>com.PictureCheckCode</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>PictureCheckCode</servlet-name>
    <url-pattern>PictureCheckCode</url-pattern>

</servlet-mapping>


  
  

</web-app>

解决方案 »

  1.   

    没把关键部分发出来啊LZ
    login.jsp能过正常显示验证码图片
    login.jsp引用的文件
    login.jsp引用验证图片的连接没发出来啊
      

  2.   

    显示验证码的文件如下<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>英文、数字和中文混合的彩色验证码</title>
    <link href="Css/style.css" rel="stylesheet">
    <script language="javascript">
    function checkform(myform){
    for(i=0;i<myform.length;i++){
    if(myform.elements[i].value==""){
    alert(myform.elements[i].title+"不能为空!");
    myform.elements[i].focus();
    return false;
    }
    }
    } function myReload(){
      //document.getElementById("createCheckCode").src="PictureCheckCode";
    document.getElementById("createCheckCode").src=document.getElementById("createCheckCode").src+"?nocache="+new Date().getTime();
     }
    </script>
    </head><body>
    <table width="613" height="434" border="0" align="center" cellpadding="0" cellspacing="0" background="images/loginBg.jpg">
      <tr>
        <td width="83" height="124" valign="top">&nbsp;</td>
        <td width="418" valign="top">&nbsp;</td>
        <td width="112" valign="top">&nbsp;</td>
      </tr>
      <form name="form1" method="post" action="deal.jsp" onSubmit="return checkform(form1)">
      <tr>
        <td height="161" valign="top">&nbsp;</td>
        <td align="center" valign="top"><table width="90%" height="141" border="0" cellpadding="0" cellspacing="0">
      <tr>
        <td width="23%" align="center">用户名:</td>
        <td colspan="2">
          <input name="username" type="text" id="username" size="30" title="用户名"></td>
      </tr>
      <tr>
        <td align="center">密&nbsp;&nbsp;码:</td>
        <td colspan="2"><input name="pwd" type="password" id="pwd" size="30" title="密码"></td>
      </tr>
      <tr>
        <td align="center">验证码:</td>
        <td width="18%"><input name="checkCode" type="text" id="checkCode" title="验证码区分大小写" size="8" maxlength="4"></td>
        <td width="59%" style="padding-top:4px"><img src="PictureCheckCode" id="createCheckCode"><a href="#" onClick="myReload()">&nbsp;看不清?换一个</a></td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td colspan="2"><input name="Submit" type="submit" class="btn_bg" value="登录">
          &nbsp;
          <input name="Submit2" type="reset" class="btn_bg" value="重置"></td>
      </tr>
    </table>

    </td>
        <td valign="top">&nbsp;</td>
      </tr>
    </form>
      <tr>
        <td valign="top">&nbsp;</td>
        <td valign="top">&nbsp;</td>
        <td valign="top">&nbsp;</td>
      </tr>
    </table>
    </body>
    </html>PictureCheckCode 的代码如下:package com;
    import java.awt.*;
    import java.awt.geom.*;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.util.Random;import javax.imageio.ImageIO;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;public class PictureCheckCode extends HttpServlet {
    public PictureCheckCode() {
    super();
    } public void destroy() {
    super.destroy(); 
    } public void init() throws ServletException {
    super.init();
    } // 获取随机颜色
    public Color getRandColor(int s, int e) {
    Random random = new Random();
    if (s > 255) s = 255;
    if (e > 255) e = 255;
    int r = s + random.nextInt(e - s); //随机生成RGB颜色中的r值
    int g = s + random.nextInt(e - s); //随机生成RGB颜色中的g值
    int b = s + random.nextInt(e - s); //随机生成RGB颜色中的b值
    return new Color(r, g, b);
    } public void service(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    response.setHeader("Pragma", "No-cache");
    response.setHeader("Cache-Control", "No-cache");
    response.setDateHeader("Expires", 0);
    // 指定生成的响应是图片
    response.setContentType("image/jpeg");
    int width = 86;
    int height = 22;
    BufferedImage image = new BufferedImage(width, height,
    BufferedImage.TYPE_INT_RGB);
    Graphics g = image.getGraphics();
    Graphics2D g2d = (Graphics2D) g;
    Random random = new Random();
    Font mFont = new Font("黑体", Font.BOLD, 17);
    g.setColor(getRandColor(200, 250));
    g.fillRect(0, 0, width, height);
    g.setFont(mFont);
    g.setColor(getRandColor(180, 200));
    // 画随机的线条
    for (int i = 0; i < 100; i++) {
    int x = random.nextInt(width - 1);
    int y = random.nextInt(height - 1);
    int x1 = random.nextInt(6) + 1;
    int y1 = random.nextInt(12) + 1;
    BasicStroke bs = new BasicStroke(2f, BasicStroke.CAP_BUTT,
    BasicStroke.JOIN_BEVEL);
    Line2D line = new Line2D.Double(x, y, x + x1, y + y1);
    g2d.setStroke(bs);
    g2d.draw(line);
    }
    String sRand = "";
    // 输出随机的验证文字
    String ctmp = "";
    int itmp = 0;
    for (int i = 0; i < 4; i++) {
    //random = new Random(new java.util.Date().getTime() + i);
    switch (random.nextInt(4)) {
    case 1:
    itmp = random.nextInt(26) + 65; // 生成A~Z的字母
    ctmp = String.valueOf((char) itmp);
    break;
    case 2: // 生成汉字
    String[] rBase = { "0", "1", "2", "3", "4", "5", "6", "7", "8",
    "9", "a", "b", "c", "d", "e", "f" };
    // 生成第1位的区码
    int r1 = random.nextInt(3) + 11; //生成11到14之间的随机数
    String str_r1 = rBase[r1];
    // 生成第2位的区码
    int r2;
    if (r1 == 13) {
    r2 = random.nextInt(7); //生成0到7之间的随机数
    } else {
    r2 = random.nextInt(16); //生成0到16之间的随机数
    }
    String str_r2 = rBase[r2];
    // 生成第1位的位码
    int r3 = random.nextInt(6) + 10; //生成10到16之间的随机数
    String str_r3 = rBase[r3];
    // 生成第2位的位码
    int r4;
    if (r3 == 10) {
    r4 = random.nextInt(15) + 1; //生成1到16之间的随机数
    } else if (r3 == 15) {
    r4 = random.nextInt(15); //生成0到15之间的随机数
    } else {
    r4 = random.nextInt(16); //生成0到16之间的随机数
    }
    String str_r4 = rBase[r4];
    System.out.println(str_r1 + str_r2 + str_r3 + str_r4);
    // 将生成机内码转换为汉字
    byte[] bytes = new byte[2];
    //将生成的区码保存到字节数组的第1个元素中
    String str_r12 = str_r1 + str_r2;
    int tempLow = Integer.parseInt(str_r12, 16);
    bytes[0] = (byte) tempLow;
    //将生成的位码保存到字节数组的第2个元素中
    String str_r34 = str_r3 + str_r4;
    int tempHigh = Integer.parseInt(str_r34, 16);
    bytes[1] = (byte) tempHigh;

    ctmp = new String(bytes); //根据字节数组生成汉字
    // System.out.println("生成汉字:" + ctmp);
    break;
    default:
    itmp = random.nextInt(10) + 48; // 生成0~9的数字
    ctmp = String.valueOf((char) itmp);
    break;
    }
    sRand += ctmp;
    Color color = new Color(20 + random.nextInt(110), 20 + random
    .nextInt(110), 20 + random.nextInt(110));
    g.setColor(color);
    /** **随机缩放文字并将文字旋转指定角度* */
    // 将文字旋转指定角度
    Graphics2D g2d_word = (Graphics2D) g;
    AffineTransform trans = new AffineTransform();
    trans.rotate(random.nextInt(45) * 3.14 / 180, 15 * i + 8, 7);
    // 缩放文字
    float scaleSize = random.nextFloat() +0.8f;
    if (scaleSize > 1f) scaleSize = 1f;
    trans.scale(scaleSize, scaleSize);
    g2d_word.setTransform(trans);
    /** ********************* */
    g.drawString(ctmp, 15 * i + 18, 14); }
    // 将生成的验证码保存到Session中
    HttpSession session = request.getSession(true);
    session.setAttribute("randCheckCode", sRand);
    g.dispose();
    ImageIO.write(image, "JPEG", response.getOutputStream());
    }}
      

  3.   

    <servlet-mapping>
        <servlet-name>PictureCheckCode</servlet-name>
        <url-pattern>PictureCheckCode</url-pattern>  
    </servlet-mapping>//貌似有问题应该是这样的
    <servlet-mapping>
        <servlet-name>PictureCheckCode</servlet-name>
        <url-pattern>/PictureCheckCode</url-pattern>  
    </servlet-mapping>好像差个/
      

  4.   


    试下看看
    src="<%=request.getContextPath() %>/PictureCheckCode"
      

  5.   

    我是只的这里
    ").src="<%=request.getContextPath() %>/PictureCheckCode"+"?nocache="+new Date().getTime();
      

  6.   

    <servlet>
            <description></description>
        <display-name></display-name>
        <servlet-name>PictureCheckCode</servlet-name>
        <servlet-class>com.PictureCheckCode</servlet-class>
        </servlet>    <servlet-mapping>
        <servlet-name>PictureCheckCode</servlet-name>
        <url-pattern>/valiCOde.jsp</url-pattern>//这里标签内写上显示验证码的jsp,这样就会自动显示验证码了
            //注意路径哦,这里是valiCOde.jsp是在webroot下的,如果有个valiCOde.jsp放在webroot下的admin文件
             //夹内,则为  /admin/valiCOde.jsp  。(ps : valiCOde.jsp 只要有page指令就可以了)
        </servlet-mapping>
      

  7.   

    楼主可以这样试试:
    首先:
    <servlet-mapping>
        <servlet-name>PictureCheckCode</servlet-name>
        <url-pattern>PictureCheckCode</url-pattern>
    </servlet-mapping>
    中的url-pattern改成:
    /PictureCheckCode
    然后:
    将<img src="PictureCheckCode" id="createCheckCode"><a href="#" onClick="myReload()">
    中的src改成:
    src="../PictureCheckCode"
    这样就应该没问题了~~
      

  8.   

    <servlet-mapping>
        <servlet-name>PictureCheckCode</servlet-name>
        <url-pattern>PictureCheckCode</url-pattern>
    </servlet-mapping>
    应该改为:    
    <servlet-mapping>
        <servlet-name>PictureCheckCode</servlet-name>
        <url-pattern>/PictureCheckCode</url-pattern>
    </servlet-mapping>