锁定老帖子 主题:登录验证码在tapestry中如何实现?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-01-24
我说的是我自己写的一个servlet,我就是想实现一个service,可是就是不显示!
|
|
返回顶楼 | |
发表时间:2005-01-24
大姐(看你头像似乎是MM),你一不贴代码;二不贴配置文件;三不详细叙述逻辑过程。你就是吼破喉咙:
引用 我就是想实现一个service,可是就是不显示! 我也不是神仙,怎么可能猜到你的问题出在什么地方。。。。
别人不知道的,还以为tapestry是什么不入流的破玩意。。。 |
|
返回顶楼 | |
发表时间:2005-01-24
以下是servlet代码,使用正常:
public class JpegRandomNumber extends HttpServlet { /* (non-Javadoc); * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse); */ protected void doGet(HttpServletRequest request, HttpServletResponse response); throws ServletException, IOException { 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(255,255,255););; g.drawRect(0,0,width-1,height-1);; 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);; } 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);; } request.getSession();.setAttribute("rand",sRand);; g.dispose();; ImageIO.write(image, "JPEG", response.getOutputStream(););; } protected 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);; } } 照着workbench中chart的服务改了一个,主要是在service方法中将以上代码拷过来,希望也能动态产生一个图片.可是不行,不显示错误,而是长时间运行,没有结果,就象有个死循环一样.如果能有错误输出还好些,可是什么也没有! 不用上面的代码,只输出一个"123"倒是出结果. |
|
返回顶楼 | |
发表时间:2005-01-24
这样,我有个建议,因为对于Tapestry来说,它只需要知道你的图片路径。
你设一个断点在生成图片路径的地方,但是路径是否已经正确生成。 因为就你提供的程序运行现象,如果是Tapestry无法找到你的图片路径,那么IAsset会报错。我估计压根还没有运行到图片路径输出的那一步,可能你的图片生成程序就在某个地方报错了,报在控制台上,只是你没有注意罢了。 如果你是使用eclipse进行开发,要留意控制台输出的信息。有些错误不仅仅只会在页面上报告。 除非人为地构造死循环,不然就是某个地方出了错。你仔细检查一下。 |
|
返回顶楼 | |
发表时间:2005-01-24
没有图片路径,因为是动态生成的.
谢谢你了.我再找找错误! 不知什么时候这个问题能解决! |
|
返回顶楼 | |
发表时间:2005-01-24
不用客气:)
虽然我不太明白你们的运行机制。。。我们曾经用jfreechart动态绘制工程图,每次输入一个新的坐标或者选项,都会在servlet目录下临时生成一个新的图片,将路径提供给页面,页面根据这个路径去表现图片。所以对于页面来说,不论是JSP,还是Tapestry,需要知道的,仅仅是图片路径。除非路径错误,只要图片生成出来,就一定能够表现。 |
|
返回顶楼 | |
发表时间:2005-01-24
我想实现的不只是动态图片用于产生验证码.通过这种方式,希望能产生其他的,比如输出JFreeChart或PDF等.
gzdlw,谢谢! |
|
返回顶楼 | |
发表时间:2005-01-26
happycpa 写道 没有图片路径,因为是动态生成的.
你的意思是说验证码的图片是即时生成的图片么? 显示完之后就抛弃? 嗯…… 其实我觉得并不一定非要做成动态的图片那么麻烦吧? 直接显示字符不可以吗? |
|
返回顶楼 | |
发表时间:2005-01-26
chart中 service本省就是一个servlet .tapestry中也有直接输出图片的说明。
tapestry的文档还是要好好看的。 |
|
返回顶楼 | |
发表时间:2005-01-26
解决了!
我本来就是照着workbean中的chart做的,可是我的多个参数.我一直用的是requestCycle.getServiceParameter,改成用AbstractService.getParameter就行. 再次谢谢大家了! |
|
返回顶楼 | |