`
收藏列表
标题 标签 来源
c标签新应用 jsp
<c:forEach items="${messages}"
var="item"
begin="0"
end="9"
step="1"
varStatus="var">
……
</c:forEach>
上面这段代码的意思是针对messages 对象进行循环,循环中的每个循环项的引用变量为
item,循环范围是从0到9,每次步长为1。而varStatus则定义了一个循环状态变量var,
循环状态变量中保存了循环进行时的状态信息,包括以下几个属性:
属性 类型 说明
index int 当前循环索引号
count int 成员总数
first boolean 当前成员是否首位成员
last boolean 当前成员是否末尾成员
再看:
<c:if test="${var.index % 2 == 0}">
*
</c:if>
登录验证码 jsp
package com.itJob.wit.ImageValidate;

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

/**
 * 描述:画验证码类
 * 
 * @author 吴进 2008-5-11
 *         <p>
 * 
 */
public class ImageValidateCodeServlet extends HttpServlet {

	/**
	 * Constructor of the object.
	 */
	public ImageValidateCodeServlet() {
		super();
	}

	/**
	 * Destruction of the servlet. <br>
	 */
	public void destroy() {
		super.destroy();
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 首先设置页面不缓存
		response.setHeader("pragma", "po-cache");
		response.setHeader("cache-control", "no-cache");
		response.setDateHeader("Expires", 0);

		// 定义图片的宽度和高度
		int width = 100, height = 40;
		// 创建一个图像对象
		BufferedImage image = new BufferedImage(width, height,
				BufferedImage.TYPE_INT_RGB);
		// 得到图像的环境对象
		Graphics g = image.createGraphics();

		Random random = new Random();
		// 用随机颜色填充图像背景
		g.setColor(getRandBgcolor(180, 250));
		g.fillRect(0, 0, width, height);
		for (int i = 0; i < 5; i++) {
			g.setColor(getRandBgcolor(50, 100));
			int x = random.nextInt(width);
			int y = random.nextInt(height);
			g.drawOval(x, y, 4, 4);
		}
		// 设置字体,下面准备画随机数
		g.setFont(new Font("", Font.PLAIN, 40));
		// 随机数字符串
		StringBuffer sbRandomValidateCode = new StringBuffer();
		for (int i = 0; i < 4; i++) {
			// 生成四个数字字符
			String rand = String.valueOf(random.nextInt(10));
			sbRandomValidateCode.append(rand);

			// 生成随机颜色
			g.setColor(new Color(20 + random.nextInt(80), 20 + random
					.nextInt(100), 20 + random.nextInt(90)));

			// 将随机数字画在图像上
			g.drawString(rand, (17 + random.nextInt(3)) * i + 8, 34);

			// 生成干扰线
			for (int k = 0; k < 12; k++) {
				int x = random.nextInt(width);
				int y = random.nextInt(height);
				int xl = random.nextInt(9);
				int yl = random.nextInt(9);
				g.drawLine(x, y, x + xl, y + yl);
			}
		}

		// 将生成的随机数字字符串写入Session
		request.getSession().setAttribute("randomValidateCode",
				sbRandomValidateCode.toString());
		// 使图像生效
		g.dispose();
		// 输出图像到页面
		ImageIO.write(image, "JPEG", response.getOutputStream());
	}

	/**
	 * 描述:产生随机背景色
	 * 
	 * @param fc
	 * @param bc
	 * @return
	 */
	public Color getRandBgcolor(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);
	}

	/**
	 * Initialization of the servlet. <br>
	 * 
	 * @throws ServletException
	 *             if an error occurs
	 */
	public void init() throws ServletException {
	}

}



<img src="<%=request.getContextPath()%>/ImageValidateCodeServlet" height="21" width="58">

 <!-- 验证码 -->
  <servlet>
	<servlet-name>ImageValidateCodeServlet</servlet-name>
	<servlet-class>com.itJob.wit.ImageValidate.ImageValidateCodeServlet</servlet-class>
  </servlet>
  <servlet-mapping>
	<servlet-name>ImageValidateCodeServlet</servlet-name>
	<url-pattern>/ImageValidateCodeServlet</url-pattern>
  </servlet-mapping>
  
Global site tag (gtag.js) - Google Analytics