系统
系统一:windows 2000 pro
tomcat 5.028
jdk 1.4.0.2系统二:linux as 3 update 4
tomcat 5.028
jdk 1.4.0.2
我找了网上比较经典的验证码例子(源码附在下面)
在window下是可以的,但是到了linux就不行了......
我用eclipse开发源码:
<%@ page errorPage="eror.jsp" %>
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="image/jpeg" import="java.awt.*,
java.awt.image.*,java.util.*,javax.imageio.*" %>
<jsp:useBean id="vale" scope="session" class="query.compare" />
<%!
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<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???)
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("rand",sRand);
vale.setValidate_rand(Integer.parseInt(sRand));
// ????
g.dispose();// ???????
ImageIO.write(image, "JPEG", response.getOutputStream());
%>出错信息(linux上的)HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
org.apache.jsp.validate_jsp._jspService(validate_jsp.java:135)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause java.lang.NoClassDefFoundError
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Class.java:141)
java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:62)
java.awt.image.BufferedImage.createGraphics(BufferedImage.java:1041)
java.awt.image.BufferedImage.getGraphics(BufferedImage.java:1031)
org.apache.jsp.validate_jsp._jspService(validate_jsp.java:83)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.
--------------------------------------------------------------------------------Apache Tomcat/5.0.28

解决方案 »

  1.   

    jsp随机彩色验证码生成程序,再windows下可以用的,到linux就不可以用了,看网上的解决方法是用-Djava.awt.headless=true 加到服务器jvm启动脚本里面去,jvm启动脚本再哪?
      

  2.   

    就是 java.exe -cp $catalina_home/bin/bootstrap.jar -Djava.awt.headless=true org.apache.catalina.startup.Bootstrap start
      

  3.   

    Linux 下没有 .exe , 弄错了。哈哈。sh /home/USERA/jdk/bin/java -cp $catalina_home/bin/bootstrap.jar -Djava.awt.headless=true org.apache.catalina.startup.Bootstrap start这样对不对呢?
      

  4.   

    我还没有试验过,今天不上班,呵呵TO humanity:你试验过那个windows下的方法吗?如果windows下可行那linux也差不多的TO muyi5377(木易) 请回答再详细点好吗?我比较菜,我看不懂,不然我只能给你1分,鼓励分.
      

  5.   

    可以了
    你们说的这么这么复杂阿?
    只要export CATALINA_OPTS="-Djava.awt.headless=true"就可以了阿
    不过还是谢谢