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



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

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