首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

SSH框架,验证码,附代码了,求指点

2013-11-29 
SSH框架,验证码,附代码了,求指导java类里的代码 package com.iCloud.actionimport java.awt.Colorimport

SSH框架,验证码,附代码了,求指导
java类里的代码

 package com.iCloud.action;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.GraphicsEnvironment;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Map;
import java.util.Random;

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

import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;

public class WaiguaAction extends ActionSupport implements SessionAware{

/**
 * 
 */
private static final long serialVersionUID = 1L;
private Map<String,Object> session;
private HttpServletResponse response;
private HttpServletRequest request;
private int width = 75;
private int height = 20;

public WaiguaAction(int width, int height) {
// TODO Auto-generated constructor stub
this.width = width;
this.height = height;
}
public String writeImg(OutputStream out) {

/** 应用绘图对象 **/
BufferedImage bi = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D gd = (Graphics2D) bi.getGraphics();
/** 绘制背景 **/

// gd.setColor(getRandColor(100,200));
// gd.fillRect(0, 0, width, height);
// gd.setColor(java.awt.Color.WHITE);
// gd.fillRect(0,0,120,70);
// 红:204 绿:232 蓝:207
gd.setBackground(new Color(204, 232, 207));
// gd.setBackground(new Color(rnd(),rnd(),rnd()));
gd.clearRect(0, 0, width, height);
/** 设置字体 **/
Font font = new Font(getRndFontNames(), Font.PLAIN, 24);
gd.setFont(font);
/** 随机字串 **/
StringBuffer sb = new StringBuffer();
int i;
for (i = 0; i < 4; i++) {
sb.append(filter(rnd()));
}

/** 设置颜色并输出 **/
/**
 * 1 所有验证码颜色一致 gd.setColor(new Color(rnd(),rnd(),rnd()));
 * gd.drawString(sb.toString(), 0, 16); //这是普通方式,我想让所有字母颜色都不同
 **/
/** 2 用随机颜色生成每个验证符 **/
String st = sb.toString();
System.out.println(st); //页面点击刷新验证码,控制台已经可以得到生成了值

//session.put("st", st);  //这样保存会报空值异常
// HttpSession session = request.getSession();   //这样保存会报空值异常
//        session.setAttribute("rand", st.toString()); //这样保存会报空值异常
while (i > 0) {
/** 随机颜色,并进行色彩限定 **/
gd.setColor(new Color(rnd(), rnd(), rnd()));
gd.drawString(st.substring(i - 1, i), (i - 1) * 16 + 5, 16);
i--;
}

/** 清理现场 **/
gd.dispose();
bi.flush();
/** 绘制 **/
try {
ImageIO.write(bi, "jpg", out);
} catch (IOException e) {
System.out.println("Error in writeImg:" + e);
}
return st;
}

/** 随机生成0-255的数字 **/
public int rnd() {
java.util.Random random = new java.util.Random();
return random.nextInt(255);
}

/** 把除了大小写字母和数字外的字符全过滤掉 **/
public char filter(int k) {
if (k < 65)
k = 48 + (k % 10);
if (k > 64 && k < 96)
k = 65 + (k % 26);
if (k > 96)
k = 97 + (k % 26);
return (char) k;
}

/** 取得一个随机字体 **/
public String getRndFontNames() {
GraphicsEnvironment ge = GraphicsEnvironment
.getLocalGraphicsEnvironment();
String[] k = ge.getAvailableFontFamilyNames();
java.util.Random r = new java.util.Random();
return k[r.nextInt(k.length)];
}

private 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);

}


@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}
public HttpServletResponse getResponse() {
return response;


}
public void setResponse(HttpServletResponse response) {
this.response = response;
}
public HttpServletRequest getRequest() {
return request;
}
public void setRequest(HttpServletRequest request) {
this.request = request;
}
public Map<String, Object> getSession() {
return session;
}
}



被引用的图片jsp页面代码
<%@ page language="java"   pageEncoding="GBK"%>
<%@ page contentType="image/png" import="com.iCloud.action.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <% WaiguaAction  wa = new WaiguaAction(75,25); %> 
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>Insert title here</title>
</head>
<body>
<%
//设置页面不缓存 
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);

String sbRan = wa.writeImg(response.getOutputStream());
session.setAttribute("_CODE_", sbRan); // 将验证码保存在session 对象中供对比 -- 
out.clear();
out = pageContext.pushBody();
%>
</body>
</html>

注册页面的 验证码 代码
<td class="input_checkcode">
<input class="input_3 required" id="codeName" name="codeName" size="30" type="text">
<span><img src="wcImgsWc.jsp" 
onclick="javascript:this.src='wcImgsWc.jsp?id='+  Math.random();" 
alt="SSH框架,验证码,附代码了,求指点" id="imgId"></span></td>


