首页 > 解决方案 > 嵌入式 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 应用程序,这是我第一次以这种方式使用它,有人可以帮助我吗?

标签: javajsptomcat

解决方案


以下错误应该准确地告诉您出了什么问题:

java.lang.ClassNotFoundException:org.apache.jasper.servlet.JspServlet

您需要检查该类是否位于嵌入式 tomcat 的类路径中,因为您特别提到了 jar,或者因为它位于 lib 文件夹中。


推荐阅读