Java generated image verification code (containing all letters, addition, subtraction, Chinese) three methods

If you are fortunate enough to see after reading this article has helped you please comment thank you praise concern

  • The first method all letters and digits 
package com.myFirstSpring.util;

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.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 
 * @Description 生成验证码
 * @author waa
 * @version V1.0, 日期2011-7-4
 */
public class ValidateCodeUtils extends HttpServlet {

	private static final long serialVersionUID = -1409007752285164213L;
	private static int width = 75;
	private static int height = 35;
	// private static char[] ch =
	// "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789".toCharArray();
	private static char[] ch = "abcdefghijklmnopqrstuvwxyz0123456789".toCharArray();

	public void doGet(HttpServletRequest request, HttpServletResponse response)

	throws ServletException, IOException {

		this.doPost(request, response);

	}

	// 生成数字和字母的验证码
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		processRequest(request, response);
	}

	protected void processRequest(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 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 < 155; 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位数字)
		StringBuffer sb = new StringBuffer();
		int index, len = ch.length;
		for (int i = 0; i < 4; i++) {
			index = random.nextInt(len);
			g.setColor(new Color(random.nextInt(88), random.nextInt(188),
					random.nextInt(255)));
			g.setFont(new Font("Arial", Font.ITALIC, 28));// 输出的字体和大小
			g.drawString("" + ch[index], (i * 15) + 6, 26);// 写什么数字,在图片的什么位置画
			sb.append(ch[index]);
		}
		// 将认证码存入SESSION
		request.getSession().setAttribute("piccode", sb.toString());
		request.getSession().setAttribute(request.getSession().getId(), sb.toString());
		
		// 图象生效
		g.dispose();
		ServletOutputStream responseOutputStream = response.getOutputStream();
		// 输出图象到页面
		ImageIO.write(image, "JPEG", responseOutputStream);

		// 以下关闭输入流!
		responseOutputStream.flush();
		responseOutputStream.close();
		 
	}

	protected void ValidateCode(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// 在内存中创建图象
		BufferedImage img = new BufferedImage(width, height,
				BufferedImage.TYPE_INT_RGB);
		// 得到该图片的绘图对象
		Graphics g = img.getGraphics();

		Random r = new Random();
		Color c = new Color(200, 150, 255);
		g.setColor(c);

		// 填充整个图片的颜色
		g.fillRect(0, 0, width, height);

		// 向图片中输出数字和字母
		StringBuffer sb = new StringBuffer();
		int index, len = ch.length;
		for (int i = 0; i < 4; i++) {
			index = r.nextInt(len);
			g
					.setColor(new Color(r.nextInt(88), r.nextInt(188), r
							.nextInt(255)));
			g.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 22));// 输出的字体和大小
			g.drawString("" + ch[index], (i * 15) + 6, 18);// 写什么数字,在图片的什么位置画
			sb.append(ch[index]);
		}

		request.getSession().setAttribute("piccode", sb.toString());
		ServletOutputStream responseOutputStream = response.getOutputStream();
		ImageIO.write(img, "JPG", responseOutputStream);
		responseOutputStream.flush();
		responseOutputStream.close();
	}

	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);
	}

	/**
	 * 得到某一个类的路径
	 * 
	 * @param name
	 * @return
	 */
	public static String getPath(Class name) {
		String strResult = null;
		if (System.getProperty("os.name").toLowerCase().indexOf("window") > -1) {
			strResult = name.getResource("/").toString().replace("file:/", "")
					.replace("%20", " ");
		} else {
			strResult = name.getResource("/").toString().replace("file:", "")
					.replace("%20", " ");
		}
		return strResult;
	}
}
  • The second Chinese character 

 

 

package com.myFirstSpring.util;
 
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
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 冰雨凌風
 * 
 */
