梦想年华新闻系统之验证码篇+后台登陆+点击才弹出验证码

59 篇文章 0 订阅

梦想年华新闻系统之验证码篇(包含五个文件
Function.java
VerifyCode.java
VerifyCode.jsp
使用页,处理页)
1.要用到验证码的页

 

验证码:

<input name="VerifyCode" type="text" class="chinese" id="VerifyCode" style="font-size: 12px" size="6"

 

maxlength="6">

<img src="VerifyCode.jsp" οnclick="this.src=&apos;VerifyCode.jsp?aa=&apos;+Math.random()+100" style="cursor: hand">
<!--错误提示-->

 <%=((String)session.getAttribute("error")==null)? "" : (String)session.getAttribute("error")%>

2.处理页

String sCode = Function.CheckReplace(request.getParameter("VerifyCode"));

if(!sCode.equals(session.getAttribute("VerifyCode")))

{

session.setAttribute("error","<li>验证码错误");

response.sendRedirect("index.jsp");//返回登陆页

return;

}

3下面给出源码供学习和研究 VerifyCode.jsp

<meta http-equiv="Content-Type" content="text/html; charset=GB2312">

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.awt.*,java.awt.image.*"%>

<%@ page import="java.util.*,javax.imageio.*,java.io.*"%>

<%@ page import="dreamtime.dreamnews.VerifyCode"%>

 

<%! String sVerifyCode;   //验证码字符串  %>

 

<% //设置页面不缓存

 response.setHeader("Pragma","No-cache");

 response.setHeader("Cache-Control","no-cache");

 response.setDateHeader("Expires", 0);

 response.reset();

 

 try{

  // 将认证码存入SESSION

  //调用 runVerifyCode(int i) ,把i改成所要的验证码位数

  VerifyCode VC = new VerifyCode();

  session.setAttribute("VerifyCode",VC.runVerifyCode(4));

  //session.setMaxInactiveInterval(60);

 

  // 输出图象到页面

  sVerifyCode = (String)session.getAttribute("VerifyCode");

  OutputStream outs = response.getOutputStream();

  ImageIO.write(VC.CreateImage(sVerifyCode),"JPEG",outs);

 }catch(Exception e){

  return;

    }

%>

 

 4.VerifyCode.java

/***************************************************

 * 

 *  源文件名:  VerifyCode.java

 *  功    能: 梦想年华新闻系统 - 验证码

 * 作者:梦想年华 [DreamTime]

 * Email:fanwsp@126.com

 *  QQ:122142023

 *  CopyRight(c)2005-2006 by DreamTime

 *

 ****************************************************

*/

 

 

package dreamtime.dreamnews;   //指定类所在的包

import java.awt.*;      //导入类

import java.awt.image.*;

import java.util.*;

import javax.imageio.*;

 

//定义类

 

public class VerifyCode {

 static Random r = new Random();

 static String ssource = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"  + "abcdefghijklmnopqrstuvwxyz" +

 

"0123456789";

 static char[] src = ssource.toCharArray();

 

 

 //产生随机字符串

 

 private static String randString (int length){

  char[] buf = new char[length];

  int rnd;

  for(int i=0;i<length;i++){

   rnd = Math.abs(r.nextInt()) % src.length;

  

   buf[i] = src[rnd];

  }

  return new String(buf);

 }

 

 //调用该方法,产生随机字符串,

 //参数i: 为字符串的长度

 public String runVerifyCode(int i){

  String VerifyCode = randString(i);

  return VerifyCode;

 }

 

 

 //给定范围获得随机颜色

 public Color getRandColor(int fc,int bc)

 {

    Random random = new Random();

    if(fc>255) fc=255;

    if(bc>255) bc=255;

    int r=fc+random.nextInt(bc-fc);

    int g=fc+random.nextInt(bc-fc);

    int b=fc+random.nextInt(bc-fc);

    return new Color(r,g,b);

    }

 

   //调用该方法将得到的验证码生成图象

   //sCode:传递验证码 w:图象宽度 h:图象高度

   public BufferedImage CreateImage(String sCode)

   {

    try{

     //字符的字体

   Font CodeFont = new Font("Arial Black",Font.PLAIN,16);

   int iLength = sCode.length();     //得到验证码长度

   int width=22*iLength, height=20;    //图象宽度与高度

   int CharWidth = (int)(width-24)/iLength;  //字符距左边宽度

   int CharHeight = 16;          //字符距上

 

边高度

  

   // 在内存中创建图象

   BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

  

   // 获取图形上下文

   Graphics g = image.getGraphics();

  

   //生成随机类

   Random random = new Random();

  

   // 设定背景色

   g.setColor(getRandColor(200,240));

   g.fillRect(0, 0, width, height);

  

   //设定字体

   g.setFont(CodeFont);

  

   //画随机颜色的边框

   g.setColor(getRandColor(10,50));

   g.drawRect(0,0,width-1,height-1);

  

   // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到

   g.setColor(getRandColor(160,200));

   for (int i=0;i<155;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);

   }

  

 

   for (int i=0;i<iLength;i++)

   {

    String rand = sCode.substring(i,i+1);

    // 将认证码显示到图象中

    g.setColor(new Color(20+random.nextInt(60),20+random.nextInt

 

(120),20+random.nextInt(180)));

    g.drawString(rand,CharWidth*i+14,CharHeight);

   }

   // 图象生效

   g.dispose();

   return image;

  }catch(Exception e){

   //e.printStackTrace();

   //System.out.println(e.getMessage());

   }

