|
闲着也是闲着,复习下前面用过的一些知识.这回在jsp中做个验证码.来,一起来哦. 这里的jsp页面是一个登录的界面,当然用户登录没必要输验证码咯,只是举个例而已,下回朋友们可能会在别处用上的,这样便可copy过去了呀.呵呵. jsp页面代码如下: <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <form action="LoginServlet" method="post"> 用 户 名:<input type=text name=username><br> 密 码:<input type=password name=pwd><br> 请输入验证码:<input type=text name=check><img src="ImgServlet" id="img"><a href="javaScript:change()">看不清,换张</a><br> <input type=submit value="登录"> <input type=reset value="重置"> </form> <script type="text/javascript"> function change() { document.all.img.src="ImgServlet"; } </script> 呵呵,还行吧,copy过去,试试什么效果哦. OK,下面便是在servlet里面来生成验证码了.代码如下: package com.servlets; import java.awt.Color; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; 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.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; public class ImgServlet extends HttpServlet {
//得到随机字符的方法 public char[] getRand() { char[] rand=new char[4]; String str="0123456789qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM"; for(int i=0;i<4;i++) { Random rd=new Random(); int index=rd.nextInt(str.length()); //通过下标获取字符 rand=str.charAt(index); } return rand; } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //接收图片类型 response.setContentType("image/jepg"); //创建字节流 ServletOutputStream sos=response.getOutputStream(); //设置缓冲区 BufferedImage img=new BufferedImage(60,30,4); //在缓冲区中绘图 Graphics g=img.getGraphics(); //调方法,得到随机字符 char[] rand=this.getRand(); //保存于session中,以便其它页面可用 request.getSession().setAttribute("rand", new String(rand)); //干拢线 g.setColor(Color.red); g.drawLine(new Random().nextInt(60), new Random().nextInt(60), new Random().nextInt(20), new Random().nextInt(20)); g.drawLine(new Random().nextInt(60), new Random().nextInt(60), new Random().nextInt(60), new Random().nextInt(20)); g.drawLine(new Random().nextInt(80), new Random().nextInt(60), new Random().nextInt(50), new Random().nextInt(20)); //画背景色 g.drawRect(0, 0, 60, 30); g.setColor(Color.blue);
//设置前景色 g.setColor(Color.green); g.drawString(""+rand[0], 5, 20); g.drawString(""+rand[1], 20, 10); g.drawString(""+rand[2], 30, 15); g.drawString(""+rand[3], 50, 20); //关闭 g.dispose();
JPEGImageEncoder code=JPEGCodec.createJPEGEncoder(sos); code.encode(img);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } } 咋样?注解都已标明哦. 好,验证码生成,下面我们就来使用咯. 先写个数据库操作类,理所当然有两个字段,用户名和密码咯.(name,pwd) 数据库简单代码如下: package com.db; import java.sql.*; public class DataBase { private Connection con; private Statement st; private ResultSet rs; //获得连结 public Connection getCon() { String classStr="com.microsoft.jdbc.sqlserver.SQLServerDriver"; String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=t74"; try { Class.forName(classStr); } catch (ClassNotFoundException e) { e.printStackTrace(); } try { con=DriverManager.getConnection(url,"sa",""); } catch (SQLException e) { e.printStackTrace(); } return con; } //判断用户名与密码是否正确 public boolean isLogin(String name,String pwd) throws SQLException { if(con==null) con=this.getCon(); String sql="select *from Login"; st=con.createStatement(); rs=st.executeQuery(sql); while(rs.next()) { String dbname=rs.getString("name"); String dbpwd=rs.getString("pwd"); if(dbname.equals(name)&&dbpwd.equals(pwd)) { return true; } } return false; } } Is very easy.OK,接下来该写什么?当然又是servlet咯,不信,看看代码便知道,如下: package com.servlets; import java.io.IOException; import java.io.PrintWriter; import java.sql.SQLException; 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 { // 设置编码 request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter out=response.getWriter(); // 得到值 String name = request.getParameter("name"); String pwd = request.getParameter("pwd"); // 得到验证码 String check = request.getParameter("check");//输入 String rand = (String) request.getSession().getAttribute("rand");// 随机产生 // 实例化数据库操作类 com.db.DataBase db = new com.db.DataBase(); boolean mark = false; try { mark = db.isLogin(name, pwd); } catch (SQLException e) { e.printStackTrace(); } if (mark == true && check.equals(rand)) { out.print("成功"); } else { out.print("失败"); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } } OK,大功告成!
|
一共有 0 条评论