我有2个jsp页面第一个是image.jsp
<%@   page  import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" pageEncoding="gb2312" contentType="text/html;charset=gbk" %>
<%
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 'MyJsp.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">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->  </head>
  
  <body>
    <%!Color getRandColor(int fc, int bc) {
  Random random = new Random();
  if (fc > 255)
   fc = 255;
  if (bc > 255)
   bc = 255;
  int r = fc + random.nextInt(bc - fc);
  int g = fc + random.nextInt(bc - fc);
  int b = fc + random.nextInt(bc - fc);
  return new Color(r, g, b);
 }%>
<%
 //out.clear();//这句针对resin服务器(如果不加则图片显示不出来),如果是tomacat可以不要这句   
 response.setHeader("Pragma", "No-cache");
 response.setHeader("Cache-Control", "no-cache");
 response.setDateHeader("Expires", 0); int width = 60, height = 20;
 BufferedImage image = new BufferedImage(width, height,
   BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics();
 Random random = new Random(); g.setColor(getRandColor(200, 250));
 g.fillRect(0, 0, width, height); g.setFont(new Font("Times New Roman", Font.PLAIN, 18)); g.setColor(getRandColor(160, 200));
 for (int i = 0; i < 155; i++) {
  int x = random.nextInt(width);
  int y = random.nextInt(height);
  int xl = random.nextInt(12);
  int yl = random.nextInt(12);
  g.drawLine(x, y, x + xl, y + yl);
 } String sRand = "";
 for (int i = 0; i < 4; i++) {
  String rand = String.valueOf(random.nextInt(10));
  sRand += rand;  g.setColor(new Color(20 + random.nextInt(110), 20 + random
    .nextInt(110), 20 + random.nextInt(110)));
  g.drawString(rand, 13 * i + 6, 16);
 } //   将验证码存入SESSION   
 session.setAttribute("code", sRand);
 g.dispose();
 ImageIO.write(image, "JPEG", response.getOutputStream());
 out.clear();
%>
  </body>
</html>
第二个页面我调用第一个页面它只是取的验证码图片 我想把图片显示的值取出来 不知道怎么取
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%
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>登陆页面</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">
-->  </head>   
 <body>
   
    <img src="image.jsp" width="60" height="20" id="img"><a href="javascript:location.reload();">看不清,请换张</a>
    <form method="post" action="img.jsp">
    <input type="text" id="text"><br>
    <input type="submit" value="提交">
    </form>
  </body>
</html>

解决方案 »

  1.   

    提交到第三个页面,比方说validate.jsp,这样写
      <form method="post" action="validate.jsp">
      <input type="text" name="text"><br>
      <input type="submit" value="提交">
      </form>然后在validate.jsp中,这样写:
    <%
    request.getParameter("text").trim(); //这是用户输入的验证码
    session.getAttribute("code");        //这是正确的验证码
    //用equals方法比较一下即可知道用户是否输入正确了。
    %>
      

  2.   

    开始的时候 我在img里面写取值 session.getAttribute("code") 他的值开始是空  跟图片对应不起来  再刷新它总是取图片前面的哪个值 
      

  3.   

    是的,不能这样写。如果在生成图片的时候写session,则必须交第三个页面验证输入。