Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Turn your jsp into a servlet!</p> <p>A jsp is a good choice to create markup files, which don't break if you add unnecessary whitespace inside your file.</p> <p>Your captcha code works without any change inside a servlet's doGet(...) method.</p> <pre><code>package test.captcha; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.OutputStream; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class CaptchaServlet extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("image/jpg"); /* * Define number characters contains the captcha image, declare global */ int iTotalChars = 6; /* * Size image iHeight and iWidth, declare globl */ int iHeight = 40; int iWidth = 150; /* * font style */ Font fntStyle1 = new Font("Arial", Font.BOLD, 30); Font fntStyle2 = new Font("Verdana", Font.BOLD, 20); /* * Possible random characters in the image */ Random randChars = new Random(); String sImageCode = (Long.toString(Math.abs(randChars.nextLong()), 36)).substring(0, iTotalChars); /* * BufferedImage is used to create a create new image */ /* * TYPE_INT_RGB - does not support transpatency, TYPE_INT_ARGB - support transpatency */ BufferedImage biImage = new BufferedImage(iWidth, iHeight, BufferedImage.TYPE_INT_RGB); Graphics2D g2dImage = (Graphics2D) biImage.getGraphics(); // Draw background rectangle and noisey filled round rectangles int iCircle = 15; //g2dImage.fillRect(0, 0, iWidth, iHeight); for (int i = 0; i &lt; iCircle; i++) { g2dImage.setColor(new Color(randChars.nextInt(255), randChars.nextInt(255), randChars.nextInt(255))); int iRadius = (int) (Math.random() * iHeight / 2.0); int iX = (int) (Math.random() * iWidth - iRadius); int iY = (int) (Math.random() * iHeight - iRadius); //g2dImage.fillRoundRect(iX, iY, iRadius * 2, iRadius * 2,100,100); } g2dImage.setFont(fntStyle1); for (int i = 0; i &lt; iTotalChars; i++) { g2dImage.setColor(new Color(randChars.nextInt(255), randChars.nextInt(255), randChars.nextInt(255))); if (i % 2 == 0) { g2dImage.drawString(sImageCode.substring(i, i + 1), 25 * i, 24); } else { g2dImage.drawString(sImageCode.substring(i, i + 1), 25 * i, 35); } } /* * create jpeg image and display on the screen */ OutputStream osImage = response.getOutputStream(); ImageIO.write(biImage, "jpeg", osImage); //osImage.close(); /* * Dispose function is used destory an image object */ g2dImage.dispose(); HttpSession session = request.getSession(); session.setAttribute("dns_security_code", sImageCode); //System.out.println("Captcha Page :"+session.getAttribute("dns_security_code")); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } } </code></pre> <p>create if not exist a web application descriptor: /WEB-INF/web.xml</p> <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"&gt; &lt;servlet&gt; &lt;servlet-name&gt;CaptchaServlet&lt;/servlet-name&gt; &lt;servlet-class&gt;test.captcha.CaptchaServlet&lt;/servlet-class&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;CaptchaServlet&lt;/servlet-name&gt; &lt;url-pattern&gt;/captcha-image.jpg&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; &lt;/web-app&gt; </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload