NetBeans部署Web应用至Tomcat失败,求原因分析与解决方法
Servlet部署到Tomcat失败问题排查
问题现象
使用NetBeans IDE开发Servlet应用,构建后部署到Tomcat时出现如下错误:
In-place deployment at D:\SpringBootProjects\Servlets\urlrewritingsample\build\web Deployment is in progress... deploy?config=file%3A%2FC%3A%2FUsers%2FAyush%2520Singh%2FAppData%2FLocal%2FTemp%2Fcontext1073696000555366189.xml&path=/urlrewritingsample FAIL - Failed to deploy application at context path [/urlrewritingsample] D:\SpringBootProjects\Servlets\urlrewritingsample\nbproject\build-impl.xml:1030: The module has not been deployed. See the server log for details. BUILD FAILED (total time: 0 seconds)
Tomcat日志信息:
18-Jan-2023 08:19:54.047 SEVERE [http-nio-8080-exec-6] org.apache.catalina.startup.ExpandWar.copy Error copying [C:\Users\Ayush%20Singh\AppData\Local\Temp\context125052041248512568.xml] to [C:\Program Files\Apache Software Foundation\Tomcat 9.0\conf\Catalina\localhost\urlrewritingsample.xml] java.io.FileNotFoundException: C:\Users\Ayush%20Singh\AppData\Local\Temp\context125052041248512568.xml (The system cannot find the path specified) at java.base/java.io.FileInputStream.open0(Native Method) at java.base/java.io.FileInputStream.open(FileInputStream.java:216) at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157) at org.apache.catalina.startup.ExpandWar.copy(ExpandWar.java:269) at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:1006) at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:357) at javax.servlet.http.HttpServlet.service(HttpServlet.java:670) at javax.servlet.http.HttpServlet.service(HttpServlet.java:779) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.catalina.filters.HttpHeaderSecurityFilter.doFilter(HttpHeaderSecurityFilter.java:126) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:177) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:660) at org.apache.catalina.valves.RequestFilterValve.process(RequestFilterValve.java:378) at org.apache.catalina.valves.RemoteAddrValve.invoke(RemoteAddrValve.java:56) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:891) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1784) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:833)
错误原因
- Tomcat尝试复制临时目录下的context配置文件时找不到目标文件,核心诱因是用户名
Ayush Singh包含空格,导致URL编码后的路径解析异常,临时配置文件未正常生成; - Tomcat安装在
C:\Program Files目录下,普通权限无法向conf/Catalina/localhost目录写入文件; - 系统临时文件被自动清理,导致NetBeans生成的临时context文件提前消失。
解决办法
- 清理临时文件:关闭Tomcat,删除Tomcat安装目录下的
work和temp文件夹,同时清空系统临时目录(C:\Users\Ayush Singh\AppData\Local\Temp)中Tomcat相关文件,重启后重新部署; - 修改部署方式:在NetBeans中打开项目属性,找到部署设置,取消原地部署(In-place deployment),改为打包WAR文件后部署,绕过临时文件路径问题;
- 规避路径空格:将Tomcat安装到无空格的路径(如
D:\Tomcat9),或修改Windows用户名去掉空格,避免URL编码解析错误; - 提升运行权限:以管理员身份运行NetBeans和Tomcat,确保拥有写入Tomcat配置目录和访问临时文件的权限;
- 手动创建context文件:如果临时文件始终无法生成,可手动在Tomcat的
conf/Catalina/localhost目录下创建urlrewritingsample.xml,内容参考项目的context配置,再重新部署。
内容的提问来源于stack exchange,提问作者ayush
相关产品推荐
相关产品推荐

