Netbeans启动Tomcat失败

67

我在Netbeans IDE 7.4中启动Apache Tomcat 6遇到了问题(在7.3版本上也有同样的问题。其他人提到过这个问题也存在于其他版本,如8.0等)。

我做了以下工作:

  • 移除已安装的Tomcat 7(未移除时也遇到相同的困难)
  • 添加从Apache Tomcat网站下载的新服务器(版本apache-tomcat-6.0.39,使用其他版本也有相同的问题)
  • 我的服务器位置:D:\apache-tomcat-netbeans
  • CATALINA_HOME系统变量:D:\apache-tomcat-netbeans
  • JAVA HOME系统变量:C:\Program Files\Java\jdk1.7.0_51\
  • Tomcat用户:我让netbeans创建一个名为tomcat密码为tomcat的新用户。当我打开{tomcat}\conf\tomcat-users.xml文件并添加服务器后,有关我的用户的信息如下:

    < user password="tomcat" roles="manager,admin" username="tomcat"/ >

当我现在点击“开始”时,会出现"Starting of Tomcat failed"。

我的怀疑:

  • 我作为管理员在Windows 7上工作,因此我认为这不是文件权限的问题。
  • 禁用代理没有帮助。
  • 日志:只有一个日志文件localhost.2014-03-06.log被创建,而且它是完全空的。
  • 以“管理员身份”启动Netbeans没有帮助。
  • 从命令行启动一切正常,我没有启动普通模式或调试模式的问题(catalina.bat jpda start或startup.bat)

1
请检查您的服务器日志,可能位于类似 D:\apache-tomcat-netbeans\logs\ 的位置。这可能是由于端口冲突引起的。但是您的日志将包含此类信息。 - Jay
检查现有的日志文件应该是你做的第一件事。 - jgitter
1
日志完全为空。只有一个文件被创建:localhost.2014-03-06.log。 - liquide
你尝试过从命令行启动服务器吗?我曾经遇到过由于配置错误而立即失败的情况,你可能会在那里获得更好的错误消息... - jgitter
我已经尝试在我的机器上复现这个问题,但没有成功。你是从zip文件还是从Windows安装程序安装Tomcat的?我总是使用zip文件。 - Almir Campos
显示剩余5条评论
6个回答

164

该问题影响NetBeans版本7.4至8.0.2。此问题最初发生在版本8.0,并在NetBeans 8.1中得到修复。这个问题对于任何tomcat版本都存在问题(已确认版本为7.0.56至8.0.28)。

具体细节描述在Netbeans bug #248182

这个问题也与提到以下错误输出的帖子有关:

'127.0.0.1*' 不是内部或外部命令,可执行程序或批处理文件。

对于从zip文件安装的tomcat,我通过更改tomcat bin目录中的catalina.bat文件来解决它。

找到下面配置的catalina.bat文件。

:noJuliConfig
set "JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%"

:noJuliManager
set "JAVA_OPTS=%JAVA_OPTS% %LOGGING_MANAGER%"

通过去除双引号,将其更改为以下内容:

:noJuliConfig
set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%

:noJuliManager
set JAVA_OPTS=%JAVA_OPTS% %LOGGING_MANAGER%

现在保存您的更改,并从NetBeans中启动Tomcat。


5
适用于在Netbeans 8.0.1上运行的Tomcat 7.0.56。 - Katana24
5
没有帮助我 - NetBeans 8.0.2,Tomcat 8.0.15 - BIU
在Windows 8上,我必须以管理员身份打开记事本才能完成此操作。 - Gyan
谢谢,这个解决方案也适用于Tomcat 8.0.23。 - jawath
1
@BlackSwan 请查看我的答案,该答案特别针对Tomcat 8.5.3及以上版本和至少NetBeans 8.1。 - YoYo
显示剩余6条评论

79

这会影响以下内容:

  • 所有Tomcat版本从8.5.3开始。
  • 所有Netbeans版本直到8.1(已在Netbeans 8.2中修复)。

这是因为Netbeans无法“看到”Tomcat已启动,即使它已经正常启动。

我已向NetBeans提交了Bug#262749

解决方法

server.xml文件中,在HTTP / 1.1的Connector元素中添加以下属性:server="Apache-Coyote/1.1"

示例:

<Connector
  connectionTimeout="20000"
  port="8080"
  protocol="HTTP/1.1"
  redirectPort="8443"
  server="Apache-Coyote/1.1"
/>

原因

在8.5.3之前,服务器标头的默认设置为Apache-Coyote/1.1,而自8.5.3以来,此默认设置已更改为空白。显然Netbeans会检查此标头。

也许在未来,我们可以期待Netbeans解决这个问题。

我能够追溯到文档中的更改导致了这个问题。

Tomcat 8.5:

"覆盖http响应的Server标头。如果设置了该属性,则该属性的值将覆盖Web应用程序设置的任何Server标头。如果未设置,则使用应用程序指定的任何值。如果应用程序未指定值,则不设置Server标头。"

Tomcat 8.0:

"覆盖http响应的Server标头。如果设置了该属性,则该属性的值将覆盖Tomcat默认设置和Web应用程序设置的任何Server标头。如果未设置,则使用应用程序指定的任何值。如果应用程序未指定值,则使用Apache-Coyote/1.1。除非你很谨慎,否则你不需要这个功能。"