现在问题是,我在 js里写验证的,怎么能得到 java类的生成验证码的值  去跟用户在文本框输入的值作输入是否正确的验证啊?  java代码里我标识了用那2个session保存的值 就报空值异常。 
求大神指导。 我用ssh框架 myeclipse 。 新手啊 求指导. 
我QQ 406572365 邮箱 foryou2016@qq.com SSH框架 验证码 jsp
[解决办法]
验证码生成
package servlet;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;

import javax.imageio.ImageIO;
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 CheckCodeServlet extends HttpServlet {

/**
 * 
 */
private static final long serialVersionUID = -6681020228407055872L;
private int WIDTH= 80;
private int HEIGHT= 30;
@Override
public void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
BufferedImage image = new BufferedImage(WIDTH, HEIGHT,BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
Random r = new Random();
g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
g.fillRect(0, 0,WIDTH,HEIGHT);
String codenumber = getNumber(5); 
HttpSession session = request.getSession();
        session.setAttribute("codenumber",codenumber);
for (int i = 0; i < 5; i++) {
g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
g.drawLine(r.nextInt(WIDTH),r.nextInt(HEIGHT),r.nextInt(WIDTH),r.nextInt(HEIGHT));
}
g.setColor(new Color(0,0,0));
//step6,设置字体的大小、风格
g.setFont(new Font(null,
Font.ITALIC
[解决办法]
Font.BOLD,20));
g.drawString(codenumber, 5, 22);
//二、压缩图片,输出
response.setContentType("image/jpeg");
OutputStream ops = 
response.getOutputStream();
//write方法:将原始图片(image)使用
//指定的压缩算法(jpeg)进行压缩,然后
//使用指定的输出流(ops)输出。
ImageIO.write(image, "jpeg",ops);
ops.close();
}
private String getNumber(int size) {
       Random r= new Random();
       String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
       String number = "";
       for(int i=0;i<size;i++)


       {
       number += str.charAt(r.nextInt(str.length()));
       }
return number;
}


}


登陆模块
 else if (path.equals("/login")) {
String number3 = request.getParameter("number1");
        HttpSession session2 = request.getSession();
        String number4 = 
                (String) session2.getAttribute("codenumber");
        System.out.println("number3:" + number3);
        System.out.println("number4:" + number4);
        if (number4 != null && 
                    number4.equals(number3)) {
                    request.setAttribute("number_error", 
          "验证码错误");
          request.getRequestDispatcher("login.jsp")
          .forward(request, response);
          return;
                    }
        String username = request.getParameter("username");
String pwd = request.getParameter("pwd");
UserDAO dao = new UserDAO();
try {
User user = dao.findByUserName(username);
if (user != null && user.getPwd().equals(pwd)) {
//绑订数据到session对象上,用于验证
        HttpSession session3 = request.getSession();
        session3.setAttribute("user", user);
// 登录成功
response.sendRedirect("main.jsp");
} else {
// 登录失败
request.setAttribute("login_error", "用户名或者密码错误");
request.getRequestDispatcher("login.jsp").forward(request,
response);
}
} catch (Exception e) {
e.printStackTrace();
throw new ServletException(e);
}

<%@page pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>
<%@ page import="java.util.*,java.text.SimpleDateFormat"%>
<html>
<head>
<title>login</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="css/style.css" />
</head>
<body>
<div id="wrap">
<div id="top_content">
<div id="header">
<div id="rightheader">
<p>
<%
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String newdate = sdf.format(date);
out.println(newdate);
       %>
<br />
</p>
</div>
<div id="topheader">
<h1 id="title">
<a href="#">登陆页面</a>
</h1>
</div>
<div id="navigation"></div>
</div>
<div id="content">
<p id="whereami"></p>
<h1>登录</h1>
<form action="login.do" method="post">
<table cellpadding="0" cellspacing="0" border="0"
class="form_table">
<tr>
<td valign="middle" align="right">用户名:</td>
<td valign="middle" align="left"><input type="text"
class="inputgri" name="username" /> <a href="regist.jsp">注册用户</a>
<%
               String msg = (String)request.getAttribute("login_error");
                %> <span style="color:red;"><%=(msg == null ? "" : msg)%></span></td>
</tr>
<tr>
<td valign="middle" align="right">密码:</td>
<td valign="middle" align="left"><input type="password"
class="inputgri" name="pwd" />
</td>
</tr>
<TR><td valign="middle" align="right">验证码: <img id="num"
src="checkcode" onclick="this.src='checkcode?' + Math.random();"/> </td>
<td valign="middle" align="left"><input type="text"
class="inputgri" name="number1" /></td>


                <%
                    String msg2 = 
                    (String)request.getAttribute("checkcode_error");
                 %>
                <span style="color:red;font-style:italic;">
                    <%=(msg2 == null ? "" : msg2)%>
                </span>
            </td></TR>
</table>
<p>
<input type="submit" class="button" value="确认" />
</p>
</form>
</div>
</div>
<div id="footer">
<div id="footer_bg">Jack@1001.com</div>
</div>
</div>
</body>
</html>


参考下了

热点排行