实现验证码的功能网上都比较的散,综合以前学的内容做一个总结,struts与springmvc都使用同一个ImagUtil.java,只是action不同。
当时学习的时候的一个ImageUtil.java如下
package com.zqw.util;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
* 验证码
* @author Administrator
*
*/
public class ImageUtil {
private static final char[] chars =
{'0','1','2','3','4','5','6'
,'7','8','9','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'
};
private static final int SIZE = 4;
private static final int LINES = 5;
private static final int WIDTH = 80;
private static final int HEIGHT = 30;
private static final int FONT_SIZE = 28;
public static Map<String,BufferedImage> createIamge(){
BufferedImage image = new BufferedImage
(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
g.setColor(Color.LIGHT_GRAY);
g.fillRect(0, 0, WIDTH, HEIGHT);
//随机获取4位字符
Random r = new Random();
StringBuilder sp = new StringBuilder();
for(int i=0;i<SIZE;i++){
int index = r.nextInt(chars.length);
g.setColor(getRandomColor());
g.setFont(new Font(null,Font.ITALIC,FONT_SIZE));
g.drawString(chars[index]+"", (i)*WIDTH/SIZE, HEIGHT/2+7);
sp.append(chars[index]);
}
// 画干扰线
for (int i = 1; i <= LINES; i++) {
g.setColor(getRandomColor());
g.drawLine(r.nextInt(WIDTH), r.nextInt(HEIGHT),
r.nextInt(WIDTH), r.nextInt(HEIGHT));
}
Map<String,BufferedImage> map =
new HashMap<String,BufferedImage>();
map.put(sp.toString(), image);
return map ;
}
public static Color getRandomColor() {
Random ran = new Random();
Color color = new Color(ran.nextInt(256), ran.nextInt(256),
ran.nextInt(256));
return color;
}
public static InputStream getInputStream(BufferedImage image){
//压缩内存映像图片
ByteArrayOutputStream bos = new ByteArrayOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos);
//压缩图片
try {
encoder.encode(image);
} catch (ImageFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
InputStream input = new ByteArrayInputStream(bos.toByteArray());
return input;
}
}
struts框架下:
生成验证码的CheckCodeActionStruts.java
package com.zqw.web.action;
import java.awt.image.BufferedImage;
import java.io.InputStream;
import java.util.Map;
import org.springframework.stereotype.Controller;
import com.opensymphony.xwork2.ActionContext;
import com.zqw.netctoss.util.ImageUtil;
@Controller
public class CheckCodeActionStruts {
private InputStream input;
public String execute(){
Map<String,BufferedImage> map = ImageUtil.createIamge();//产生图片
String code = map.keySet().iterator().next();
BufferedImage image = map.get(code);
ActionContext actionContext = ActionContext.getContext();
Map session = actionContext.getSession();
session.put("code", code);
input = ImageUtil.getInputStream(image);//压缩图片并输出
return "success";
}
public InputStream getInput() {
return input;
}
}
struts.xml的配置
<action name="checkCode" class="com.zqw.web.action.CheckCodeActionStruts">
<result type="stream">
<param name="inputName">input</param>
</result>
</action>
springMVC框架下只是action稍有不同,
springMVC框架下:
package com.zqw.web.action;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.zqw.netctoss.util.ImageUtil;
@Controller("checkCodeActionSpringMVC")
public class CheckCodeActionSpringMVC {
@RequestMapping(value="/checkCode.do" )
public void execute(HttpServletRequest req,HttpServletResponse resp) throws IOException{
Map<String,BufferedImage> map = ImageUtil.createIamge();//产生图片
String code = map.keySet().iterator().next();
BufferedImage image = map.get(code);
req.getSession().setAttribute("code", code);
ServletOutputStream sos = resp.getOutputStream();
ImageIO.write(image, "jpeg", sos);
sos.close();
}
}
都使用相同的前台页面,点击更换图片则是参考网上的写法。
function changeImg() {
var imgSrc = $("#imgObj");
var src = imgSrc.attr("src");
imgSrc.attr("src", chgUrl(src));
}
//时间戳
//为了使每次生成图片不一致,即不让浏览器读缓存,所以需要加上时间戳
function chgUrl(url) {
var timestamp = (new Date()).valueOf();
url = url.substring(0, 17);
if ((url.indexOf("&") >= 0)) {
url = url + "×tamp=" + timestamp;
} else {
url = url + "?timestamp=" + timestamp;
}
return url;
}
</script>
<td class="login_info">验证码:</td>
<td class="width70"><input name="checkCode" type="text" class="width70" /></td>
<td>[img]checkCode" alt="验证码" id="imgObj" onclick="changeImg()[/img]</td>
<td><span class="required"></span><br></td>
</tr>
如图:
- 大小: 17.6 KB
分享到:
相关推荐
struts2+spring整合登陆验证经典完整案例!期余JAR文件在struts2+spring整合登陆验证经典完整案例!(JAR)这个中,免积分下载! 部署Web应用请按如下步骤进行: 1. 进入reg_login路径下,将mysql.sql脚本中的语句...
这是一个关于基于Web的问卷调查系统的源码包,主要采用了Java技术栈进行开发,结合了SSM(Spring、SpringMVC、MyBatis)和SSH(Struts2、Spring、Hibernate)两大主流框架。这个系统可能适用于高校毕业生的课程设计...
java-springmvc-mybatis-easyuiSpringMvc3.2.x+mybatis3.1.x+EasyUI1.3.4+Maven架构的示例程序根据 修改而来,在此基础上添加jcaptcha图形验证码。SSHE项目为Struts2.3.x+Spring3.2.x+Hibernate4.2.x+CXF2.7.x+...
前端可能使用HTML、CSS和JavaScript,而后台可能采用SpringMVC或Struts2等框架,处理HTTP请求并返回响应数据。 六、数据库设计与管理 项目中必然涉及到数据库的设计和管理,可能包括用户信息表、商品信息表、订单...
13. **项目国际化**:Struts2或SpringMVC的国际化支持。 14. **数据校验**:Struts2的Validator,Spring的Validation。 15. **网络蜘蛛**:爬虫技术,网页抓取。 16. **对象缓存**:内存缓存机制,如Ehcache。 17. *...
所以这次重新上传一次,相对于上次进行了一些整理(前端后台数据库API分类),并且增加了json,java验证码,Oracle数据库api.chm,以及后端框架的api,包括hibernate,struts2,spring,mybatis,springMVC
Lerx CMS V5版(以下简称V5版)采用了基于Java的SpringMVC框架,抛弃了V2-V3版本使用的Struts 2。SpringMVC框架更加安全、稳定。ORM持久化框架依旧使用Hibernate,版本为5.4。开发时采用的数据库为MySQL。是一个能快速...
java8 源码 Delta - A lightweight java web framework 什么是 ...是一个基于MVC架构的轻量级WEB开发框架,基于jdk1.8开发,目前最新...如果您对SpringMVC、Struts2等框架已经有所了解,同时又很想快速体验Delta Framewor
SpringMVC FreeMarker Mybatis Kaptcha(Google验证码) Druid(数据源) Atomikos(数据源事物) SpringCache(缓存集成redis) Shrio(权限控制,可以精确到按钮级别,集成redis) Redis(缓存服务器) Log4j Maven Generator...
70. **SpringMVC与Struts的区别**:SpringMVC是一个更轻量级的Web框架,与Spring框架的整合度更高,提供更好的性能。Struts是一个基于MVC模式的重量级框架。 71. **避免SQL注入的方法**:使用预处理语句...