用通过severlet配置的验证图显示不出来,而用JSP做的图没问题,估计是WEB.XML配置有问题,求教高手,
是不是severlet请求被其他Filter拦截了?生成验证图片的JAVA类package com.dingding.web;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.awt.*;
import java.awt.image.*;
import java.util.*;
import javax.imageio.*; /**
 * Description:
 * <br/>Copyright (C), 2001-2010, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee [email protected]
 * @version  1.0
 */
public class AuthImg extends HttpServlet
{
//定义图形验证码中绘制字符的字体
private final Font mFont =
new Font("Arial Black", Font.PLAIN, 16);
//定义图形验证码的大小
private final int IMG_WIDTH = 100;
private final int IMG_HEIGTH = 18;
//定义一个获取随机颜色的方法
private 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);
}
//重写service方法,生成对客户端的响应
public void service(HttpServletRequest request,
HttpServletResponse response) 
throws ServletException, IOException
{
//设置禁止缓存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");
BufferedImage image = new BufferedImage
(IMG_WIDTH , IMG_HEIGTH , BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
Random random = new Random();
g.setColor(getRandColor(200 , 250));
//填充背景色
g.fillRect(1, 1, IMG_WIDTH - 1, IMG_HEIGTH - 1);
//为图形验证码绘制边框
g.setColor(new Color(102 , 102 , 102));
g.drawRect(0, 0, IMG_WIDTH - 1, IMG_HEIGTH - 1);
g.setColor(getRandColor(160,200));
//生成随机干扰线
for (int i = 0 ; i < 80 ; i++)
{
int x = random.nextInt(IMG_WIDTH - 1);
int y = random.nextInt(IMG_HEIGTH - 1);
int xl = random.nextInt(6) + 1;
int yl = random.nextInt(12) + 1;
g.drawLine(x , y , x + xl , y + yl);
}
g.setColor(getRandColor(160,200));
//生成随机干扰线
for (int i = 0 ; i < 80 ; i++)
{
int x = random.nextInt(IMG_WIDTH - 1);
int y = random.nextInt(IMG_HEIGTH - 1);
int xl = random.nextInt(12) + 1;
int yl = random.nextInt(6) + 1;
g.drawLine(x , y , x - xl , y - yl);
}
//设置绘制字符的字体
g.setFont(mFont);
//用于保存系统生成的随机字符串
String sRand = "";
for (int i = 0 ; i < 6 ; i++)
{
String tmp = getRandomChar();
sRand += tmp;
//获取随机颜色
g.setColor(new Color(20 + random.nextInt(110)
,20 + random.nextInt(110)
,20 + random.nextInt(110)));
//在图片上绘制系统生成的随机字符
g.drawString(tmp , 15 * i + 10,15);
}
//获取HttpSesssion对象
HttpSession session = request.getSession(true);
//将随机字符串放入HttpSesssion对象中 
session.setAttribute("rand" , sRand);
g.dispose();
//向输出流中输出图片
ImageIO.write(image, "JPEG", response.getOutputStream());
}
//定义获取随机字符串方法
private String getRandomChar()
{
//生成一个0、1、2的随机数字
int rand = (int)Math.round(Math.random() * 2);
long itmp = 0;
char ctmp = '\u0000';
switch (rand)
{
//生成大写字母
case 1:
itmp = Math.round(Math.random() * 25 + 65);
ctmp = (char)itmp;
return String.valueOf(ctmp);
//生成小写字母
case 2:
itmp = Math.round(Math.random() * 25 + 97);
ctmp = (char)itmp;
return String.valueOf(ctmp);
//生成数字
default :
itmp = Math.round(Math.random() * 9);
return  itmp + "";
}
}
}
web.xml 配置:<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<display-name>DingDing-web</display-name>

<context-param>
      <param-name>log4jConfigLocation</param-name>
      <param-value>/WEB-INF/log4j.properties</param-value>
   </context-param>
   <context-param>
      <param-name>log4jRefreshInterval</param-name>
      <param-value>6000</param-value>
   </context-param>

<!-- Spring ApplicationContext配置文件的路径,可使用通配符,多个路径用,号分隔
此参数用于后面的Spring Context Loader -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/applicationContext*.xml</param-value>
</context-param>

<!-- Filter 定义  -->
<!-- Character Encoding filter -->
<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>

<!-- SpringSecurity filter-->
<filter>
<filter-name>AcegiFilterChainProxy</filter-name>
<filter-class>
org.acegisecurity.util.FilterToBeanProxy
</filter-class>
<init-param>
<param-name>targetClass</param-name>
<param-value>
org.acegisecurity.util.FilterChainProxy
</param-value>
</init-param>
</filter>

<!-- SpringSide's Hibernate Open Session In View filter-->
<filter>
<filter-name>hibernateOpenSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>

<filter>
<filter-name>Struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<param-name>actionPackages</param-name>
<param-value>com.dingding.web.action</param-value>
</init-param>
</filter>

<!-- Filter 映射 -->
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<filter-mapping>
<filter-name>AcegiFilterChainProxy</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> 

 <filter-mapping>  
    <filter-name>hibernateOpenSessionInViewFilter</filter-name>  
    <url-pattern>/*</url-pattern>  
 </filter-mapping>  

<filter-mapping>
<filter-name>Struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>

<!-- log4j -->
<listener>
      <listener-class>
        org.springframework.web.util.Log4jConfigListener
      </listener-class>
   </listener> 
   
<!--Spring的ApplicationContext载入 -->
<listener>
   <listener-class>
   org.springframework.web.context.ContextLoaderListener
   </listener-class>
   </listener>

<!-- Spring 刷新Introspector防止内存泄露 -->
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>

<!-- 配置验证图 -->
<servlet>
<servlet-name>RandomCodeServlet</servlet-name>
<servlet-class>com.dingding.web.AuthImg</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RandomCodeServlet</servlet-name>
<url-pattern>/RandomCodeServlet</url-pattern>
</servlet-mapping>

<!-- session超时定义,单位为分钟 -->
<session-config>
<session-timeout>20</session-timeout>
</session-config>



<!-- 出错页面定义 -->
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/common/500.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/common/500.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/common/404.jsp</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/common/403.jsp</location>
</error-page>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
</web-app>
JSP:<img src="RandomCodeServlet" id="randonImg" />看不清?
<a href="javascript:refresh();">单击此处刷新</a>