请教大家这样的验证码用jsp怎么做啊,这个是php的

解决方案 »

  1.   

    以前是用servlet写 现在不清楚
    Google吧
      

  2.   

    img标签的url里面 指向servlet setvlet响应产生随机字符串 然后制图 然后返回一个文件流
      

  3.   

    jCaptcha 和 patchca :jCaptcha: http://jcaptcha.sourceforge.net/ patchca: http://code.google.com/p/patchca/
      

  4.   

    我这里有以前项目里用过的,与大家分享一下:
    文件上传处理页面:
    <body>
    <%
    // 新建一个SmartUpload对象
    SmartUpload su = new SmartUpload();
    // 上传初始化 
    su.initialize(pageContext);
    // 设定上传限制
    // 1.限制每个上传文件的最大长度。
    // su.setMaxFileSize(10000);
    // 2.限制总上传数据的长度。
    // su.setTotalMaxFileSize(20000);
    // 3.设定允许上传的文件(通过扩展名限制),仅允许doc,txt文件。
    // su.setAllowedFilesList("doc,txt");
    // 4.设定禁止上传的文件(通过扩展名限制),禁止上传带有exe,bat,
    jsp,htm,html扩展名的文件和没有扩展名的文件。
    // su.setDeniedFilesList("exe,bat,jsp,htm,html,,");
    // 上传文件
    su.upload();
    // 将上传文件全部保存到指定目录 
    int count = su.save("/upload");
    out.println(count+"个文件上传成功!<br>");// 利用Request对象获取参数之值
    out.println("TEST="+su.getRequest().getParameter("TEST")
    +"<BR><BR>");// 逐一提取上传文件信息,同时可保存文件。
    for (int i=0;i<su.getFiles().getCount();i++)
    {
    com.jspsmart.upload.File file = su.getFiles().getFile(i);// 若文件不存在则继续
    if (file.isMissing()) continue;// 显示当前文件信息
    out.println("<TABLE BORDER=1>");
    out.println("<TR><TD>表单项名(FieldName)</TD><TD>"
    + file.getFieldName() + "</TD></TR>");
    out.println("<TR><TD>文件长度(Size)</TD><TD>" + 
    file.getSize() + "</TD></TR>");
    out.println("<TR><TD>文件名(FileName)</TD><TD>" 
    + file.getFileName() + "</TD></TR>");
    out.println("<TR><TD>文件扩展名(FileExt)</TD><TD>" 
    + file.getFileExt() + "</TD></TR>");
    out.println("<TR><TD>文件全名(FilePathName)</TD><TD>"
    + file.getFilePathName() + "</TD></TR>");
    out.println("</TABLE><BR>");// 将文件另存
    // file.saveAs("/upload/" + myFile.getFileName());
    // 另存到以WEB应用程序的根目录为文件根目录的目录下
    // file.saveAs("/upload/" + myFile.getFileName(), 
    su.SAVE_VIRTUAL);
    // 另存到操作系统的根目录为文件根目录的目录下
    // file.saveAs("c:\\temp\\" + myFile.getFileName(), 
    su.SAVE_PHYSICAL);}
    %>
    </body>
    提交页面:
    <% 
    request.setCharacterEncoding("utf-8"); 
         //获取Session会话中缓存的验证码
    String rand = (String)session.getAttribute("rand");
    if(rand==null){
       System.out.print("问题出现");
    }
         //获取用户输入的验证码
         String input = request.getParameter("input"); 

       if (rand.equals(input)) {
          out.println("验证成功!!");
    }else{
           out.println("验证失败!!");
    }
    %> 
    显示页面:doTest。jsp
    <html>
    <head>
     <title>登录页面</title>
       <script language="javascript"> 
              /*在文字上使验证码刷新 */
       function reloadImage(url){
          var img = document.getElementById("img");
          img.src = url+"?" + Math.random();
       }
       </script>
    </head>
    <body>
    <form id="dForm" method="post" action="doTest.jsp">
                验证码:
                <input type="text" name="input" size="12" >
    <img id="img" border=0 src="code.jsp" />
    <a href="javaScript:reloadImage('code.jsp');">看不清</a>
    <input type="button" value="看不清"
    onclick="javascript:document.getElementById('img').src='code.jsp?'+Math.random()">

    <br/>
    <input type="submit" value="验证测试">
    </form> </body>
    </html>
      

  5.   

    大致步骤:首先创建了一个内存图像的实例对象,再得到此内存图像的图形上下文对象,接着再用这个上下文对象画背景、边框。接下来,随机生成4个在mapTable[]数组中的字符,组成字符串作为验证字符串,并输出在内存中,为了造成一定的干扰,随机画了10个干扰点,如果要加大干扰效果,可再多画一些点。
        把生成的验证码session对象保存,在接收登录处理页面,对用户输入的验证码和这个session对象中保存的字符串作比较,如果相同则表示验证通过。
      

  6.   


    嗯 patchca 很好用的,又小巧,功能又多,我原来用 patchca 做的:
      

  7.   

    patchca的例子的源码:
    package org.patchca.demo;import java.awt.BorderLayout;
    import java.awt.Button;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Frame;
    import java.awt.Graphics;
    import java.awt.Panel;
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.awt.image.BufferedImage;import org.patchca.color.SingleColorFactory;
    import org.patchca.filter.predefined.CurvesRippleFilterFactory;
    import org.patchca.filter.predefined.DiffuseRippleFilterFactory;
    import org.patchca.filter.predefined.DoubleRippleFilterFactory;
    import org.patchca.filter.predefined.MarbleRippleFilterFactory;
    import org.patchca.filter.predefined.WobbleRippleFilterFactory;
    import org.patchca.service.ConfigurableCaptchaService;public class PatchcaFilterDemo extends Frame implements ActionListener { private static final long serialVersionUID = 6698906953413370733L;
    private BufferedImage img;
    private Button reloadButton;
    private int counter; public PatchcaFilterDemo() {
    super("Patchca demo");
    setSize(200, 140);
        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
        int x = (dim.width-this.getSize().width)/2;
        int y = (dim.height-this.getSize().height)/2;
        setLocation(x, y);
    Panel bottom = new Panel();
    reloadButton = new Button("Next filter");
    reloadButton.addActionListener(this);
    bottom.add(reloadButton);
    add(BorderLayout.SOUTH, bottom);
    addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent we) {
    dispose();
    }
    });
    } public void update(Graphics g) {
    paint(g);
    } public void paint(Graphics g) {
    if (img == null) {
    createImage();
    }
    if (img != null) {
    g.drawImage(img, 20, 30, this);
    }
    } public void createImage() {
    ConfigurableCaptchaService cs = new ConfigurableCaptchaService();
    cs.setColorFactory(new SingleColorFactory(new Color(25, 60, 170)));
    switch (counter % 5) {
    case 0:
    cs.setFilterFactory(new CurvesRippleFilterFactory(cs.getColorFactory()));
    break;
    case 1:
    cs.setFilterFactory(new MarbleRippleFilterFactory());
    break;
    case 2:
    cs.setFilterFactory(new DoubleRippleFilterFactory());
    break;
    case 3:
    cs.setFilterFactory(new WobbleRippleFilterFactory());
    break;
    case 4:
    cs.setFilterFactory(new DiffuseRippleFilterFactory());
    break;
    }
    img = cs.getCaptcha().getImage();
    counter++;
    } @Override
    public void actionPerformed(ActionEvent evt) {
    if (evt.getSource() == reloadButton) {
    createImage();
    repaint();
    } } public static void main(String[] args) {
    PatchcaFilterDemo f = new PatchcaFilterDemo();
    f.setVisible(true);
    }}
      

  8.   

    写了个使用patchca生成验证码,然后进行验证的例子,可以参考一下:http://www.cppblog.com/biao/archive/2010/12/28/137589.html
      

  9.   

    jsp servlet都可以jsp还不用配xml网上搜搜 一大堆  
      

  10.   

    image.jsp<%@ page contentType="image/jpeg" import="java.awt.*, 
    java.awt.image.*,java.util.*,javax.imageio.*" %> 
    <%! 
    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("rand",sRand); 
    g.dispose(); 
    ImageIO.write(image, "JPEG", response.getOutputStream()); 
    %>
      

  11.   

    login.jsp<%@ page contentType="text/html;charset=gbk" %> 
    <%@ page language="java" import="java.sql.*" errorPage="" %> 
    <html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
    <title>用户登录</title> 
    <script language="javascript"> 
    function loadimage(){ 
    document.getElementById("randImage").src = "image.jsp?"+Math.random(); 

    </script> 
    </head> 
    <body> 
    <table width="256" border="0" cellpadding="0" cellspacing="0"> 
    <!--DWLayoutTable--> 
    <form action="validate.jsp" method="post" name="loginForm"> 
    <tr> 
    <td width="118" height="22" valign="middle" align="center"><input type="text" name="rand" size="15"></td> 
    <td width="138" valign="middle" align="center"><img alt="code..." name="randImage" id="randImage" src="image.jsp" width="60" height="20" border="1" align="absmiddle"></td> 
    </tr> 
    <tr> 
    <td height="36" colspan="2" align="center" valign="middle"><a href="javascript:loadimage();"><font class=pt95>看不清点我</font></a></td> 
    </tr> 
    <tr> 
    <td height="36" colspan="2" align="center" valign="middle"><input type="submit" name="login" value="提交"></td> 
    </tr> 
    </form> 
    </table> 
    </body> 
    </html>