response生成图片验证码
生活随笔
收集整理的這篇文章主要介紹了
response生成图片验证码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
新建一個java web工程
src 目錄下xieyuan包MyServlet.java文件(Servlet文件)
package xieyuan; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.PrintWriter; import java.net.URLEncoder; 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.corba.se.impl.javax.rmi.CORBA.Util; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; public class MyServlet extends HttpServlet { /** * Constructor of the object. */ public MyServlet() { super(); } /** * Destruction of the servlet. <br> */ public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } /** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { execute(request, response); } /** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { execute(request, response); } private static final char CHARS[]={'2','3','4','5','6','7','8','9','A','B','C','D','E', 'F','G','H','J','K','L','M','N','P','Q','R','S','T','U','V', 'W','X','Y','Z' }; public static Random random=new Random(); //生成隨機數字,len為需要隨機數字的個數 public static String getRandomString(int len) { StringBuilder builder=new StringBuilder(); for(int i=0;i<len;i++) { builder.append(CHARS[random.nextInt(CHARS.length)]) ; } return builder.toString(); } //隨機生成顏色,座位背景色 public static Color getColor() { return new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255)); } //取顏色的反色 public static Color getReverseColor(Color color) { return new Color(255-color.getRed(),255-color.getGreen(),255-color.getBlue()); } private void execute(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("utf-8"); //設置返回的文件編碼 response.setContentType("image/jpeg"); //獲取隨機碼 String getRandomCode=getRandomString(5); //將隨機碼放到Session中 request.getSession().setAttribute("randomcode", getRandomCode); int width=100; int height=30; Color color=getColor(); Color reverseColor=getReverseColor(color); //創建一個彩色圖片 BufferedImage bi=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); Graphics2D g=bi.createGraphics(); g.setFont(new Font(null,Font.BOLD,16)); g.setColor(color); g.fillRect(0,0,width,height); g.setColor(reverseColor); g.drawString(getRandomCode, 18,20); //繪制噪點,最多100個 for(int i=0,n=random.nextInt(100);i<n;i++) { g.drawRect(random.nextInt(width), random.nextInt(height), 1,1); } ServletOutputStream out=response.getOutputStream(); JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out); encoder.encode(bi); out.flush(); } /** * Initialization of the servlet. <br> * * @throws ServletException if an error occurs */ public void init() throws ServletException { } }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"><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>MyServlet</servlet-name> <servlet-class>xieyuan.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/servlet/MyServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>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"> --> <script language="JavaScript" > function reloadImage() { <!--將按鈕狀態設置為不可用,當圖片加載完成觸發onload后,按鈕狀態就為可用了。這樣可用避免重復獲取--> document.getElementById("btn").disabled=true; <!--第一次連接的時候不會有問題,第二次連接時,假如你后面沒有new Date().getTime(),加參數就會連接的時候拿緩存,沒有連到服務器。加上時間函數就能保證你每次得到的不是瀏覽器的緩存。--> document.getElementById("img").src="servlet/MyServlet?timestamp="+new Date().getTime(); } </script> </head> <body> <img src="servlet/MyServlet" id="img" οnlοad="btn.disabled=false;" /><br/><br/> <input type="button" value="換一張圖片" onClick="reloadImage()" id="btn" /><br/> <script>document.write("頁面最后更新:"+document.lastModified)</script> </body> </html>將java web放在服務器上啟動,最后訪問http://localhost:8088/firstWeb/,展示效果如下:
注:參考http://www.2cto.com/kf/201309/241744.html
轉載于:https://www.cnblogs.com/JDBC-xrch/p/6209642.html
總結
以上是生活随笔為你收集整理的response生成图片验证码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle数据库从入门到精通之三
- 下一篇: PHP代码在线格式化美化工具