把學到的知識與實際應用相結合,到網上查資料做的練習
一 新建login.jsp
<%@page contentType="text/html; charset=gb2312" %>
<html>
<head><title>登錄</title></head>
<script language='javascript'>
function switchImage() {
var image=document.getElementById('randomImage');
image.src="ServletDemo/servlet/ImageServlet";
return false;
}
</script>
<body>
<form action="servlet/LoginServlet" method="post">
姓名:<input type="test" name="UserName"><br>
密碼:<input type="password" name="Pwd"><br>
驗證碼:<input type="text" size="10" name="ValCode">
<img src="ServletDemo/servlet/ImageServlet" name="randomImage"><!-- 插入驗證碼圖片 -->
<a href="javascript:" onclick='return switchImage();'><font>看不清,換一張!</font></a>
<br><input type="submit">
</form>
</body>
</html>
二 建立ImageServlet.java
package com;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;
import java.util.Random;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.*;
public class ImageServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("image/jpeg");
//設置瀏覽器不要緩存此圖片
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-control","no-cache");
response.setDateHeader("Expires",0);
//獲得輸出的管道,把BufferedImage裏面的數據寫到頁面
OutputStream out=response.getOutputStream();
//定義緩存圖片的高度與寬度
int width=80,height=20;
//分配一塊內存存儲圖片
BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//獲得畫筆
Graphics g=image.getGraphics();
//獲得產生隨機數對象
Random random=new Random();
//在分配的內存中畫一個矩形
g.fillRect(0, 0, width, height);
//設置矩形內的字體格式
g.setFont(new Font("Times New Roman",Font.ITALIC,18));
//存儲四位隨機數
String sRand="";
for(int i=0;i<4;i++){
//在獲得小於10的一個隨機數
String rand=String.valueOf(random.nextInt(10));
sRand+=rand;
//設置隨機數顏色
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
//把產生的隨機數畫在矩形內, 20是高度,20*i+6 隨機數的寬度
g.drawString(rand, 20*i+6, 20);
}
request.getSession().setAttribute("valCode", sRand);
g.dispose();
//將產生的隨機數寫到client端
ImageIO.write(image,"JPEG",out);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}
三 配置web.xml
<servlet>
<servlet-name>ImageServlet</servlet-name>
<servlet-class>com.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ImageServlet</servlet-name>
<url-pattern>/ServletDemo/servlet/ImageServlet</url-pattern>
</servlet-mapping>
完畢!!!
四 網上有些關於效率的討論
這句效率極低...
try{
com.sun.jimi.core.Jimi.putImage("image/jpeg", image4, out);
}catch(Exception e){
e.printStackTrace();
}
速度快,需要使用Sun提供的包,獨立;
下載地址,不知道現在是否換有效:http://java.sun.com/products/jimi/