问答详情
源自:2-2 验证码的代码实现

验证码出不来

<%@ page language="java" contentType="text/html; charset=utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>checkCode</title>
	<script type="text/javascript">
		function reloadCode(){
			var time = new Date().getTime();
			document.getElementById("imagecode").src="<%request.getContextPath();%>/yanzheng/ImageServlet?d="+time;
		}
	</script>
</head>
<body>
	验证码:<input type="text" name="checkcode"/>
		<img alt="验证码" id="imagecode" src="<%request.getContextPath();%>/yanzheng/ImageServlet" />
		<a href="javascript:reloadCode();">看不清楚</a><br>

</body>
</html>




package com.imooc.yanzheng;

import java.awt.Color;
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.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ImageServlet
 */
@WebServlet(name="ImageServlet",urlPatterns={"/yanzheng/ImageServlet"})
public class ImageServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ImageServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)  {

		BufferedImage bi = new BufferedImage(66,22,BufferedImage.TYPE_INT_RGB);
		Graphics g = bi.getGraphics();
		Color c = new Color(200,150,255);
		g.setColor(c);
		g.fillRect(0, 0, 68, 22);
		
		char[] ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456798".toCharArray();
		Random r = new Random();
		int len = ch.length,index;
		StringBuffer sb = new StringBuffer();
		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.drawString(ch[index]+"", (i*15)+3, 18);
			sb.append(ch[index]);
		}
		request.getSession().setAttribute("piccode", sb.toString());
		try {
			ImageIO.write(bi, "JPG", response.getOutputStream());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	
	
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

http://img.mukewang.com/57a137f500013a4b04880514.jpg

提问者:大咪 2016-08-03 08:17

个回答

  • 丫丫小小笑
    2016-08-03 10:11:26
    已采纳

    http://img.mukewang.com/57a1525700016bac06670023.jpg


    这里路径写错了吧,首先<% 后边缺少一个等号,其次访问路径好像也不太对,建议你看一下你点击获取的时候路径的变化以及报错信息。

  • 丫丫小小笑
    2016-08-04 10:36:31

    不是的,jsp表达式使用的就是<%= %>这样的方式,你应该是看错了。

    <%

    String path = request.getContextPath();

    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

    %>

    path是获取的根目录,你也可以写<%=path>/......路径/.