This Java Captcha Example demonstrates you how to develop a captcha Servlet and use in your Struts 2 application.
This Java Captcha Example demonstrates you how to develop a captcha Servlet and use in your Struts 2 application.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(); Hashtablemap = 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 :
Ads