谷歌验证码 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
<servlet>
<servlet-name>KaptchaServlet</servlet-name>
<servlet-class>top.qaqaq.web.MyKaptchaServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>KaptchaServlet</servlet-name>
<url-pattern>/kaptcha.jpg</url-pattern>
</servlet-mapping>
重启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
再次重启,然后在浏览器中访问
成功解决问题