public class ValidateCodeUtils_zh extends HttpServlet {
    /**
	 * 
	 */
	private static final long serialVersionUID = 6699312412706395069L;
	public static final int WIDTH = 120;
    public static final int HEIGHT = 30;
 
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doPost(request, response);
    }
 
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        // 创建缓存
        BufferedImage bi = new BufferedImage(WIDTH, HEIGHT,
                BufferedImage.TYPE_INT_RGB);
        // 获得画布
        Graphics g = bi.getGraphics();
 
        // 设置背影色
        setBackGround(g);
        // 设置边框
        setBorder(g);
        // 画干扰线
        drawRandomLine(g);
        // 写随机数
        String random = drawRandomNum((Graphics2D) g);
        // 将随机汉字存在session中
        request.getSession().setAttribute("piccode", random);
        // 将图形写给浏览器
        response.setContentType("image/jpeg");
        // 发头控制浏览器不要缓存
        response.setDateHeader("expries", -1);
        response.setHeader("Cache-Control", "no-cache");
        response.setHeader("Pragma", "no-cache");
        // 将图片写给浏览器
        ImageIO.write(bi, "jpg", response.getOutputStream());
    }
 
    /**
     * 设置背景色
     * 
     * @param g
     */
    private void setBackGround(Graphics g) {
        // 设置颜色
        g.setColor(Color.WHITE);
        // 填充区域
        g.fillRect(0, 0, WIDTH, HEIGHT);
 
    }
 
    /**
     * 设置边框
     * 
     * @param g
     */
    private void setBorder(Graphics g) {
        // 设置边框颜色
        g.setColor(Color.BLUE);
        // 边框区域
        g.drawRect(1, 1, WIDTH - 2, HEIGHT - 2);
    }
 
    /**
     * 画随机线条
     * 
     * @param g
     */
    private void drawRandomLine(Graphics g) {
        // 设置颜色
        g.setColor(Color.GREEN);
        // 设置线条个数并画线
        for (int i = 0; i < 5; i++) {
            int x1 = new Random().nextInt(WIDTH);
            int y1 = new Random().nextInt(HEIGHT);
            int x2 = new Random().nextInt(WIDTH);
            int y2 = new Random().nextInt(HEIGHT);
            g.drawLine(x1, y1, x2, y2);
        }
 
    }
 
    /**
     * 画随机汉字
     * 
     * @param g
     * @return
     */
    private String drawRandomNum(Graphics2D g) {
        StringBuffer sb = new StringBuffer();
        // 设置颜色
        g.setColor(Color.RED);
        // 设置字体
        g.setFont(new Font("宋体", Font.BOLD, 20));
        // 准备常用汉字集
        String base = "\u7684\u4e00\u4e86\u662f\u6211\u4e0d\u5728\u4eba\u4eec\u6709\u6765\u4ed6\u8fd9\u4e0a\u7740\u4e2a\u5730\u5230\u5927\u91cc\u8bf4\u5c31\u53bb\u5b50\u5f97\u4e5f\u548c\u90a3\u8981\u4e0b\u770b\u5929\u65f6\u8fc7\u51fa\u5c0f\u4e48\u8d77\u4f60\u90fd\u628a\u597d\u8fd8\u591a\u6ca1\u4e3a\u53c8\u53ef\u5bb6\u5b66\u53ea\u4ee5\u4e3b\u4f1a\u6837\u5e74\u60f3\u751f\u540c\u8001\u4e2d\u5341\u4ece\u81ea\u9762\u524d\u5934\u9053\u5b83\u540e\u7136\u8d70\u5f88\u50cf\u89c1\u4e24\u7528\u5979\u56fd\u52a8\u8fdb\u6210\u56de\u4ec0\u8fb9\u4f5c\u5bf9\u5f00\u800c\u5df1\u4e9b\u73b0\u5c71\u6c11\u5019\u7ecf\u53d1\u5de5\u5411\u4e8b\u547d\u7ed9\u957f\u6c34\u51e0\u4e49\u4e09\u58f0\u4e8e\u9ad8\u624b\u77e5\u7406\u773c\u5fd7\u70b9\u5fc3\u6218\u4e8c\u95ee\u4f46\u8eab\u65b9\u5b9e\u5403\u505a\u53eb\u5f53\u4f4f\u542c\u9769\u6253\u5462\u771f\u5168\u624d\u56db\u5df2\u6240\u654c\u4e4b\u6700\u5149\u4ea7\u60c5\u8def\u5206\u603b\u6761\u767d\u8bdd\u4e1c\u5e2d\u6b21\u4eb2\u5982\u88ab\u82b1\u53e3\u653e\u513f\u5e38\u6c14\u4e94\u7b2c\u4f7f\u5199\u519b\u5427\u6587\u8fd0\u518d\u679c\u600e\u5b9a\u8bb8\u5feb\u660e\u884c\u56e0\u522b\u98de\u5916\u6811\u7269\u6d3b\u90e8\u95e8\u65e0\u5f80\u8239\u671b\u65b0\u5e26\u961f\u5148\u529b\u5b8c\u5374\u7ad9\u4ee3\u5458\u673a\u66f4\u4e5d\u60a8\u6bcf\u98ce\u7ea7\u8ddf\u7b11\u554a\u5b69\u4e07\u5c11\u76f4\u610f\u591c\u6bd4\u9636\u8fde\u8f66\u91cd\u4fbf\u6597\u9a6c\u54ea\u5316\u592a\u6307\u53d8\u793e\u4f3c\u58eb\u8005\u5e72\u77f3\u6ee1\u65e5\u51b3\u767e\u539f\u62ff\u7fa4\u7a76\u5404\u516d\u672c\u601d\u89e3\u7acb\u6cb3\u6751\u516b\u96be\u65e9\u8bba\u5417\u6839\u5171\u8ba9\u76f8\u7814\u4eca\u5176\u4e66\u5750\u63a5\u5e94\u5173\u4fe1\u89c9\u6b65\u53cd\u5904\u8bb0\u5c06\u5343\u627e\u4e89\u9886\u6216\u5e08\u7ed3\u5757\u8dd1\u8c01\u8349\u8d8a\u5b57\u52a0\u811a\u7d27\u7231\u7b49\u4e60\u9635\u6015\u6708\u9752\u534a\u706b\u6cd5\u9898\u5efa\u8d76\u4f4d\u5531\u6d77\u4e03\u5973\u4efb\u4ef6\u611f\u51c6\u5f20\u56e2\u5c4b\u79bb\u8272\u8138\u7247\u79d1\u5012\u775b\u5229\u4e16\u521a\u4e14\u7531\u9001\u5207\u661f\u5bfc\u665a\u8868\u591f\u6574\u8ba4\u54cd\u96ea\u6d41\u672a\u573a\u8be5\u5e76\u5e95\u6df1\u523b\u5e73\u4f1f\u5fd9\u63d0\u786e\u8fd1\u4eae\u8f7b\u8bb2\u519c\u53e4\u9ed1\u544a\u754c\u62c9\u540d\u5440\u571f\u6e05\u9633\u7167\u529e\u53f2\u6539\u5386\u8f6c\u753b\u9020\u5634\u6b64\u6cbb\u5317\u5fc5\u670d\u96e8\u7a7f\u5185\u8bc6\u9a8c\u4f20\u4e1a\u83dc\u722c\u7761\u5174\u5f62\u91cf\u54b1\u89c2\u82e6\u4f53\u4f17\u901a\u51b2\u5408\u7834\u53cb\u5ea6\u672f\u996d\u516c\u65c1\u623f\u6781\u5357\u67aa\u8bfb\u6c99\u5c81\u7ebf\u91ce\u575a\u7a7a\u6536\u7b97\u81f3\u653f\u57ce\u52b3\u843d\u94b1\u7279\u56f4\u5f1f\u80dc\u6559\u70ed\u5c55\u5305\u6b4c\u7c7b\u6e10\u5f3a\u6570\u4e61\u547c\u6027\u97f3\u7b54\u54e5\u9645\u65e7\u795e\u5ea7\u7ae0\u5e2e\u5566\u53d7\u7cfb\u4ee4\u8df3\u975e\u4f55\u725b\u53d6\u5165\u5cb8\u6562\u6389\u5ffd\u79cd\u88c5\u9876\u6025\u6797\u505c\u606f\u53e5\u533a\u8863\u822c\u62a5\u53f6\u538b\u6162\u53d4\u80cc\u7ec6";
        int x = 5;
        // 控制字数
        for (int i = 0; i < 4; i++) {
            // 设置字体旋转角度
            int degree = new Random().nextInt() % 30;
            // 截取汉字
            String ch = base.charAt(new Random().nextInt(base.length())) + "";
            sb.append(ch);
            // 正向角度
            g.rotate(degree * Math.PI / 180, x, 20);
            g.drawString(ch, x, 20);
            // 反向角度
            g.rotate(-degree * Math.PI / 180, x, 20);
            x += 30;
        }
        return sb.toString();
    }
}
  • A third way of addition, subtraction  
