java - 嵌入式 Tomcat 服务于 JSP
问题描述
我正在尝试将 Tomcat 嵌入到应用程序中以提供静态内容和 JSP。我的代码如下:
tomcat = new Tomcat();
tomcat.setBaseDir(plugin.getDataFolder().getAbsolutePath());
tomcat.setPort(80);
Service service = tomcat.getService();
service.addConnector(getSslConnector());
Context ctx = tomcat.addContext("/", root.getAbsolutePath());
Wrapper defServlet = ctx.createWrapper();
defServlet.setName("default");
defServlet.setServletClass("org.apache.catalina.servlets.DefaultServlet");
defServlet.addInitParameter("debug", "0");
defServlet.addInitParameter("listings", "false");
defServlet.setLoadOnStartup(1);
ctx.addChild(defServlet);
ctx.addServletMapping("/", "default");
Wrapper jspServlet = ctx.createWrapper();
jspServlet.setName("jsp");
jspServlet.setServletClass("org.apache.jasper.servlet.JspServlet");
jspServlet.addInitParameter("fork", "false");
jspServlet.addInitParameter("xpoweredBy", "false");
jspServlet.setLoadOnStartup(2);
ctx.addChild(jspServlet);
ctx.addServletMapping("*.jsp", "jsp");
问题是我在 Tomcat 启动期间得到了这个堆栈跟踪
[01:07:15 INFO]: [org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]] Marking servlet [jsp] as unavailable
[01:07:15 ERROR]: [org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]] Servlet [jsp] in web application [/] threw load() exception
java.lang.ClassNotFoundException: org.apache.jasper.servlet.JspServlet
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1358) ~[?:?]
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1180) ~[?:?]
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:545) ~[?:?]
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:526) ~[?:?]
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:150) ~[?:?]
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1044) ~[?:?]
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:985) ~[?:?]
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4875) ~[?:?]
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5189) ~[?:?]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[?:?]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1412) ~[?:?]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1402) ~[?:?]
at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:1.8.0_271]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_271]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_271]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_271]
当我要求一个jsp时,我得到了这个错误[org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].[jsp]] Servlet [jsp] is currently unavailable
我过去曾与 Tomcat 合作,但要制作 Web 应用程序,这是我第一次以这种方式使用它,有人可以帮助我吗?
解决方案
以下错误应该准确地告诉您出了什么问题:
java.lang.ClassNotFoundException:org.apache.jasper.servlet.JspServlet
您需要检查该类是否位于嵌入式 tomcat 的类路径中,因为您特别提到了 jar,或者因为它位于 lib 文件夹中。
推荐阅读
- java - 如何将音频文件(mp3 或 WAV)从应用程序发送到服务器?
- javascript - 使用 Ping/Pong 检测半开 websocket 问题
- c++ - 用 QProcess 包装 SFTP
- javascript - PCI 对 google js 的脚本 Src 完整性检查失败
- php - 试图让用户添加个人资料图片php
- laravel - laravel 与 mailgun 设置
- javascript - .when .done 函数未运行
- php - 如何将 PHP 输出实现到带有键号的数组
- javascript - 谷歌地球引擎 - 在 imagecollection 中填充图像间隙
- python - Python 3.7,无法导入 pyzbar