Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Servlets javaservlet会话维护_Servlets_Httpsession - Fatal编程技术网

Servlets javaservlet会话维护

Servlets javaservlet会话维护,servlets,httpsession,Servlets,Httpsession,我已经开发了用于生成验证码和添加会话名称的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 L

我已经开发了用于生成验证码和添加会话名称的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;
    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);
    }

}
生成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.*;
导入java.io.*;
导入java.awt.*;
导入java.util.Random;
导入java.awt.image.*;
导入javax.imageio.*;
导入javax.servlet.http.*;
公共类capta扩展HttpServlet
{
最终整数长度=10;
缓冲图像;
随机rnd;
公共无效数据集(HttpServletRequest-req、HttpServletResponse-rep)
{
尝试
{
图像=新的BuffereImage(200,80,BuffereImage.TYPE_INT_RGB);
rnd=新随机数();
rep.setContentType(“图像/jpeg”);
String random_String=getRandomNumbers();
HttpSession ses=req.getSession();
ses.setAttribute(“代码”,随机字符串);
Graphics g=image.getGraphics();
g、 setFont(新字体(“Maiandra GD”,1,30));
g、 setColor(Color.blue);
g、 抽绳(随机抽绳,3,50);
g、 处置();
///就在这里
write(image,“jpg”,rep.getOutputStream());
}
捕获(例外e)
{
}
}
私有字符串getRandomNumbers()
{
StringBuffer str=新的StringBuffer();

对于(int i=1;i您的程序流是错误的,会话值为null,因为在调用capta servlet之前就调用了
capta\u测试servlet

看看这个简单的教程。希望它能帮助你走上正确的道路


将随机数生成逻辑放入capta_testservlet中,并将该数字放入会话。由于您正在呈现HTML,因此页面加载后会像这样调用captaservlet,并且不会使会话无效

随机数生成器

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

为什么您认为/期望验证码图像servlet在验证码测试HTML servlet之前运行?浏览器在获取验证码图像servlet的URL之前,如何在验证码测试HTML servlet生成的HTML输出中的
元素中点击验证码图像servlet?请尝试逻辑思考。顺便说一句,这是一个相当糟糕的问题r captcha algo。除了数字,整个captcha都是静态的。编写一个小型OCR程序来查找数字并集成到一个机器人中非常容易。@BalusC我知道了,但我如何首先运行servlet,即生成图像。@BalusC:我开发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);
}

}