【发布时间】:2019-08-06 08:03:13
【问题描述】:
我已将 Tomcat 的 ROOT 应用程序更改为 /panel 目录,因为我为部署的应用程序使用了“/”目录。 如何配置 Tomcat 以访问其他路由中的主菜单(ROOT 应用程序)和管理器(管理器、主机管理器),因为当前我在尝试导航 /manager 时遇到错误
我正在访问http://localhost:8080/panel/ 上的主页面板
<Context path="/panel" docBase="ROOT"></Context>
点击“管理应用”将我路由到http://localhost:8080/manager/html 并给出错误
HTTP 状态 404 - 未找到
类型状态报告
找不到消息
描述 源服务器没有找到当前的表示 对于目标资源或不愿意透露存在的资源
我尝试添加
<Context path="/manager" docBase="manager"></Context>
但这给了我错误
HTTP 状态 500 – 内部服务器错误
键入异常报告
消息错误实例化 servlet 类 [org.apache.catalina.manager.HTMLManagerServlet]
描述 服务器遇到了一个意外情况 阻止它完成请求。
例外
javax.servlet.ServletException:实例化 servlet 类时出错 [org.apache.catalina.manager.HTMLManagerServlet] org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:607) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.lang.Thread.run(Thread.java:748)
根本原因
java.lang.SecurityException: 访问类 [class org.apache.catalina.manager.HTMLManagerServlet] 是被禁止的。它是一个 受限类(实现 ContainerServlet 接口)。一个网络 应用程序必须配置为特权才能加载它 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:607) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.lang.Thread.run(Thread.java:748)
注意根本原因的完整堆栈跟踪在服务器中可用 日志
.
【问题讨论】:
-
从头开始使用新的 tomcat 时,只需将文件夹
webApps/ROOT重命名为 'webApps/panel'。无需使用<Context/>元素覆盖 server.xml 中的上下文配置。我对tomcat安装还做了什么?由于缺乏细节,无法重现。 -
请仔细查看
webapps\manager\META-INF\context.xml,了解如何正确配置管理器上下文。这可以帮助您防止java.lang.SecurityException -
将 ROOT 文件夹重命名为面板效果很好。