这解释了自版本8.5.3以来明确添加服务器属性的必要性。


这也是安装了brew版本的确切解决方案! - xathien
我必须同时应用被接受的答案和这个答案才能使它正常工作。 - reden
我为了让NetBeans IDE 8.1和apache-tomcat-8.5.6的以下组合工作而进行了此配置。谢谢。 - S.P Singh
这个解决方法也适用于Apache Tomcat/8.5.28和NetBeans IDE 8.1。 - taringamberini
为了在 Windows 上使用 Tomcat 9.0.54 和 NetBeans 8.2 或 12,需要这个解决方法。 - jla
显示剩余2条评论

24

此外,问题很可能与代理设置有关。

如果在 Tomcat 启动过程中遇到问题 - 尝试在 NetBeans 中选择工具 -> 选项 -> 通用选项卡中的 无代理

这对我很有帮助。


在公司环境中,可能需要代理才能使您的其他集成工作正常,包括接收Netbeans更新和访问外部存储库(包括GitHub)的Git。保留代理的更好选择是在代理上设置本地主机例外。 - YoYo
是的,你说得对。我的情况适用于网络不使用代理的情况。 - Yan Pak
哦,出乎意料地这对我起作用了,在按照上述建议更改了仍然存在同样问题的server.xml后:Netbeans 8.1 + TomEE 7.1.0(tar.gz版本)。 - hello_earth
这里的任何解决方案都没有帮助到我,但 Netbeans 的开发人员为我提供了一个文件,在 Mac Catalina 上使 Netbeans 10.2 和 Tomcat 8.x 和 9.x 工作 - 请参见我的答案 https://dev59.com/w2Eh5IYBdhLWcg3wnEcc#60385013 - RobbiewOnline

14

截至2020年2月份,这里没有任何一个答案解决了我的问题,所以我在https://issues.apache.org/jira/browse/NETBEANS-3903提出了一个问题,Netbeans解决了这个问题!

他们正在处理一项拉请求(pull request),因此修复将很快出现在未来的“ .dmg安装程序”中,但在此期间,您可以复制一个在错误报告中引用的文件,并替换您的netbeans模块文件夹中的一个文件。

提示-如果您右键单击应用程序> Netbeans并选择“显示包内容”Show Package Contents然后您可以找到并替换Netbeans文件夹中的文件org-netbeans-modules-tomcat5.jar,例如在/Applications/NetBeans/Apache NetBeans 11.2.app/Contents/Resources/NetBeans/netbeans/enterprise/modules中。


1
太棒了!感谢您联系开发人员并帮助他们修复此问题。 - Hasan Ammori
1
这对我有用,谢谢。我正在使用Netbeans 11.3,Tomcat 9.0.39在macOS High Sierra上运行。 - Super Symmetry

3
为了使NetBeans能够与Tomcat互动,需要在tomcat-users.xml文件中正确配置用户,并确保NetBeans可以自动执行此操作。可以在${CATALINA_HOME}/conf${CATALINA_BASE}/conf找到tomcat-users.xml文件。
具体来说��在tomcat-users.xml文件中,需要将用户(如NetBeans中选择的用户)添加到script-manager角色中。
例如,将以下内容更改:
<user password="tomcat" roles="manager,admin" username="tomcat"/>

To

<user password="tomcat" roles="manager-script,manager,admin" username="tomcat"/>

请确保已声明manager-script角色。
补充:
<role rolename="manager-script"/>

实际上,Netbeans在线帮助文档有误:

用户名 - 指定IDE用于登录服务器管理应用程序的用户名。 用户必须与管理员角色相关联。第一次启动Tomcat Web服务器时(例如通过“启动/停止”菜单操作或通过IDE从Web组件中执行),IDE会将一个具有随机生成密码的管理员用户添加到tomcat-base-path/conf/tomcat-users.xml文件中。(在服务窗口中右键单击Tomcat Web服务器实例节点并选择属性。在属性对话框中,基本目录属性指向base-dir目录。)tomcat-users.xml文件中的管理员用户条目类似于以下内容:<user username="idea" password="woiehh" roles="manager"/>

该角色应为manager-script而不是manager

适用于更完整的tomcat-users.xml文件:

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="manager-script"/>
  <role rolename="manager-gui"/>
  <user password="tomcat" roles="manager-script" username="tomcat"/>
  <user password="pass" roles="manager-gui" username="me"/>
</tomcat-users>

这里有一篇关于为什么我会收到部署错误的问题的好帖子。


很遗憾,它没有起到作用。什么都没有改变。我的tomcat-users.xml现在是: - liquide
当我从Tomcat中删除根文件夹并从Netbeans启动它时,Tomcat日志文件已经正确创建,但出现了错误:SEVERE: Error starting static Resources. java.lang.IllegalArgumentException: Document base C:\Tomcat\webapps\ROOT不存在或不是可读目录。 - liquide

3

我曾经遇到同样的问题,但以上答案都无法解决。 对我来说,解决方案是恢复Tomcat捆绑的Manager web应用程序


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接