社区
Web 开发
帖子详情
linux下图片验证码不能正常显示
lamyuu
2004-09-27 07:58:41
我写了一个servlet来实现图片验证码的功能,在window下正常显示,但放到linux后就显示不出来。
我上网查看了一些资料,找到了几个类似问题的帖子,但里面提到的都是对应tomcat,weblogic的解决方法,请问服务器是resin的情况下怎样解决?例如在哪加入运行参数 –Djava.awt.headless=true ?
...全文
968
15
打赏
收藏
linux下图片验证码不能正常显示
我写了一个servlet来实现图片验证码的功能,在window下正常显示,但放到linux后就显示不出来。 我上网查看了一些资料,找到了几个类似问题的帖子,但里面提到的都是对应tomcat,weblogic的解决方法,请问服务器是resin的情况下怎样解决?例如在哪加入运行参数 –Djava.awt.headless=true ?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
禽兽v5
2004-10-05
打赏
举报
回复
谢谢楼上。
不过1.4版jdk算是经典版本,它的很多api都非常实用。所以我想很多项目都使用了吧。
sjtsh
2004-09-28
打赏
举报
回复
gz
禽兽v5
2004-09-28
打赏
举报
回复
哦,没看清楚。sorry。我不用resin的,如果他也是.sh启动的话,找到有
-D******
之类的行,在下面新增就可以了。方法和我文档中的一样。
如果不行,你就要考虑xvfb了。
禽兽v5
2004-09-28
打赏
举报
回复
过奖。一点工作经验,也就是熟手程度而已。
lamyuu
2004-09-28
打赏
举报
回复
cm4ever(小P)真的很强啊,成功了,谢谢
我稍后结贴
禽兽v5
2004-09-28
打赏
举报
回复
younggone(牛), 这样不用装xvfb了?据说默认的x server是连不上的,需要装其他x server。比如xvfb。当然我没试过initx命令。
koma_wind
2004-09-28
打赏
举报
回复
我是aix下面的,给你我的代码,你再试一下!
1.图片位置:/opt/app/virtual/pic/bkPic.jpg
servlet:getRandom.java
JSP页面:<img align=absbottom vspace=2 border=0 src="/getRandom">
package randomPic.servlet;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.image.BufferedImage;
import com.sun.image.codec.jpeg.*;
import com.sun.image.codec.jpeg.JPEGCodec;
public class getRandom extends BankServlet
{
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
int i = (int)(java.lang.Math.random()*1000000);
String strRandomNum = ""+i;
while(strRandomNum.length()<6)
strRandomNum = "0"+strRandomNum ;
request.getSession().setAttribute("RandomNom",strRandomNum);
try
{
ServletOutputStream out=response.getOutputStream();
//jpg格式的背景色图片(于页面风格一样),宽3.6毫米,高1.8毫米
InputStream imageIn = new FileInputStream(new File("/opt/app/virtual/pic/bkPic.jpg"));
JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(imageIn);
BufferedImage image4 = decoder.decodeAsBufferedImage();
Graphics g = image4.getGraphics();
g.setColor(new Color(0,255,0));
g.drawString(strRandomNum,0,13);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(image4);
out.close();
}
catch (Exception ex)
{
ex.printStackTrace();
System.out.println("Error="+ex);
return;
}
}
}
禽兽v5
2004-09-28
打赏
举报
回复
我找到了,在resin/bin/wrapper.pl
第552 行,将
$JAVA_ARGS .= " -Dresin.home=$SERVER_ROOT $EXTRA_JAVA_ARGS";
改成
$JAVA_ARGS .= "-Djava.awt.headless=true -Dresin.home=$SERVER_ROOT $EXTRA_JAVA_ARGS";
不熟,我不调试了。成功请回复,我将把它写入blog,呵呵。
younggone
2004-09-28
打赏
举报
回复
sorry 记错了气筒xserver 应该用xinit
younggone
2004-09-28
打赏
举报
回复
这个是可能因为awt中用到了一些与平台有关的东西,当在类unix系统下时使用了xwindow的有关内容,你需要启动你的xserver 并且需要对用户开放连接xserver的权限,具体如下
启动xserver
initx
开放权限
xhost +
另外如果系统没有DISPLAY设置的话,还需要export DISPLAY=0
lamyuu
2004-09-28
打赏
举报
回复
代码这样:
package mypackage;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.*;
import java.util.*;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
/**
* 认证码绑定Session名字:rand
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
public class Validate extends HttpServlet{
private static final String CONTENT_TYPE = "text/html; charset=GBK";
private ServletConfig config;
final public void init(ServletConfig config) throws ServletException {
this.config = config;
}
final public ServletConfig getServletConfig() {
return config;
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType(CONTENT_TYPE);
response.setHeader("Pragma","No-cache"); //设置页面不缓存
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
request.setCharacterEncoding("GBK");
//PrintWriter out = response.getWriter();
System.out.println("******&&&*******");
try{
createImage(request, response);
}catch(Exception e){e.printStackTrace();}
}
/**
* 数字图像认证系统
* 随机产生一个四位的数组,转换成图象输出
* 产生的数组保存在Session中,绑定名字“rand”
*/
public void createImage(HttpServletRequest request,HttpServletResponse response){
HttpSession session = request.getSession();
int width = 50,height = 20;
//创建图像
BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//获取图像上下文
Graphics g = image.getGraphics();
System.out.println("*****--"+image+"--*****");
//定义图像背景
g.setColor(Color.white);
g.fillRect(0, 0, width, height);
//定义图像边框
g.setColor(Color.black);
g.drawRect(0, 0, width - 1, height - 1);
//随机产生四位认证码
double i = java.lang.Math.random();
String temp = String.valueOf(i * 10000);
temp = temp.substring(0, temp.indexOf("."));
String rand;
switch (temp.length()) {
case 1:
rand = "000" + temp;
break;
case 2:
rand = "00" + temp;
break;
case 3:
rand = "0" + temp;
break;
default:
rand = temp.substring(0, 4);
break;
}
//将认证码写进Session
session.setAttribute("rand", rand);
//将认证码写入图像
g.setColor(Color.black);
g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
g.drawString(rand, 8, 15);
//随机产生88个干扰点,使图象中的认证码不易被其它程序探测到
Random random = new Random();
for (int j = 0; j < 88; j++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
g.drawLine(x, y, x, y);
}
//图像生效
g.dispose();
//输出图像
try{
ImageIO.write(image, "JPEG", response.getOutputStream());
}catch(Exception e){
e.printStackTrace();
}
}
}
我用System.out.println()来检查代码,发现Graphics g = image.getGraphics();(包括它)后的语句不执行了,这段程序应该没错吧?
lamyuu
2004-09-28
打赏
举报
回复
那用xvfb具体怎样做?
我试过在linux命令行键入Xvfb :0 -screen 0 1024x768x16 & ,但也没有成功
好像说使用Xvfb :0 -screen 0 1024x768x16 & ,之前要对Xvfb进行设置,那怎样设置啊?请指教
younggone
2004-09-28
打赏
举报
回复
cm4ever(小P)
我在一台红旗得linux上试过是可以的,
需要xinit和xhost +(这个很重要,开放连接到xserver的权限。命令具体内容可以看man)...
那个Djava.awt.headless=true 是1.4下的,1.3下不行
lamyuu
2004-09-27
打赏
举报
回复
你那个解决方法还是在tomcat下的,我想知道在resin下怎样做?
禽兽v5
2004-09-27
打赏
举报
回复
前段日子刚解决:
http://blog.csdn.net/cm4ever/archive/2004/09/22/113145.aspx
JspRun!社区论坛系统 v6.0.0 build 20110516 UTF-8 安装版.zip
29、修改了:
不能
正常对论坛的第一个主题进行“移动主题并保留镜像”操作的问题。 30、修复了:在分类浏览主题列表时,可能被浏览者恶意访问的问题。 31、修复了:公告没有分页效果的问题。 32、修复了:搜索标签...
JspRun!社区论坛系统 v6.0.0 build 20110516 GBK 安装版.zip
29、修改了:
不能
正常对论坛的第一个主题进行“移动主题并保留镜像”操作的问题。 30、修复了:在分类浏览主题列表时,可能被浏览者恶意访问的问题。 31、修复了:公告没有分页效果的问题。 32、修复了:搜索标签...
JspRun!社区论坛系统 v6.0.0 build 20110516 UTF-8 源码版.zip
29、修改了:
不能
正常对论坛的第一个主题进行“移动主题并保留镜像”操作的问题。 30、修复了:在分类浏览主题列表时,可能被浏览者恶意访问的问题。 31、修复了:公告没有分页效果的问题。 32、修复了:搜索标签...
JspRun!社区论坛系统 v6.0.0 build 20110516 GBK 源码版.zip
29、修改了:
不能
正常对论坛的第一个主题进行“移动主题并保留镜像”操作的问题。 30、修复了:在分类浏览主题列表时,可能被浏览者恶意访问的问题。 31、修复了:公告没有分页效果的问题。 32、修复了:搜索标签...
JAVA上百实例源码以及开源项目
Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...
Web 开发
81,094
社区成员
341,717
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章