谷歌验证码 kaptcha
使用
导入包: kaptcha-2.3.2.jar
报错:
jakarta.servlet.ServletException: 实例化Servlet[com.google.code.kaptcha.servlet.KaptchaServlet]异常
原因:TomCat10 使用的是 jakarta.servlet.Servlet.xxxx;
而Tomcat10以下使用的是 javax.servlet.Servlet.xxxx;
解决方案一: 把Tomcat版本降低
解决方案二:
- 新建servlet层文件名自定义类,但是不要和jar包的类名重合
- 把jar包的 servlet层的KaptchaServlet里面代码复制
- 粘贴到刚建的类里然后把 javax 前缀全部改为 jakarta
-
配置 web.xml
-
重启Tomcat,访问工程地址
如果还报错
jakarta.servlet.ServletException: Servlet执行抛出一个异常 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
根本原因 java.lang.NoClassDefFoundError: com/jhlabs/image/RippleFilter com.google.code.kaptcha.impl.WaterRipple.getDistortedImage(WaterRipple.java:32) com.google.code.kaptcha.impl.DefaultKaptcha.createImage(DefaultKaptcha.java:44) com.august.web.MyKaptchaServlet.doGet(MyKaptchaServlet.java:61) jakarta.servlet.http.HttpServlet.service(HttpServlet.java:668) jakarta.servlet.http.HttpServlet.service(HttpServlet.java:777) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
则还需导入包 filters-2.0.235-1.jar
- 再次重启,然后在浏览器中访问
成功解决问题