本文目錄一覽:
jsp中顯示驗證碼的代碼怎麼寫?
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
/*生成驗證碼圖片
*/
public class MakeCertPic {
//驗證碼圖片中可以出現的字符集,可以根據需要修改
private char mapTable[]={
‘a’,’b’,’c’,’d’,’e’,’f’,
‘g’,’h’,’i’,’j’,’k’,’l’,
‘m’,’n’,’o’,’p’,’q’,’r’,
‘s’,’t’,’u’,’v’,’w’,’x’,
‘y’,’z’,’0′,’1′,’2′,’3′,
‘4’,’5′,’6′,’7′,’8′,’9′
};
/* 功能:生成彩色驗證碼圖片
參數wedth為生成圖片的寬度,參數height為生成圖片的高度,參數os為頁面的輸出流
*/
public String getCertPic(int width,int height,OutputStream os){
if(width=0)
width=60;
if(height=0)
height=20;
BufferedImage image= new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//獲取圖形上下文
Graphics g = image.getGraphics();
//設定背景顏色
g.setColor(new Color(0xDCDCDC));
g.fillRect(0,0,width,height);
//畫邊框
g.setColor(Color.black);
g.drawRect(0,0,width-1,height-1);
//隨機產生的驗證碼
String strEnsure = “”;
//4代表4為驗證碼,如果要產生更多位的驗證碼,則加大數值
for(int i = 0;i4;++i){
strEnsure += mapTable[(int) (mapTable.length*Math.random())];
}
//將認證碼顯示到圖像中,如果要生成更多位的驗證碼,增加drawString語句
g.setColor(Color.black);
g.setFont(new Font(“Atlantic Inline”,Font.PLAIN,18));
String str = strEnsure.substring(0,1);
g.drawString(str,8,17);
str = strEnsure.substring(1,2);
g.drawString(str, 20, 15);
str = strEnsure.substring(2,3);
g.drawString(str, 35, 18);
str = strEnsure.substring(3,4);
g.drawString(str, 45, 15);
//隨機產生15個干擾點
Random rand = new Random();
for(int i=0; i10; i++){
int x = rand.nextInt(width);
int y = rand.nextInt(height);
g.drawOval(x,y,1,1);
}
//釋放圖形上下文
g.dispose();
try{
//輸出圖形到頁面
ImageIO.write(image, “JPEG”, os);
}catch (IOException e){
return “”;
}
return strEnsure;
}
}
makeCertPic.jsp頁面用於調用生成驗證碼圖片的JavaBean,並在客戶端顯示,源代碼如下:
%@page contentType=”image/jpeg” %%@page language=”java” pageEncoding=”utf-8″%jsp:useBean id=”image” scope=”page” class=”securityCode.pic.MakeCertPic”/%
String str = image.getCertPic(0,0,response.getOutputStream());
//將驗證碼存入session中
session.setAttribute(“certCode”,str);
%
下邊是登錄頁面:
%@ page language=”java” contentType=”text/html; charset=UTF-8″
pageEncoding=”UTF-8″%
!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “”
html
head
meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″
title驗證碼測試登錄頁面/title
script type=”text/javascript”
function changeimg()
{
var myimg = document.getElementById(“code”);
now = new Date();
myimg.src=”makeCertPic.jsp?code=”+now.getTime();
}
/script
/head
body
center
form action=”loginCheck.jsp” method=”post” /
用戶名:input type=”text” name=”username” /br
密nbsp;nbsp;碼:input type=”password” name=”password”/br
nbsp;驗證碼:input type=”text” name=”certCode”/
img id=”code” src=”makeCertPic.jsp”a href=”javascript:changeimg()”看不清,換一張 /abr
input type=”submit” value=”登錄”/
/form
/center
/body
/html
JSP中點擊新聞標題顯示顯示新聞內容要怎麼?急~~跪求..開發高手們
你的新聞標題和內容應該在數據庫中,你應該寫一個類,裏面有根據新聞ID或者新聞標題獲取這條新聞的方法,取出來,放到request中,然後再shownews.jsp文件中拿出新聞的標題和內容.
JSP驗證碼
package com.shown.netshop.action;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
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 javax.servlet.jsp.JspWriter;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class ValidateCodeActionServlet extends HttpServlet {
private static int width = 80;
private static int heigth = 25;
private static int font_size = 20;
private static Random random = new Random();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(“image/jpeg”);
String content = this.getRandomStr();
request.getSession().setAttribute(“correctCode”, content);
ServletOutputStream out = response.getOutputStream();
//構建緩衝圖像
BufferedImage bi = new BufferedImage(80,25,BufferedImage.TYPE_INT_BGR);
//設置繪圖上下文
Graphics2D g = bi.createGraphics();
g.setColor(Color.white);
g.fillRect(0, 0, width, heigth);
//設置字體
g.setFont(new Font(“宋體”,Font.BOLD,font_size));
g.setColor(Color.black);
for(int i = 0 ; i 30 ; i ++){
int x1 = random.nextInt(80);
int y1 = random.nextInt(25);
int x2 = random.nextInt(80);
int y2 = random.nextInt(25);
g.setColor(this.getRandomColor());
g.drawLine(x1, y1, x2, y2);
}
for(int i = 0 ; i 500 ; i ++){
g.setColor(this.getRandomColor());
g.drawOval(random.nextInt(80), random.nextInt(25), 0, 0);
}
g.drawString(content, 10, 18);//—————————————-
JPEGImageEncoder coder = JPEGCodec.createJPEGEncoder(out);
coder.encode(bi);
out.flush();
out.close();
}
/**
* get four numbers random
* @return String
*/
private String getRandomStr() {
String str = “”;
for(int i = 0 ; i 4 ; i ++){
int temp = random.nextInt(10);
str += temp;
}
return str;
}
/**
* get a random color
* @return Color
*/
private Color getRandomColor(){
int R = random.nextInt(255);
int G = random.nextInt(255);
int B = random.nextInt(255);
Color color = new Color(R,G,B);
return color;
}
}
求JSP編寫驗證碼程序的代碼注釋
你的實在看不太清,見諒…我給你一個,有注釋的!這個功能通常一共3個頁面:index.jsp是用來登錄用的,在其中顯示驗證碼,即img src=”image.jsp”/
image.jsp是用來生成驗證碼的,有注釋,很詳細,如再不行,你複製到百度就有詳解了。
result.jsp 是用來判斷輸入是否正確的。
相信你一定能看明白…別忘了採納哦,謝謝。。。
【1.index.jsp】
%@ page language=”java” import=”java.util.*” pageEncoding=”GBK”%
htmlbody
form method=post action=”result.jsp”
input type=text name=input maxlength=4
img border=0 src=”image.jsp”
input type=”submit” value=”submit”
/form/body/html
【2.image.jsp】
%@ page contentType=”image/JPEG”
import=”java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*”
pageEncoding=”GBK”%
%!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);
}%
%
//設置頁面不緩存
response.setHeader(“Pragma”, “No-cache”);
response.setHeader(“Cache-Control”, “no-cache”);
response.setDateHeader(“Expires”, 0);
// 在內存中創建圖象
int width = 60, height = 20;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 獲取圖形上下文
Graphics g = image.getGraphics();
//生成隨機類
Random random = new Random();
// 設定背景色
g.setColor(getRandColor(200, 250));
g.fillRect(0, 0, width, height);
//設定字體
g.setFont(new Font(“Times New Roman”, Font.PLAIN, 18));
//畫邊框
//g.setColor(new Color());
//g.drawRect(0,0,width-1,height-1);
// 隨機產生155條幹擾線,使圖象中的認證碼不易被其它程序探測到
g.setColor(getRandColor(160, 200));
for (int i = 0; i 100; 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);
}
// 取隨機產生的認證碼(4位數字)
String sRand = “”;
for (int i = 0; i 4; i++) {
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)));//調用函數出來的顏色相同,可能是因為種子太接近,所以只能直接生成
g.drawString(rand, 13 * i + 6, 16);
}
// 將認證碼存入SESSION
session.setAttribute(“code”, sRand);
// 圖象生效
g.dispose();
// 輸出圖象到頁面
ImageIO.write(image, “JPEG”, response.getOutputStream());
%
【3.result.jsp】
%@ page language=”java” import=”java.util.*” pageEncoding=”GBK”%
htmlbody
%
String input=request.getParameter(“input”);
String code=(String)session.getAttribute(“code”);
if(input.equals(code)){
out.println(“驗證成功!”);
}else{
out.println(“驗證失敗!”);
}
%
bodyhtml
jsp頁面該如何刷新驗證碼
(1)jsp代碼:
img id = “img_authcode” src=”${ctx}/account/authcode” /a href=”javascript:;” onclick=”javascript:document.getElementById(‘img_authcode’).setAttribute(‘src’, ‘${ctx}/account/authcode?’ + Math.random())”換一換/a
(2)java代碼(該代碼為我自己框架代碼,跟servlet寫法不一樣的我都給你注釋了):
public View authcode() throws IOException {
HttpServletResponse response = PuffContext.getResponse();//獲取response
response.setContentType(“image/jpeg”);
response.setHeader(“Pragma”, “No-cache”);
response.setHeader(“Cache-Control”, “no-cache”);
response.setDateHeader(“Expires”, 0);
String authCode = AuthCodeUtil.getRandom(4); //獲取驗證碼,代碼在下面(3)
System.out.println(“生成隨機碼:” + authCode);
PuffContext.getSession().setAttribute(“session_authcode”, authCode);//把該驗證碼存儲在session
ServletOutputStream output = response.getOutputStream();
AuthCodeUtil.draw(output, authCode);
output.flush();
output.close();
return ViewFactory.nullView();//返回null
}
(3)///////////////////////////下面為生成驗證碼類////////////////////////////////////
public class AuthCodeUtil {
private final static Random random = new Random();
// 隨機字體樣式
private final static int[] fontStyle = { Font.HANGING_BASELINE, Font.ITALIC, Font.LAYOUT_LEFT_TO_RIGHT, Font.LAYOUT_NO_LIMIT_CONTEXT,
Font.LAYOUT_NO_START_CONTEXT, Font.LAYOUT_RIGHT_TO_LEFT };
/**
* 畫隨機碼圖
*
* @param out
* @param width
* @param height
* @throws IOException
*/
public static void draw(OutputStream out, String value) throws IOException {
int width = 80, height = 30;
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = (Graphics2D) bi.getGraphics();
g.setColor(Color.WHITE);
g.fillRect(0, 0, width, height);
g.drawRect(1, 1, width – 2, height – 2);
for (int i = 0; i 10; i++) {
g.setColor(randColor(150, 250));
g.drawOval(random.nextInt(110), random.nextInt(24), 5 + random.nextInt(10), 5 + random.nextInt(10));
}
int n = (int) (Math.random() * 6);
Font mFont = new Font(“Arial”, fontStyle[n], 23);
g.setFont(mFont);
g.setColor(randColor(10, 240));
g.drawString(value, 10, 21);// 隨機數,水平距離,垂直距離
ImageIO.write(bi, “png”, out);
}
private static Color randColor(int fc, int bc) {// 給定範圍獲得隨機顏色
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);
}
public static void main(String[] args) throws IOException {
FileOutputStream out = new FileOutputStream(“d:\\aa.png”);
draw(out, getRandom(4));
}
public static String getRandom(int size) {// 隨機字符串
char[] c = { ‘1’, ‘3’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’ };
StringBuffer sb = new StringBuffer();
for (int i = 0; i size; i++)
sb.append(c[Math.abs(random.nextInt()) % c.length]);
return sb.toString();
}
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/235672.html