2

Captchaコードを生成し、セッション名コードを追加するためのサーブレットを開発しました

Capta コードを生成する

import javax.servlet.*;
import java.io.*;
import java.awt.*;
import java.util.Random;
import java.awt.image.*;
import javax.imageio.*;
import javax.servlet.http.*;
public class capta extends HttpServlet
{

    final int LEN=10;
    BufferedImage image;
    Random rnd;
    public void doGet(HttpServletRequest req,HttpServletResponse rep)
    {
        try
        {
            image = new BufferedImage(200, 80, BufferedImage.TYPE_INT_RGB); 
            rnd=new Random();
            rep.setContentType("image/jpeg");
            String random_String=getRandomNumbers();
            HttpSession ses=req.getSession();
            ses.setAttribute("code",random_String);
            Graphics g = image.getGraphics();
            g.setFont(new Font("Maiandra GD",1,30));
            g.setColor(Color.blue); 
            g.drawString(random_String,3,50);
            g.dispose();
            /// it was here
            ImageIO.write(image, "jpg", rep.getOutputStream());
        }
        catch(Exception e)
        {
            
        }
    }
    private String getRandomNumbers()
    {
        StringBuffer str=new StringBuffer();
        for(int i=1;i<=9;i++)
        {
            str.append(new Integer(rnd.nextInt(9)).toString()); 
        }
        return str.toString();
    }

    public void doPost(HttpServletRequest req,HttpServletResponse rep)throws ServletException , IOException
    {
        doGet(req,rep);
    }

}

他のサーブレットでキャプチャ イメージの生成を使用する

import javax.servlet.*;
import java.io.*;
import javax.servlet.http.*;
public class capta_test extends HttpServlet
{

    
    public void doGet(HttpServletRequest req,HttpServletResponse rep)
    {
        PrintWriter out=null;
        try
        {
            String input=req.getParameter("txt_capta");
            out=rep.getWriter();            
            rep.setContentType("text/html");
            out.println("<html><head><title>Capta Test</title></head>");    
            out.println("<body>");  
            out.println("<h1> Capta  is Generated </h1>");
            
            out.println("<img src=\"http://localhost:8080/mahesh/capta\" />");
            HttpSession ses=req.getSession();
            
            String original=(String)ses.getAttribute("code");
            if(original!=null)
            {
                out.println("<h1>Original Value "+original+"</h1>");
            }
            ses.invalidate();
            out.println("</body>");     
            out.println("</html>"); 
        }
        catch(Exception e)
        {
            
        }
    }

    public void doPost(HttpServletRequest req,HttpServletResponse rep)throws ServletException , IOException
    {
        doGet(req,rep);
    }

}

両方のサーブレットは正常に動作しますが、Capta-code で生成されたセッション値を取得していません (サーブレットに追加された)
以前の capta-image で生成されたセッション値を取得しています。

出力を参照してください:
出力 - 1

出力 - 1

出力 - 2

ここに画像の説明を入力

出力 - 3

ここに画像の説明を入力

ありがとうございました ..

4

2 に答える 2

1

プログラム フローが間違っていますcapta_test servlet is called even before the capta servlet

この簡単なチュートリアルを見てください。これが正しい道に進むのに役立つことを願っています

JSP およびサーブレットのキャプチャ

于 2013-03-06T14:42:42.870 に答える
1

capta_testサーブレットに乱数生成ロジックを配置し、その数をセッションに配置します。HTML をレンダリングしているため、captaサーブレットはこのようにページの読み込み後に呼び出され、セッションを無効にしません。

乱数発生器

import javax.servlet.*;
import java.io.*;
import javax.servlet.http.*;
public class capta_test extends HttpServlet
{
public void doGet(HttpServletRequest req,HttpServletResponse rep)
{
    PrintWriter out=null;
    try
    {
        String original=getRandomNumbers();
        HttpSession ses=req.getSession(false);
        ses.setAttribute("code",random_String);
        String input=req.getParameter("txt_capta");
        out=rep.getWriter();            
        rep.setContentType("text/html");
        out.println("<html><head><title>Capta Test</title></head>");    
        out.println("<body>");  
        out.println("<h1> Capta  is Generated </h1>");

        out.println("<img src=\"http://localhost:8080/mahesh/capta\" />");
        out.println("<h1>Original Value "+original+"</h1>");
        out.println("</body>");     
        out.println("</html>"); 
    }
    catch(Exception e)
    {

    }
}

public void doPost(HttpServletRequest req,HttpServletResponse rep)throws ServletException , IOException
{
    doGet(req,rep);
}
private String getRandomNumbers()
{
    Random rnd=new Random();
    StringBuffer str=new StringBuffer();
    for(int i=1;i<=9;i++)
    {
        str.append(new Integer(rnd.nextInt(9)).toString()); 
    }
    return str.toString();
}
}

画像生成サーブレット

import javax.servlet.*;
import java.io.*;
import java.awt.*;
import java.util.Random;
import java.awt.image.*;
import javax.imageio.*;
import javax.servlet.http.*;
public class capta extends HttpServlet
{



  final int LEN=10;

BufferedImage image;
public void doGet(HttpServletRequest req,HttpServletResponse rep)
{
    try
    {
        HttpSession ses=req.getSession(false);

        String random_String=(String)ses.getAttribute("code");
        image = new BufferedImage(200, 80, BufferedImage.TYPE_INT_RGB); 
        rep.setContentType("image/jpeg");
        Graphics g = image.getGraphics();
        g.setFont(new Font("Maiandra GD",1,30));
        g.setColor(Color.blue); 
        g.drawString(random_String,3,50);
        g.dispose();
        /// it was here
        ImageIO.write(image, "jpg", rep.getOutputStream());
    }
    catch(Exception e)
    {

    }
}
public void doPost(HttpServletRequest req,HttpServletResponse rep)throws ServletException , IOException
{
    doGet(req,rep);
}

}
于 2013-03-06T16:52:33.840 に答える