- 浏览: 3508955 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (1491)
- Hibernate (28)
- spring (37)
- struts2 (19)
- jsp (12)
- servlet (2)
- mysql (24)
- tomcat (3)
- weblogic (1)
- ajax (36)
- jquery (47)
- html (43)
- JS (32)
- ibatis (0)
- DWR (3)
- EXTJS (43)
- Linux (15)
- Maven (3)
- python (8)
- 其他 (8)
- JAVASE (6)
- java javase string (0)
- JAVA 语法 (3)
- juddiv3 (15)
- Mule (1)
- jquery easyui (2)
- mule esb (1)
- java (644)
- log4j (4)
- weka (12)
- android (257)
- web services (4)
- PHP (1)
- 算法 (18)
- 数据结构 算法 (7)
- 数据挖掘 (4)
- 期刊 (6)
- 面试 (5)
- C++ (1)
- 论文 (10)
- 工作 (1)
- 数据结构 (6)
- JAVA配置 (1)
- JAVA垃圾回收 (2)
- SVM (13)
- web st (1)
- jvm (7)
- weka libsvm (1)
- weka屈伟 (1)
- job (2)
- 排序 算法 面试 (3)
- spss (2)
- 搜索引擎 (6)
- java 爬虫 (6)
- 分布式 (1)
- data ming (1)
- eclipse (6)
- 正则表达式 (1)
- 分词器 (2)
- 张孝祥 (1)
- solr (3)
- nutch (1)
- 爬虫 (4)
- lucene (3)
- 狗日的腾讯 (1)
- 我的收藏网址 (13)
- 网络 (1)
- java 数据结构 (22)
- ACM (7)
- jboss (0)
- 大纸 (10)
- maven2 (0)
- elipse (0)
- SVN使用 (2)
- office (1)
- .net (14)
- extjs4 (2)
- zhaopin (0)
- C (2)
- spring mvc (5)
- JPA (9)
- iphone (3)
- css (3)
- 前端框架 (2)
- jui (1)
- dwz (1)
- joomla (1)
- im (1)
- web (2)
- 1 (0)
- 移动UI (1)
- java (1)
- jsoup (1)
- 管理模板 (2)
- javajava (1)
- kali (7)
- 单片机 (1)
- 嵌入式 (1)
- mybatis (2)
- layui (7)
- asp (12)
- asp.net (1)
- sql (1)
- c# (4)
- andorid (1)
- 地价 (1)
- yihuo (1)
- oracle (1)
最新评论
-
endual:
https://blog.csdn.net/chenxbxh2 ...
IE6 bug -
ice86rain:
你好,ES跑起来了吗?我的在tomcat启动时卡在这里Hibe ...
ES架构技术介绍 -
TopLongMan:
...
java public ,protect,friendly,private的方法权限(转) -
贝塔ZQ:
java实现操作word中的表格内容,用插件实现的话,可以试试 ...
java 读取 doc poi读取word中的表格(转) -
ysj570440569:
Maven多模块spring + springMVC + JP ...
Spring+SpringMVC+JPA
很多网站注册或者登录是需要验证码的,这是为了防止机器人注册。本文是采用 servlet + html的方式,
展现一个demo,从登录到验证到跳转的整个过程,其他的代码细细品味,有些不懂,无需搞懂,
比如生成随机码的过程,但是有一点,随机码的图片的高度和宽度至少需要设置吧。
1.工程图片
----------------------------------------------
2.流程
登录到index.html中,有一个对话框,需要填写用户名,密码,验证码,填写完毕,登录,
首先验证码会到filter中去验证,当然了,也可以在loginservlet中验证(我这是为了想用下filter),
如果验证码错误,那么跳转到index.html中,如果正确,进入到LoginServlet中,再对用户名和密码
进行验证,如果正确的话,那么跳转到index.jsp页面,如果错误的话,只能是跳转到index.html中,
重写的验证。(验证码是放在session中的)
代码:
生成验证码图片的 YanZhengMaBean.java
只有知道生成了BufferedImage,一张图片,然后servlet把图片通过方法发射到html中去
你真心无需知道图片怎么产生,只要知道这个bean是生成验证码图片的,并且把验证码字符串放入
到rand的session中了,高和宽改改就行
package com.endual.bean; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.util.Random; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; public class YanZhengMaBean { public BufferedImage getBuffImg (HttpServletRequest request) { // 验证码图片的宽度。 int width = 70; // 验证码图片的高度。 int height = 30; BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = buffImg.createGraphics(); // 创建一个随机数生成器类。 Random random = new Random(); // 设定图像背景色(因为是做背景,所以偏淡) g.setColor(getRandColor(200, 250)); g.fillRect(0, 0, width, height); // 创建字体,字体的大小应该根据图片的高度来定。 Font font = new Font("Times New Roman", Font.HANGING_BASELINE, 28); // 设置字体。 g.setFont(font); // 画边框。 g.setColor(Color.BLACK); g.drawRect(0, 0, width - 1, height - 1); // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到。 // g.setColor(Color.GRAY); 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); } // randomCode用于保存随机产生的验证码,以便用户登录后进行验证。 StringBuffer randomCode = new StringBuffer(); // 设置默认生成4个验证码 int length = 4; // 设置备选验证码:包括"a-z"和数字"0-9" String base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; int size = base.length(); // 随机产生4位数字的验证码。 for (int i = 0; i < length; i++) { // 得到随机产生的验证码数字。 int start = random.nextInt(size); String strRand = base.substring(start, start + 1); // 用随机产生的颜色将验证码绘制到图像中。 // 生成随机颜色(因为是做前景,所以偏深) // g.setColor(getRandColor(1, 100)); // 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成 g.setColor(new Color(20 + random.nextInt(110), 20 + random .nextInt(110), 20 + random.nextInt(110))); g.drawString(strRand, 15 * i + 6, 24); // 将产生的四个随机数组合在一起。 randomCode.append(strRand); } // 将四位数字的验证码保存到Session中。 HttpSession session = request.getSession(); session.setAttribute("rand", randomCode.toString()); // 图象生效 g.dispose(); // 禁止图像缓存。 return buffImg ; } 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); } }
把验证码的字符串放入到到名叫rand的session中了
2.发射验证码图片的servlet
package com.endual.servlets; import java.awt.image.BufferedImage; import java.io.IOException; 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 com.endual.bean.YanZhengMaBean; public class YanZhengMaServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response) ; } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { YanZhengMaBean bean = new YanZhengMaBean() ; BufferedImage buffImg = bean.getBuffImg(request) ; 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, "jpg", sos); sos.flush(); sos.close(); } }
这里要插话:
1.response.setHeader("Cache-Control", "no-cache");
2.ImageIO.write(buffImg, "jpg", sos);
你懂的,发射图片要用ImageIO,不是发射字符串或者json的方法了
3. Filter 过滤下验证码,貌似直接写在loginservlet中更好吧??
package com.endual.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; public class YanZhengMaFilter implements Filter { public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { // TODO Auto-generated method stub HttpServletRequest requestHttp = (HttpServletRequest) servletRequest; String yazhengma = servletRequest.getParameter("yazhengma") ; HttpSession session = requestHttp.getSession(); String buf = (String)session.getAttribute("rand") ; if (buf==null) { //跳转到登录页面中去 RequestDispatcher requestDispatcher = servletRequest.getRequestDispatcher("/index.html"); requestDispatcher.forward(servletRequest, servletResponse); }else { if (buf.toLowerCase().equals(yazhengma.toLowerCase())) { //进入到页面中 //RequestDispatcher requestDispatcher = servletRequest.getRequestDispatcher("/index.jsp"); //requestDispatcher.forward(servletRequest, servletResponse); filterChain.doFilter(servletRequest, servletResponse); }else { //跳转到登录页面中去 RequestDispatcher requestDispatcher = servletRequest.getRequestDispatcher("/index.html"); requestDispatcher.forward(servletRequest, servletResponse); } } } public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } }
过滤,验证下验证码
4.登录的servlet
LoginServlet.java
package com.endual.servlets; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username") + "" ; String password = request.getParameter("password") + ""; RequestDispatcher requestDispatcher = null ; if (username.equals("chenwei")) { //跳转到登录页面中去 requestDispatcher = request.getRequestDispatcher("/index.jsp"); }else { requestDispatcher = request.getRequestDispatcher("/index.html"); } requestDispatcher.forward(request, response); } }
5.注册的web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <filter> <filter-name>session-timeout</filter-name> <filter-class>com.endual.filter.YanZhengMaFilter</filter-class> </filter> <filter-mapping> <filter-name>session-timeout</filter-name> <url-pattern>/LoginServlet.do</url-pattern> </filter-mapping> <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>YanZhengMaServlet</servlet-name> <servlet-class> com.endual.servlets.YanZhengMaServlet </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>com.endual.servlets.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>YanZhengMaServlet</servlet-name> <url-pattern>/YanZhengMaServlet.do</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/LoginServlet.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
6.登录的界面
最好么用到js,可以做个刷新验证码用的,但是我不写了,不会写,要google抄代码啊
index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>index.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"> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <meta http-equiv="pragma" content="no-cache" /> <meta http-equiv="cache-control" content="no-cache" /> <meta http-equiv="expires" content="0" /> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> <form action="LoginServlet.do" method="get"> username : <input type="text" name="username"/><br/> password :<input type="text" name="password" /><br/> yazhengma: <input type="text" name="yazhengma"><img src="YanZhengMaServlet.do"/> <br/> <input type="submit" value="subimt"/> </form> </body> </html>
登录界面看看
7.登录成功的index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <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"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> 登录成功 </body> </html>
这下完全OK了
http://download.csdn.net/download/endual/4484949
完全工程下载,2分,付钱,谢谢
发表评论
-
snmp
2020-04-13 11:07 397https://www.iteye.com/blog/zhan ... -
snmp
2020-04-10 21:33 526https://blog.csdn.net/qq_333141 ... -
服务器监控软件
2019-12-31 11:07 470[ERROR] org.hyperic.sigar.Sigar ... -
多数据源
2019-12-23 22:09 415https://gitee.com/baomidou/dyna ... -
mybatis多数据源
2019-12-23 18:09 410https://blog.csdn.net/qq_288042 ... -
springboot ueditor
2019-12-17 18:26 349https://blog.csdn.net/u01216982 ... -
java支持多数据源
2019-12-13 15:59 415spxcms是否支持多数据源 ... -
java日志
2019-12-10 12:01 260https://blog.csdn.net/peng_wei_ ... -
spring 多数据源
2019-12-06 09:55 391https://www.jb51.net/article/10 ... -
idea
2019-12-04 17:13 364https://blog.csdn.net/dengachao ... -
手机大屏
2019-11-30 16:02 305http://demo.demohuo.top/modals/ ... -
quarz配置
2019-11-08 11:48 422https://blog.csdn.net/BryantLmm ... -
mysql同步
2019-11-06 12:20 313https://blog.csdn.net/baidu_418 ... -
nginx配置多个服务
2019-11-04 20:35 713https://blog.csdn.net/everljs/a ... -
h5 加壳
2019-11-04 16:05 583https://jingyan.baidu.com/artic ... -
jeui 前端框架
2019-10-22 14:30 1125http://www.jemui.com/demo/ http ... -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/ htt ... -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/ -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/ -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/
相关推荐
JAVA JSP版验证码 JAVA JSP版验证码 JAVA JSP版验证码 JAVA JSP版验证码
ava jsp验证码例子源码 java,jsp,验证码,加瓦
java jsp验证码制作,导入jstl-1.2.jar包和standard-1.1.2.jar包
一款用java+jsp编写的验证码插件,可以在web项目中直接应用。
java 实现验证码(servlet+jsp),详情请看:
jsp登录时,用户名和密码为空时弹窗提醒,同时也需要输入验证码才能登录。
一个登录验证生成验证码用struts 后台生成验证码在jsp页面输出生成图片
java生成验证码源码包括彩色验证码 包括jsp生成验证码和彩色验证码
Jsp中的验证码 java实现 Jsp中的验证码 java实现
采用jsp 生成验证码,我自己使用过的。使用方法: <img src="./../function/imagejsp.jsp" style="float: left">
java生成验证码代码 主要:一个生成验证码的servlet,一个jsp页面,另外还需要配置下web.xml即可
java实现验证码完整版,一个java类,两个jsp,其中一个为登录jsp,另一个jsp为生成图片的jsp 验证码的输入是否正确可用如下语句验证: String certCode=request.getParameter("certCode"); if(certCode.equals(...
1.在实验四基础上使用AJAX技术实现异步登录功能。(40分) Ajax异步的特点为:多个事件并行发生,事件互不影响,请求之后,不刷新整张页面,页面不动,只是刷新页面的局部。异步数据获取技术 XMLHttpRequest对象方法...
JSP验证码+刷新java很好用的验证码
本实例是用java做的验证码,韩有完整的代码,在浏览器输入http://localhost:8080/imageChange/ImageCode.jsp 就可以看到结果
jsp实现图形验证码
java图片验证码:有servelt的写法,web.xml的配置以及jsp(或者html)的写法。亲测能用
用JSP生成随机数字验证码,数字验证码是图片形式的。通过点击按钮,可以实现对数字验证码的刷新。
java jsp实现网页上验证码产生功能,简单易懂。
该文件中有两个彩色验证码生成和验证的例子,都是独立的,一个是汉字形式,另一个是数字+字母形式