欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JSP開發(fā)之生成圖片驗(yàn)證碼技術(shù)的詳解

 更新時(shí)間:2017年09月21日 11:53:13   作者:海那邊的小萌男  
這篇文章主要介紹了JSP開發(fā)之生成圖片驗(yàn)證碼技術(shù)的詳解的相關(guān)資料,希望通過本文能幫助到大家實(shí)現(xiàn)圖片驗(yàn)證碼技術(shù),需要的朋友可以參考下

JSP開發(fā)之生成圖片驗(yàn)證碼技術(shù)的詳解

我們?cè)诰W(wǎng)頁注冊(cè)用戶時(shí),常常會(huì)需要格根據(jù)圖片給的圖片驗(yàn)證碼把驗(yàn)證碼輸進(jìn)去。那么我們今天就來學(xué)習(xí)這個(gè)。

簡(jiǎn)單來說分為三步驟:

1.底層用Java實(shí)現(xiàn)生成驗(yàn)證碼圖片
2.通過配置文件調(diào)用實(shí)現(xiàn)Java生成片
3.通過HTML技術(shù)把圖片顯示到網(wǎng)頁

首先是最底層Java生成圖片代碼

package cn.hncu.servlets;


import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;
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;

public class CodeImgServlet extends HttpServlet {
  @Override
  protected void service(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    //☆1☆--相比純java方式有變化的地方
    resp.setContentType("image/jpeg");//設(shè)置http響應(yīng)頭---告訴瀏覽器我現(xiàn)在發(fā)的是這個(gè)圖片格式的數(shù)據(jù),你用相應(yīng)的方式來解析

    //定義圖片的寬和高
    int w=60;
    int h=30;

    //聲明一個(gè)RGB格式的內(nèi)存中的圖片
    BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
    Graphics g = img.getGraphics();

    //把背景變白色
    g.setColor(Color.white);
    g.fillRect(0, 0, w, h);
    //設(shè)置字體
    g.setFont(new Font("aa",Font.BOLD,18));

    //產(chǎn)生并draw出4個(gè)隨機(jī)數(shù)字
    Random r = new Random();
    for(int i=0;i<4;i++){
      int a = r.nextInt(10);//生成0~9之間的隨機(jī)整數(shù)
      int y = 15+r.nextInt(20);//產(chǎn)生隨機(jī)的垂直位置
      //產(chǎn)生隨機(jī)顏色
      Color c = new Color(r.nextInt(256),r.nextInt(256),r.nextInt(256));
      g.setColor(c);

      g.drawString(""+a, i*15, y);
    }

    //畫幾條干擾線
    for(int i=0;i<10;i++){
      //產(chǎn)生隨機(jī)顏色
      Color c = new Color(r.nextInt(256),r.nextInt(256),r.nextInt(256));
      g.setColor(c);
      g.drawLine(r.nextInt(60), r.nextInt(30), r.nextInt(60), r.nextInt(30));
    }

    g.dispose();//類似于IO中的flush(),把圖形數(shù)據(jù)刷到img中
    //把內(nèi)存圖片img對(duì)象保存到一個(gè)jpg文件
    ImageIO.write(img, "JPEG", resp.getOutputStream() );//☆2☆

  }
}

項(xiàng)目中的Web.xml配置文件代碼

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
  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_3_0.xsd">
 <display-name></display-name> 

 <!-- 安全目錄中的jsp文件如果要允許外面訪問,得在web.xml進(jìn)行配置,配置成一個(gè)jsp-servlet -->
 <servlet>
  <servlet-name>ajsp</servlet-name>
  <!-- 配置servlet用servlet-class, 配置jsp頁面用jsp-file標(biāo)簽 -->
  <jsp-file>/WEB-INF/jsps/a.jsp</jsp-file>
 </servlet>
 <!-- 
  <servlet>
  <servlet-name>CodeImgServlet</servlet-name>
  <servlet-class>cn.hncu.servlets.CodeImgServlet</servlet-class>
  </servlet>
  <servlet>
  <servlet-name>LoginServlet</servlet-name>
  <servlet-class>cn.hncu.servlets.LoginServlet</servlet-class>
  </servlet>
  -->
   <servlet>
    <servlet-name>CodeImgServlet</servlet-name>
    <servlet-class>cn.hncu.servlets.CodeImgServlet</servlet-class>
   </servlet>
   <servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>cn.hncu.servlets.LoginServlet</servlet-class>
   </servlet>


 <!-- 給servlet配置訪問路徑 -->

 <servlet-mapping>
  <servlet-name>ajsp</servlet-name>
  <url-pattern>/x/a.asp</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>CodeImgServlet</servlet-name>
  <url-pattern>/code</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>LoginServlet</servlet-name>
  <url-pattern>/LoginServlet</url-pattern>
 </servlet-mapping>


 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
</web-app>

主頁面代碼登錄代碼

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 <script type="text/javascript">
   function changeImg(){
     var img = document.getElementById("codeImg");
     // 當(dāng)src每次的路徑方式變化時(shí),就會(huì)去重新請(qǐng)求一次后臺(tái)。
     img.src="code?"+new Date().getTime();
   }

 </script>

 </head>

 <body>
  <h2>用戶注冊(cè)</h2>
   <form action="LoginServlet" method="post">
      姓名:<input type="text" name="name"><br/>
      密碼:<input type="password" name="pwd"><br/>
    <!-- 
     驗(yàn)證碼:<input type="text" name="code"/><img src="imgs/a.jpg"/><br/>
     --> 
     驗(yàn)證碼:<input type="text" name="code"/><img id="codeImg" src="code"/><a href="javascript:changeImg();" rel="external nofollow" >看不清</a><br/>
     <input type="submit" value="注冊(cè)">
   </form>
   <br/><br/>
   <hr/>
   <a href="WEB-INF/jsps/a.jsp" rel="external nofollow" >WA---a.jsp</a> <br/>
   <a href="/helloWebProj/x/a.asp" rel="external nofollow" >AC---a.jsp</a> <br/>
 </body>
</html>

當(dāng)頁面加載,就向TOMCAT請(qǐng)求服務(wù),調(diào)用前面的JAVA類,生成圖片,再通過HTML文檔,將圖片加載到頁面來。

其次Web.xml配置文件還可以用來設(shè)置訪問安全目錄文件(WEB-INF)

 <servlet>
     <servlet-name>ajsp</servlet-name>
    <!-- 配置servlet用servlet-class, 配置jsp頁面用jsp-file標(biāo)簽 -->
     <jsp-file>/WEB-INF/jsps/a.jsp</jsp-file>
   </servlet>  
   <servlet>
    <servlet-name>CodeImgServlet</servlet-name>
    <servlet-class>cn.hncu.servlets.CodeImgServlet</servlet-class>
   </servlet>
   <servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>cn.hncu.servlets.LoginServlet</servlet-class>
   </servlet>


 <!-- 給servlet配置訪問路徑 -->

 <servlet-mapping>
  <servlet-name>ajsp</servlet-name>
  <url-pattern>/x/a.asp</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>CodeImgServlet</servlet-name>
  <url-pattern>/code</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>LoginServlet</servlet-name>
  <url-pattern>/LoginServlet</url-pattern>
 </servlet-mapping>

如有疑問請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望通過本文能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

最新評(píng)論