| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2140 人关注过本帖
标题:jsp调用servlet验证码问题
只看楼主 加入收藏
abcyjw
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-10-20
收藏
 问题点数:0 回复次数:5 
jsp调用servlet验证码问题
我用serlvet做了一个动态生成验证码的类,请问在jsp表单中怎么调用?
搜索更多相关主题的帖子: jsp 验证 servlet 
2009-12-26 03:22
lampeter123
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:2508
专家分:6424
注 册:2009-1-30
收藏
得分:0 
网上找到的

显示验证码的html页面login.html代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>login.html</title>

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html charset=UTF-8">

<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

</head>

<body>
<center>
<form action="login" method="post">
验证码:<input type="text" name="random"><img src="imgcode">
<br>
<br>
<input type="submit" value="提交">
</form>
</center>
</body>
</html>

动态生成验证码的servlet类RandomCodeServlet.java代码如下:
package iss


import java.awt.Color
import java.awt.Font
import java.awt.Graphics2D
import java.awt.image.BufferedImage
import java.util.Random

import javax.servlet.ServletException
import javax.servlet.ServletOutputStream
import javax.servlet.http.HttpServlet
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
import javax.servlet.http.HttpSession
import javax.imageio.*

public class RandomCodeServlet extends HttpServlet ...{

/** *//**
* Constructor of the object.
*/
public RandomCodeServlet() ...{
super()
}

//验证码图片的宽度
private int width=60
//验证码图片的高度
private int height=20

protected void service(HttpServletRequest request,HttpServletResponse response)
throws ServletException,{
BufferedImage buffImg=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB)
Graphics2D g=buffImg.createGraphics()

//创建一个随机数生成器
Random random=new Random()

g.setColor(Color.WHITE)
g.fillRect(0, 0, width, height)

//创建字体,字体的大小应该根据图片的高度来定
Font font=new Font("Times New Roman",Font.PLAIN,18)
//设置字体
g.setFont(font)

//画边框
g.setColor(Color.BLACK)
g.drawRect(0, 0, width-1, height-1)

//随机产生160条干扰线
g.setColor(Color.GRAY)
for(int i=0i<160i++)...{
int x=random.nextInt(width)
int y=random.nextInt(height)
int x1=random.nextInt(12)
int y1=random.nextInt(12)
g.drawLine(x, y, x+x1, y+y1)
}

//randomCode用于保存随机产生的验证码
StringBuffer randomCode=new StringBuffer()
int red=0,green=0,blue=0

//随机产生4位数字的验证码
for(int i=0i<4i++)...{
//得到随机产生的验证码数字
String strRand=String.valueOf(random.nextInt(10))

//产生随机的颜色分量来构造颜色值
red=random.nextInt(110)
green=random.nextInt(50)
blue=random.nextInt(50)

//用随机产生的颜色将验证码绘制到图像中
g.setColor(new Color(red,green,blue))
g.drawString(strRand, 13*i+6, 16)

randomCode.append(strRand)
}

//将四位数字的验证码保存到session中
HttpSession session=request.getSession()
session.setAttribute("randomCode", randomCode.toString())

//禁止图像缓存
response.setHeader("Pragma", "no-cache")
response.setHeader("Cache-Control", "no-cache")
response.setDateHeader("Expires", 0)

response.setContentType("image/jpeg")
//将图像输出到servlet输出流中
ServletOutputStream sos=response.getOutputStream()
ImageIO.write(buffImg, "jpeg", sos)
sos.close()

}

}

判断验证码是否匹配的LoginServlet.java代码如下:
package iss

