问题描述
用的是patchca来生成验证码,patchca-0.5.0.jar包已经引入。servlet配置如下:importjava.awt.Color;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.OutputStream;importjava.util.Random;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;//Q277160299importorg.patchca.color.ColorFactory;importorg.patchca.color.SingleColorFactory;importorg.patchca.filter.predefined.CurvesRippleFilterFactory;importorg.patchca.filter.predefined.DiffuseRippleFilterFactory;importorg.patchca.filter.predefined.DoubleRippleFilterFactory;importorg.patchca.filter.predefined.MarbleRippleFilterFactory;importorg.patchca.filter.predefined.WobbleRippleFilterFactory;importorg.patchca.service.ConfigurableCaptchaService;importorg.patchca.utils.encoder.EncoderHelper;importorg.patchca.word.RandomWordFactory;publicclassCaptchaServletextendsHttpServlet{privatestaticfinallongserialVersionUID=3796351198097771007L;privatestaticConfigurableCaptchaServicecs=null;privatestaticColorFactorycf=null;privatestaticRandomWordFactorywf=null;privatestaticRandomr=newRandom();privatestaticCurvesRippleFilterFactorycrff=null;privatestaticMarbleRippleFilterFactorymrff=null;privatestaticDoubleRippleFilterFactorydrff=null;privatestaticWobbleRippleFilterFactorywrff=null;privatestaticDiffuseRippleFilterFactorydirff=null;@Overridepublicvoidinit()throwsServletException{super.init();cs=newConfigurableCaptchaService();cf=newSingleColorFactory(newColor(25,60,170));wf=newRandomWordFactory();crff=newCurvesRippleFilterFactory(cs.getColorFactory());drff=newDoubleRippleFilterFactory();wrff=newWobbleRippleFilterFactory();dirff=newDiffuseRippleFilterFactory();mrff=newMarbleRippleFilterFactory();cs.setWordFactory(wf);cs.setColorFactory(cf);cs.setWidth(120);cs.setHeight(50);}@Overridepublicvoiddestroy(){wf=null;cf=null;cs=null;super.destroy();}publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType("image/png");response.setHeader("cache","no-cache");wf.setMaxLength(5);wf.setMinLength(3);HttpSessionsession=request.getSession(true);OutputStreamos=response.getOutputStream();switch(r.nextInt(5)){case0:cs.setFilterFactory(crff);break;case1:cs.setFilterFactory(mrff);break;case2:cs.setFilterFactory(drff);break;case3:cs.setFilterFactory(wrff);break;case4:cs.setFilterFactory(dirff);break;}Stringcaptcha=EncoderHelper.getChallangeAndWriteImage(cs,"png",os);session.setAttribute("captcha",captcha);os.flush();os.close();}}
web.xml配置如下:<servlet-mapping><servlet-name>CaptchaServlet</servlet-name><url-pattern>/patchca.png</url-pattern></servlet-mapping>
验证码取出页面如下:<%@pagelanguage="java"import="java.util.*"pageEncoding="utf-8"%><%Stringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv="pragma"content="no-cache"><metahttp-equiv="cache-control"content="no-cache"><metahttp-equiv="expires"content="0"><metahttp-equiv="keywords"content="keyword1,keyword2,keyword3"><metahttp-equiv="description"content="Thisismypage"><basehref="<%=basePath%>"></base></head><body><table><tr> <!--patchca.png和servlet中的<url-pattern>对应--> <td><imgsrc="patchca.png"alt="验证码"style="cursor:pointer;vertical-align:text-bottom;"onclick="this.src=this.src+'?'+Math.random();"></td> <tdvalign="top"> <formmethod="post"action="gojsp"><br> 验证码:<inputtype="text"name="patchcafield"><br/> <inputtype="submit"name="submit"> </form></td></tr></table></body></html>
现在问题是,我在验证码页面,不能取出验证码图片。从浏览器中进入servlet路径,也是没有反应。而我的验证码的img路径参考了很多帖子,放了servlet的路径,应该没问题啊。请教。
解决方案
解决方案二:
<servlet><servlet-name>captchaServlet</servlet-name><servlet-class>CaptchaServlet</servlet-class></servlet><servlet-mapping><servlet-name>captchaServlet</servlet-name><url-pattern>/patchca.png</url-pattern></servlet-mapping>
其他都没错,至少在XML配置时候少了。
解决方案三:
其他都没错,只是在XML配置时候少了。
解决方案四:
这个我配了,是我忘了粘了。是这部分吧。<servlet><description>ThisisthedescriptionofmyJ2EEcomponent</description><display-name>ThisisthedisplaynameofmyJ2EEcomponent</display-name><servlet-name>CaptchaServlet</servlet-name><servlet-class>com.test.servlet.CaptchaServlet</servlet-class></servlet>
这些都有,可问题就是不能解决。
解决方案五:
没有人指教一下吗。各位大佬。
解决方案六:
<formaction="验证码Servlet">
解决方案七:
在doPost()调用doGet()方法,<formmethod="post">,省略action属性,试试
解决方案八:
试过了,不行。formaction是跳转到另一个检验输入结果正确与否的页面go.jsp,好像不是这里的问题。继续坐等指教。引用6楼的回复:
在doPost()调用doGet()方法,<formmethod="post">,省略action属性,试试
解决方案九:
我已经试过了,是可以的,还不行的找我rjzou@qq.com
解决方案十:
奇怪,我的怎么不行。本地环境,mycelipse,ssh框架,验证码jsp页面文件夹目录在根目录下,与WEB-INF同级。引用8楼的回复:
我已经试过了,是可以的,还不行的找我rjzou@qq.com
解决方案十一:
还是没有人解答吗。
解决方案十二:
<td><imgsrc="/<%=path%>/patchca.png"alt="验证码"style="cursor:pointer;vertical-align:text-bottom;"onclick="this.src='/<%=path%>/patchca.png'+'?'+Math.random();"></td>
解决方案十三:
http://download.csdn.net/detail/s478853630/4064638注释齐全,你都看得懂的
解决方案十四:
全部不行,jsp页面仍然刷不出验证码图片,持续读取,没有结果。也不报错。我觉得各位的配置应该都没有问题,但我的机器就是刷不出来,很费解啊这个事,崩溃。引用12楼的回复:
http://download.csdn.net/detail/s478853630/4064638注释齐全,你都看得懂的
解决方案十五:
按照上面各位所说的,可能是浏览器兼容问题,换换浏览器测试
解决方案:
ffie都试过,不行,难道这个问题真要僵死了吗。
解决方案:
可能是验证码servlet的代码有问题,我以前也遇到这问题引用11楼的回复:
<td><imgsrc="/<%=path%>/patchca.png"alt="验证码"style="cursor:pointer;vertical-align:text-bottom;"onclick="this.src='/<%=path%>/patchca.png'+'?'+Math.random();"></td>
解决方案:
我找了好几份代码试用,都是一样的问题,而楼上的那位仁兄用我贴的这个代码也成功了,我就搞不明白了。恼死我了,难道上天整我来了。引用16楼的回复:
可能是验证码servlet的代码有问题,我以前也遇到这问题引用11楼的回复:<td><imgsrc="/<%=path%>/patchca.png"alt="验证码"style="cursor:pointer;vertical-align:text-bottom;"onclick="this.src='/<%=path%>/patchca.png'+'?'+Math.r……
解决方案:
我一行一行的找了一下原因,发现servlet中,跳入这一行的时候,就不往下走了,也没有报错!Graphicsgraphics=image.createGraphics()
解决方案:
是否路径的问题,测试下吧
解决方案:
好东西,果断下载一个~~~