windows下可行,linux下不行?验证码的问题

时间:2021-03-11 16:31:15
系统
系统一: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 report

message 

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

6 个解决方案

#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


liunx 启动awt 就行了

#5


我还没有试验过,今天不上班,呵呵

TO humanity:你试验过那个windows下的方法吗?如果windows下可行那linux也差不多的

TO muyi5377(木易) 请回答再详细点好吗?我比较菜,我看不懂,不然我只能给你1分,鼓励分.

#6


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

#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


liunx 启动awt 就行了

#5


我还没有试验过,今天不上班,呵呵

TO humanity:你试验过那个windows下的方法吗?如果windows下可行那linux也差不多的

TO muyi5377(木易) 请回答再详细点好吗?我比较菜,我看不懂,不然我只能给你1分,鼓励分.

#6


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