mcacorner
mcacorner

Reputation: 1274

java servlet session maintain

I have develop servlet for generate Captcha code & add session name code

Generate Capta-code

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);
    }

}

Use Generate capta-image in other servlet

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);
    }

}

Both servlet work fine but I am not getting the session value which is generate in Capta-code servelt(added in servlet)
I am getting session value which is generate in previous capta-image.

See output :
Output - 1

Output - 1

Output - 2

enter image description here

Output - 3

enter image description here

Thank you ..

Upvotes: 2

Views: 1523

Answers (2)

Ravindra Gullapalli
Ravindra Gullapalli

Reputation: 9178

Put the random number generation logic in capta_test servlet and put that number in session. Because you are rendering HTML, the capta servlet will be called after the page load like this and do not invalidate the session.

Random number generator

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();
}
}

Image generator servlet

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);
}

}

Upvotes: 1

Sudhakar
Sudhakar

Reputation: 4873

Your program flow is wrong , the session value is null because the capta_test servlet is called even before the capta servlet.

Have a look at this simple tutorial. Hope this helps you move in the right path

Captcha in JSP and Servlet

Upvotes: 1

Related Questions