package com.myFirstSpring.util;

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.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 
 * @Description 生成验证码(加减乘)
 * @author waa
 * @version V1.0, 日期2011-7-4
 */
public class ValidateCodeUtils_algorithm extends HttpServlet {

	private static final long serialVersionUID = -1409007752285164213L;
	private static int width = 75;
	private static int height = 35; 
	// private static char[] ch =
	// "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789".toCharArray();
	private static char[] ch = "0123456789".toCharArray();
	private static char[] sf = "+-x".toCharArray();
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)

	throws ServletException, IOException {

		this.doPost(request, response);

	}

	// 生成数字和字母的验证码
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		processRequest(request, response);
	}

	protected void processRequest(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 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 < 155; 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位数字)
		StringBuffer sb = new StringBuffer();
		int index, len = ch.length;
		index = random.nextInt(len);
		g.setColor(new Color(random.nextInt(88), random.nextInt(188),
				random.nextInt(255)));
		g.setFont(new Font("Arial", Font.ITALIC, 20));// 输出的字体和大小
		g.drawString("" + ch[index], (0 * 15), 26);// 写什么数字,在图片的什么位置画
		sb.append(ch[index]);
		
		int index1, len1 = sf.length;
		index1 = random.nextInt(len1);
		g.setColor(new Color(random.nextInt(88), random.nextInt(188),
				random.nextInt(255)));
		g.setFont(new Font("Arial", Font.ITALIC, 20));// 输出的字体和大小
		g.drawString("" + sf[index1], (1 * 15), 26);// 写什么数字,在图片的什么位置画
		sb.append(sf[index1]);
		
		
		int index2, len2 = ch.length;
		index2 = random.nextInt(len2);
		g.setColor(new Color(random.nextInt(88), random.nextInt(188),
				random.nextInt(255)));
		g.setFont(new Font("Arial", Font.ITALIC, 20));// 输出的字体和大小
		
		if(String.valueOf(sf[index1]).equals("-")){
			if(Integer.parseInt(String.valueOf(ch[index])) < Integer.parseInt(String.valueOf(ch[index2]))){
				index2 = index;
			}	
		}
		
		g.drawString("" + ch[index2], (2 * 15) , 26);// 写什么数字,在图片的什么位置画
		sb.append(ch[index2]);
		

		g.setColor(new Color(random.nextInt(88), random.nextInt(188),
				random.nextInt(255)));
		g.setFont(new Font("Arial", Font.ITALIC, 20));// 输出的字体和大小
		g.drawString("=", (3 * 15) , 26);// 写什么数字,在图片的什么位置画
		sb.append("=");
		
		g.setColor(new Color(random.nextInt(88), random.nextInt(188),
				random.nextInt(255)));
		g.setFont(new Font("Arial", Font.ITALIC, 20));// 输出的字体和大小
		g.drawString("?", (4 * 15) , 26);// 写什么数字,在图片的什么位置画
		sb.append("?");
		
	    g.drawLine(5, 3, 60, 35);
		// 将认证码存入SESSION
		int jg = 0;
		if(String.valueOf(sf[index1]).equals("+")){
			jg = Integer.parseInt(String.valueOf(ch[index])) + Integer.parseInt(String.valueOf(ch[index2]));
		}
		if(String.valueOf(sf[index1]).equals("-")){
			jg = Integer.parseInt(String.valueOf(ch[index])) - Integer.parseInt(String.valueOf(ch[index2]));
		}
		if(String.valueOf(sf[index1]).equals("x")){
			jg = Integer.parseInt(String.valueOf(ch[index])) * Integer.parseInt(String.valueOf(ch[index2]));
		}
		
		request.getSession().setAttribute("piccode", String.valueOf(jg));
		request.getSession().setAttribute(request.getSession().getId(), sb.toString());
		
		// 图象生效
		g.dispose();
		ServletOutputStream responseOutputStream = response.getOutputStream();
		// 输出图象到页面
		ImageIO.write(image, "JPEG", responseOutputStream);

		// 以下关闭输入流!
		responseOutputStream.flush();
		responseOutputStream.close();
		 
	}

	protected void ValidateCode(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// 在内存中创建图象
		BufferedImage img = new BufferedImage(width, height,
				BufferedImage.TYPE_INT_RGB);
		// 得到该图片的绘图对象
		Graphics g = img.getGraphics();

		Random r = new Random();
		Color c = new Color(200, 150, 255);
		g.setColor(c);

		// 填充整个图片的颜色
		g.fillRect(0, 0, width, height);

		// 向图片中输出数字和字母
		StringBuffer sb = new StringBuffer();
		int index, len = ch.length;
		for (int i = 0; i < 4; i++) {
			index = r.nextInt(len);
			g
					.setColor(new Color(r.nextInt(88), r.nextInt(188), r
							.nextInt(255)));
			g.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 22));// 输出的字体和大小
			g.drawString("" + ch[index], (i * 15) + 6, 18);// 写什么数字,在图片的什么位置画
			sb.append(ch[index]);
		}

		request.getSession().setAttribute("piccode", sb.toString());
		ServletOutputStream responseOutputStream = response.getOutputStream();
		ImageIO.write(img, "JPG", responseOutputStream);
		responseOutputStream.flush();
		responseOutputStream.close();
	}

	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);
	}

	/**
	 * 得到某一个类的路径
	 * 
	 * @param name
	 * @return
	 */
	public static String getPath(Class name) {
		String strResult = null;
		if (System.getProperty("os.name").toLowerCase().indexOf("window") > -1) {
			strResult = name.getResource("/").toString().replace("file:/", "")
					.replace("%20", " ");
		} else {
			strResult = name.getResource("/").toString().replace("file:", "")
					.replace("%20", " ");
		}
		return strResult;
	}
}

 