  return null;

 }

 

 //测试

 public static void main(String[] args){

   //VerifyCode vc = new VerifyCode();

   //String s1 = vc.runVerifyCode(4);

   //Fun.DreamNewsTitle;System.out.println(s1);

   //Image im = vc.CreateImage(s1);

   //Graphics g = im.getGraphics();

   //g.drawImage(im,20,20,this);

   //g.drawString(s1,20,20);

  

 }

}

5.Function.java
import java.sql.*;
import java.util.Calendar;
public class Function {
 /***************************************************************************
  * 函数名:CheckReplace 作 用:转化SQL特殊字符串 参 数:s: 字符串型,待转化的字符 返回值:转化以后的字符串 调
  * 用:String s2 = CheckReplace(s1);
  **************************************************************************/
 
 public  static String CheckReplace(String s) {
  try {
   if (s == null || s.equals(""))
    return "";
   else {
    StringBuffer stringbuffer = new StringBuffer();
    for (int i = 0; i < s.length(); i++) {
     char c = s.charAt(i);
     switch (c) {

     case 34: // &apos;"&apos;
      stringbuffer.append("&quot;");
      break;

     case 39: // &apos;/&apos;&apos;
      stringbuffer.append("&#039;");
      break;

     case 124: // &apos;|&apos;
      stringbuffer.append("");
      break;

     case &apos;&&apos;:
      stringbuffer.append("&amp;");
      break;

     case &apos;<&apos;:
      stringbuffer.append("&lt;");
      break;

     case &apos;>&apos;:
      stringbuffer.append("&gt;");
      break;

     default:
      stringbuffer.append(c);
      break;
     }
    }
    return stringbuffer.toString().trim(); // 返回转化以后的字符串
   }
  } catch (Exception e) {
   return "";
  }
 }
}

 

附:

后台管理说明:
地址:admin/index.jsp 一定要输入文件名index.jsp,否则无法登录。
 因为String Page1  = (String)request.getHeader("Referer");  //得到页面地址来源
String Page2  = request.getRequestURL().toString();   //得到当前页面地址
if (Page2.equals(Page1))//不能直接 http://localhost/admin来登陆,要使用http:/index.jsp来登陆
 
用户名:admin
密码:admin(74D839D98630E280DF752E8939454A6B)
 附2:点击才弹出验证码的, 用于留言处,当留言框激活,才出验证码,节省网速
  <div id="verify"  style="display:none;">
    </div>  
    <script language="javascript">
    function creatediv()
    {
   document.getElementById("verify").style.display="block";
   document.getElementById("verify").innerHTML="<img src='VerifyCode.jsp'>";
    }
</script>
    <input name="VerifyCode" type="text" class="chinese" id="VerifyCode" style="font-size: 12px" size="6" maxlength="6"
           οnclick="creatediv();";
           οnfοcus="creatediv();"
            οnblur=" document.getElementById('verify').style.display='none';"      
    />

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
EGE是Easy Graphics Engine的缩写,是一个简单易用的图形库,可以用于开发基于Windows平台的2D图形应用程序。在EGE中,实现弹出子窗口的功能可以通过以下步骤实现: 1. 创建主窗口,并在主窗口中添加一个按钮或菜单项作为触发弹出子窗口的控件。 2. 在按钮或菜单项的回调函数中创建子窗口,可以使用ege::createWindow函数来创建子窗口。例如: ```c++ void onButtonClicked() { ege::Window* subWindow = ege::createWindow("Sub Window", 400, 300); subWindow->show(); } ``` 3. 在子窗口中添加需要的控件,例如按钮、文本框、列表框等。可以使用EGE提供的控件类来创建控件,并将它们添加到子窗口中。例如: ```c++ void onSubWindowCreated(ege::Window* subWindow) { ege::Button* closeButton = new ege::Button("Close", 20, 20, 80, 30); closeButton->setOnClick([]() { ege::closeCurrentWindow(); }); subWindow->addControl(closeButton); } ``` 4. 在子窗口中处理用户事件,例如按钮点击事件、鼠标移动事件等。可以通过覆盖Window类的虚函数来实现。例如: ```c++ class SubWindow : public ege::Window { public: SubWindow(const std::string& title, int width, int height) : Window(title, width, height) {} virtual void onMouseMove(int x, int y) override { // 处理鼠标移动事件 } virtual void onButtonClick(ege::Button* button) override { // 处理按钮点击事件 } }; ``` 5. 最后,在主窗口和子窗口的消息循环中调用ege::run函数来启动应用程序的事件循环。例如: ```c++ int main() { ege::init(); ege::Window* mainWindow = ege::createWindow("Main Window", 800, 600); ege::Button* popupButton = new ege::Button("Popup", 20, 20, 80, 30); popupButton->setOnClick([]() { onButtonClicked(); }); mainWindow->addControl(popupButton); mainWindow->show(); ege::run(); return 0; } ``` 以上是使用EGE实现弹出子窗口的基本步骤,具体实现可以根据需要进行调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值