我有一个画图的servlet,jsp中如何调用这个servelt呢,
并且如果看不清可以再换一张的功能,主要是后面的这个换的问题。
jsp页面应如何写呢?
我的Servelt为:package com.vogoal.util.img;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;public class RandImgCreater {
    private static final String CODE_LIST = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
    private HttpServletResponse response = null;
    private static final int HEIGHT = 20;
    private static final int FONT_NUM = 4;
    private int width = 0;
    private int iNum = 0;
    private String codeList = "";
    private boolean drawBgFlag = false;
    
    private int rBg = 0;
    private int gBg = 0;
    private int bBg = 0;
    public RandImgCreater(HttpServletResponse response) {
        this.response = response;
        this.width = 13 * FONT_NUM + 12;
        this.iNum = FONT_NUM;
        this.codeList = CODE_LIST;
    }
    
    public RandImgCreater(HttpServletResponse response,int iNum,String codeList) {
        this.response = response;
        this.width = 13 * iNum + 12;
        this.iNum = iNum;
        this.codeList = codeList;        
    }
    
    public String createRandImage(){
        BufferedImage image = new BufferedImage(width, HEIGHT,
                BufferedImage.TYPE_INT_RGB);
        
        Graphics g = image.getGraphics();
        
        Random random = new Random();
        
        if ( drawBgFlag ){
            g.setColor(new Color(rBg,gBg,bBg));
            g.fillRect(0, 0, width, HEIGHT);
        }else{
            g.setColor(getRandColor(200, 250));
            g.fillRect(0, 0, width, HEIGHT);
            
            for (int i = 0; i < 155; i++) {
                g.setColor(getRandColor(140, 200));
                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);
            }
        }
        
        g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
        
        String sRand="";
        for (int i=0;i<iNum;i++){
            int rand=random.nextInt(codeList.length());
            String strRand=codeList.substring(rand,rand+1);
            sRand+=strRand;
            g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
            g.drawString(strRand,13*i+6,16);
        }
        g.dispose();
        try{
            ImageIO.write(image, "JPEG", response.getOutputStream());
        }catch(IOException e){
            
        }
        
        return sRand;
    }
    
    public void setBgColor(int r,int g,int b){
        drawBgFlag = true;
        this.rBg = r;
        this.gBg = g;
        this.bBg = b;
    }
    private 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);
    }
}

解决方案 »

  1.   

    假设你的Servlet完全正确没有错误:web.xml:
    <servlet>
        <servlet-name>validImgServlet</servlet-name>
        <servlet-class>com.vogoal.util.img.RandImgCreater</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>validImgServlet</servlet-name>
        <url-pattern>/validImg</url-pattern>
    </servlet-mapping>页面:
    <img src="/validImg" onclick="this.src = '/validImg' + new Date();" />
      

  2.   

    错了抱歉,
    <img src="/validImg" onclick="this.src = '/validImg?' + new Date();" />
      

  3.   


    <script type="text/javascript">
    function validImg() {
    document.getElementById("img1").src = "/validImg";
    }
    <script >
    <img src="/validImg"  id="img1"  onclick="validImg()" />
      

  4.   

    img 的src连接设置为连接你servlet的路径 就可以了 
    然后 写个javascript代码 当点击刷新的时候 重新设置img 的src为原来那个就可以了!
      

  5.   

    <%@ page language="java" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%> 
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
     
    <html> 
    <head>
    <title>JSP for UserForm form</title>
    </head>
    <body>
    <html:form action="user?mmmm=login"> 
    <br>用户名 : <html:text property="uname"/><html:errors property="uname"/><br/>
    密码 : <html:password property="upassword"/><html:errors property="upassword"/><br/>
    验证码 : <html:text property="yzm"/><html:errors property="yzm"/><img id="aaa" alt="看不清,点击重选一张" src="<%=request.getContextPath() %>/yzm.do"  onclick="f();"><br/>
    <html:submit value="提交"/><html:cancel value="重置"/>
    </html:form>
    </body>
    <script type="text/javascript">
    function f()
    {
    document.all.aaa.src = '<%=request.getContextPath() %>/yzm.do?a='+Math.random();
    }
    function check(){
    var yzm = document.all.yzm.value;
    if(yzm==""){
    alert("验证码不能为空");
    return false;
    }else if(isNaN(yzm)){
    alert("验证码只能是数字呢");
    return false;
    }else if(yzm.length!=4){
      alert("验证码长度不对");
      return false;
    }
    }  
    </script>
    </html>
    这是我做的,可以正常使用
    点击重新获得的时候,要产生一个随机数,不然就直接返回同一张图片
      

  6.   

    验证码,单独一个servlet就可以了,正确配好就是的了