This Java Captcha Example demonstrates you how to develop a captcha Servlet and use in your Struts 2 application.
Developing Struts 2
Captcha Application
In this section we are going to develop Captcha Servlet and then use the
same to validate Struts 2 based web applications. We have developed a Servlet
that generates Captcha image.
Let's see how our Captcha application works.
Working of the application
1. Index page
In the index.html we have added a link to captcha.jsp.
User can click on this link to go to the captcha form.
| <html> <head> <title>Capcha Validation</title> <style> a:link{ color:red; text-decoration:underline; } a:visited{ color:red; text-decoration:underline; } a:hover{ color:green; text-decoration:none; } a:active{ color:red; text-decoration:underline; } </style> </head> <body> <table> <tr><td><a href="captcha.jsp">Captcha Application</a></td></tr> </table> </body> </html> |
2. Captcha Page
The GUI of the application consists of Captcha page (captcha.jsp).
The captcha.jsp is used to display the valid code and a text box.
The code :
<s:actionerror />
displays action errors and field validation errors.
The code <s:form
action="doLogin" method="POST"> generates the html form for the application.
The code :
<img src="Captcha.jpg" border="0">
<s:textfield label="Code" name="j_captcha_response" size="20" maxlength="10"/>
The submit button is generated through <s:submit value="Verify" align="center" /> code.
3. Servlet Class
Develop a Servlet class "RoseIndiaCaptcha.java" to create a
Captcha image. Here is the code of RoseIndiaCaptcha.java
Servlet class:
package com.roseindiaCaptcha.servlet;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
import java.awt.*;
import java.util.*;
import java.awt.font.TextAttribute;
public class RoseIndiaCaptcha extends HttpServlet {
private int height=0;
private int width=0;
public static final String CAPTCHA_KEY = "captcha_key_name";
public void init(ServletConfig config) throws ServletException {
super.init(config);
height=Integer.parseInt(getServletConfig().getInitParameter("height"));
width=Integer.parseInt(getServletConfig().getInitParameter("width"));
}
protected void doGet(HttpServletRequest req, HttpServletResponse response)
throws IOException, ServletException {
//Expire response
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Max-Age", 0);
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = image.createGraphics();
Hashtable map = new Hashtable();
Random r = new Random();
String token = Long.toString(Math.abs(r.nextLong()), 36);
String ch = token.substring(0,6);
Color c = new Color(0.6662f, 0.4569f, 0.3232f);
GradientPaint gp = new GradientPaint(30, 30, c, 15, 25, Color.white, true);
graphics2D.setPaint(gp);
Font font=new Font("Verdana", Font.CENTER_BASELINE , 26);
graphics2D.setFont(font);
graphics2D.drawString(ch,2,20);
graphics2D.dispose();
HttpSession session = req.getSession(true);
session.setAttribute(CAPTCHA_KEY,ch);
OutputStream outputStream = response.getOutputStream();
ImageIO.write(image, "jpeg", outputStream);
outputStream.close();
}
}
4.Mapping for Servlet class in web.xml
<servlet>5.Success page
After successful validation page transfer to the "success.page"
| <html> <head> <title>Capcha Validation</title> </head> <body> <table><tr><td><h1>You are Succesfully Validate</h1></td></tr></table> </body> </html> |
6.Developing Action Class
Now let's develop the action class to handle the Captcha validation request.
The code String c= (String)session.getAttribute(RoseIndiaCaptcha.CAPTCHA_KEY) is used to get the Captcha value stored in session and then validate it with the user input. Here is the code of the Action class.
package com.roseindiaCaptcha.action;
import com.opensymphony.xwork2.ActionSupport;
import java.util.Date;
import javax.servlet.http.*;
import javax.servlet.*;
import com.opensymphony.xwork2.ActionContext;
import com.roseindiaCaptcha.servlet.*;
public class CaptchaAction extends ActionSupport {
public String execute() throws Exception {
HttpServletRequest request = (HttpServletRequest)
ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);
Boolean isResponseCorrect = Boolean.FALSE;
javax.servlet.http.HttpSession session = request.getSession();
String parm = request.getParameter("j_captcha_response");
String c= (String)session.getAttribute(RoseIndiaCaptcha.CAPTCHA_KEY) ;
if(!parm.equals(c) ){
addActionError("Invalid Code! Please try again!");
return ERROR;
}else{
return SUCCESS;
}
}
}
7.Configuring action mapping (in struts.xml)
| <action name="doCaptcha" class="com.roseindiaCaptcha.action.CaptchaAction"> <result name="error">captcha.jsp</result> <result>success.jsp</result> </action> |
In the above mapping the action "doCaptcha" is used to validates the user using action class (CaptchaAction.java).
Output :
![]()
If invalid code the error message is display.


After successfully validation message :
![]()
|
Recommend the tutorial |



Ask Questions? Discuss: Java Captcha in Struts 2 Application View All Comments
Post your Comment