Direct copy generation method of code can be tested 

Call the preceding methods are as follows

function flushVerifyImg() {
	var timenow = new Date().getTime(); 
    $("#VerifyImg").attr("src", '/servlet/Validate?d=' + timenow);
    return false;
}

Then the configuration file web.xml configuration is as follows

<servlet>
    <servlet-name>Validate</servlet-name>
    <servlet-class>com.myFirstSpring.util.ValidateCodeUtils</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Validate</servlet-name>
    <url-pattern>/servlet/Validate</url-pattern>
  </servlet-mapping>

Which is an important document that you need to configure the correct path is  com.myFirstSpring.util.ValidateCodeUtils

I put it in the project configuration file 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <display-name>CoBiker</display-name>
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>*</url-pattern>
  </filter-mapping>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>Validate</servlet-name>
    <servlet-class>com.myFirstSpring.util.ValidateCodeUtils</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Validate</servlet-name>
    <url-pattern>/servlet/Validate</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.ftl</welcome-file>
  </welcome-file-list>
  <error-page>
    <error-code>404</error-code>
    <location>/WEB-INF/view/404.ftl</location> <!-- 1 错误页面跳转 本地项目因为是8080访问所以会报错  /WEB-INF/view/error.ftl --> <!-- 2还可以通过控制器来实现跳转 /404 -->
  </error-page>
  <error-page>
    <error-code>500</error-code>
    <location>/index.ftl</location>
  </error-page>
  <login-config>
    <auth-method>BASIC</auth-method>
  </login-config>
</web-app>

 

Published 72 original articles · won praise 3 · views 20000 +

Guess you like

Origin blog.csdn.net/tanqingfu1/article/details/104022041