import
import

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 LoginServlet extends HttpServlet ...{

/** *//**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException ...{

HttpSession session=request.getSession()
String randomCode=(String)session.getAttribute("randomCode")
if(null==randomCode)...{
response.sendRedirect("login.html")
return
}
String reqRandom=request.getParameter("random")
response.setCharacterEncoding("gbk")
response.setContentType("text/htmlcharset=gb2312")
PrintWriter out = response.getWriter()
if(randomCode.equals(reqRandom))...{
out.println("验证码匹配!")
}else...{
out.println("验证码不匹配!")
}

out.close()
}

}

web.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.
xmlns:xsi="http://www.
xsi:schemaLocation="http://java.
http://java.
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>RandomCodeServlet</servlet-name>
<servlet-class>iss.RandomCodeServlet</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>iss.LoginServlet</servlet-class>
</servlet>


<servlet-mapping>
<servlet-name>RandomCodeServlet</servlet-name>
<url-pattern>/imgcode</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>

你的优秀和我的人生无关!!!!
    
    我要过的,是属于我自己的生活~~~
2009-12-26 08:58
abcyjw
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-10-20
收藏
得分:0 
我也这么做的,但是验证码图片显示不出来,我的代码:
1.web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.
    xmlns:xsi="http://www.
    xsi:schemaLocation="http://java.
    http://java.
   
    <!-- servlet配置信息 -->
    <servlet>
        <servlet-name>YjwServlet</servlet-name>
        <servlet-class>com.servlet.yjw.test.YjwServlet</servlet-class>
        
         <init-param>
              <param-name>width</param-name>
              <param-value>200</param-value>
         </init-param>
         <init-param>
              <param-name>height</param-name>
              <param-value>80</param-value>
         </init-param>
             <init-param>
              <param-name>codeCount</param-name>
              <param-value>5</param-value>
         </init-param>
        
    </servlet>
    <servlet-mapping>
        <servlet-name>YjwServlet</servlet-name>
        <url-pattern>/YjwServlet</url-pattern>
    </servlet-mapping>
   
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

2.YjwServlet.java
package com.servlet.yjw.test;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import
import
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * 生成随机验证码
 * @author yjw
 *
 */

public class YjwServlet extends HttpServlet {
   
    private static final long serialVersionUID = 1L;

    //验证码图片的宽度。
    private int width=60;
    //验证码图片的高度。
    private int height=20;
    //验证码字符个数
    private int codeCount=4;
   
   
    private int x=0;
    //字体高度
    private int fontHeight;   
    private int codeY;
   
    char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
   'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
   'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };


    /**
     * Constructor of the object.
     */
    public YjwServlet() {
        super();
    }

    /**
     * Destruction of the servlet. <br>
     */
    public void destroy() {
        super.destroy(); // Just puts "destroy" string in log
        // Put your code here
    }

    /**
     * The doGet method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to get.
     *
     * @param request the request send by the client to the server
     * @param response the response send by the server to the client
     * @throws ServletException if an error occurred
     * @throws IOException if an error occurred
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

//        response.setContentType("text/html");
//        PrintWriter out = response.getWriter();
//        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
//        out.println("<HTML>");
//        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
//        out.println("  <BODY>");
//        out.print("    This is ");
//        out.print(this.getClass());
//        out.println(", using the GET method");
//        out.println("  </BODY>");
//        out.println("</HTML>");
//        out.flush();
//        out.close();
        request.getRequestDispatcher("index2.jsp").forward(request, response);
    }

    /**
     * The doPost method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to post.
     *
     * @param request the request send by the client to the server
     * @param response the response send by the server to the client
     * @throws ServletException if an error occurred
     * @throws IOException if an error occurred
     */
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

         //定义图像buffer
          BufferedImage buffImg = new BufferedImage(
        width, height,BufferedImage.TYPE_INT_RGB);
          Graphics2D g = buffImg.createGraphics();

          //创建一个随机数生成器类
          Random random = new Random();

          //将图像填充为白色
          g.setColor(Color.WHITE);
          g.fillRect(0, 0, width, height);

          //创建字体,字体的大小应该根据图片的高度来定。
          Font font = new Font("Fixedsys", Font.PLAIN, fontHeight);
          //设置字体。
          g.setFont(font);

          //画边框。
          g.setColor(Color.BLACK);
          g.drawRect(0, 0, width - 1, height - 1);

          //随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。
          g.setColor(Color.BLACK);
          for(int i = 0; i < 160; i++)
          {
           int x = random.nextInt(width);
           int y = random.nextInt(height);
           int xl = random.nextInt(12);
           int yl = random.nextInt(12);
           g.drawLine(x, y, x + xl, y + yl);
          }

          //randomCode用于保存随机产生的验证码,以便用户登录后进行验证。
          StringBuffer randomCode = new StringBuffer();
          int red = 0, green = 0, blue = 0;

          //随机产生codeCount数字的验证码。
          for (int i = 0; i < codeCount; i++) {
           //得到随机产生的验证码数字。
           String strRand = String.valueOf(codeSequence[random.nextInt(36)]);
           //产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
           red = random.nextInt(255);
           green = random.nextInt(255);
           blue = random.nextInt(255);

           //用随机产生的颜色将验证码绘制到图像中。
           g.setColor(new Color(red, green, blue));
           g.drawString(strRand, (i + 1) * x, codeY);

           //将产生的四个随机数组合在一起。
           randomCode.append(strRand);
          }
          // 将四位数字的验证码保存到Session中。
          HttpSession session = request.getSession();
          session.setAttribute("validateCode", randomCode.toString());

          // 禁止图像缓存。
          response.setHeader("Pragma", "no-cache");
          response.setHeader("Cache-Control", "no-cache");
          response.setDateHeader("Expires", 0);

          response.setContentType("image/jpeg");


          //将图像输出到Servlet输出流中。
          ServletOutputStream sos = response.getOutputStream();
          ImageIO.write(buffImg, "jpeg", sos);
          sos.close();
        


    }

    /**
     * Initialization of the servlet. <br>
     *
     * @throws ServletException if an error occurs
     */
    /**
     * 初始化验证图片属性
     */

    public void init() throws ServletException {
         //从web.xml中获取初始信息
         //宽度
      String strWidth=this.getInitParameter("width");
      //高度
      String strHeight=this.getInitParameter("height");
      //字符个数
      String strCodeCount=this.getInitParameter("codeCount");
      
      //将配置的信息转换成数值
      try
      {
       if(strWidth!=null && strWidth.length()!=0)
       {
        width=Integer.parseInt(strWidth);
       }
       if(strHeight!=null && strHeight.length()!=0)
       {
        height=Integer.parseInt(strHeight);
       }
       if(strCodeCount!=null && strCodeCount.length()!=0)
       {
        codeCount=Integer.parseInt(strCodeCount);
       }
      }
      catch(NumberFormatException e)
      {}
      
      x=width/(codeCount+1);
      fontHeight=height-2;
      codeY=height-4;

    }

}
3.index.jsp
<%@ page language="java" contentType="image/jpeg"  pageEncoding="gb2312"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">   
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
  
 
  </head>
  
  
  <body>

  
  <form name="form1">
  
  验证码:<input type="text"><img src="YjwServlet">

  

  
  </form>
   
  </body>
</html>

很急!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2009-12-26 12:49
abcyjw
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-10-20
收藏
得分:0 
很急!!!!!!!!!!!!!!!!
请高手们,帮帮忙
2009-12-26 12:52
abcyjw
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-10-20
收藏
得分:0 
还是很感谢版主,我搞定了,哈哈
2009-12-26 13:03
caomoshijia
Rank: 2
等 级:论坛游民
帖 子:43
专家分:20
注 册:2009-8-8
收藏
得分:0 
关税
2010-08-22 15:31
快速回复:jsp调用servlet验证码问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.099407 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved