社区
Web 开发
帖子详情
linux下图片验证码不能正常显示
lamyuu
2004-09-27 07:58:41
我写了一个servlet来实现图片验证码的功能,在window下正常显示,但放到linux后就显示不出来。
我上网查看了一些资料,找到了几个类似问题的帖子,但里面提到的都是对应tomcat,weblogic的解决方法,请问服务器是resin的情况下怎样解决?例如在哪加入运行参数 –Djava.awt.headless=true ?
...全文
1005
15
打赏
收藏
linux下图片验证码不能正常显示
我写了一个servlet来实现图片验证码的功能,在window下正常显示,但放到linux后就显示不出来。 我上网查看了一些资料,找到了几个类似问题的帖子,但里面提到的都是对应tomcat,weblogic的解决方法,请问服务器是resin的情况下怎样解决?例如在哪加入运行参数 –Djava.awt.headless=true ?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
linux
环境下验证码不
显示
问题
linux
环境下验证码不
显示
问题 帮助解决部分应用系统登录页面中验证码无法
显示
的问题
验证码
不能
显示
解决方法
注册表的值。有时候打开网页时,验证码
显示
不了,可能是电脑里的配置需要改动。。。
java生成图形验证码 带详细注释 拷贝即用 兼容
linux
系统 含字体
有没有发现最后生成了一串长的base64编码 把这一串编码放到img标签在前面加上"data:image/gif;base64,"是能直接使用的 验证码最佳宽高计算公式:字体大小和图片高度相等,图片宽度=图片高度×验证码长度×0.75 由于这里使用的不是本地字体 所以直接丢到
linux
系统也能正常运行 验证码可以输入中文 前提是你的字体支持中文
Dede后台验证码不
显示
三种解决方案
Dede后台验证码不
显示
三种解决方案,包括取出验证码验证
支持中文字母数字、自定义字体php验证码代码
支持中文字母数字、自定义字体php验证码代码,需要的朋友可以参考下
Web 开发
81,122
社区成员
341,744
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章