Heroku部署Java Web应用后无法找到Servlet问题求助
问题排查与解决步骤
1. 修正重定向路径的写法
本地Tomcat默认使用根上下文路径(/),但Heroku部署环境中应用的上下文路径可能存在差异。避免硬编码绝对路径,改用动态上下文路径拼接:
// 获取当前应用的上下文路径,再拼接目标页面路径 String contextPath = request.getContextPath(); response.sendRedirect(contextPath + "/example.jsp");
如果Servlet与example.jsp处于同一层级,也可以直接使用相对路径:
response.sendRedirect("example.jsp");
2. 修正表单的action路径
表单提交路径要基于当前应用上下文动态生成,避免硬编码绝对路径:
<form action="${pageContext.request.contextPath}/YourServlet" method="post">
这种写法会自动适配本地和Heroku的上下文路径,确保请求能正确到达Servlet。
3. 检查web.xml的Servlet映射配置
确保Servlet的URL映射规则正确,避免干扰静态资源或JSP的访问:
<servlet> <servlet-name>YourServlet</servlet-name> <servlet-class>com.yourpackage.YourServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>YourServlet</servlet-name> <url-pattern>/YourServlet</url-pattern> </servlet-mapping>
4. 确认Heroku部署配置(Procfile)
确保Procfile中的启动命令正确指向war包,若需要强制根上下文路径,可添加对应参数:
web: java -jar target/dependency/webapp-runner.jar target/*.war --server.servlet.context-path=/
5. 验证应用上下文路径
在index.jsp中添加以下代码,部署后访问页面查看当前上下文路径:
当前上下文路径:${pageContext.request.contextPath}
如果返回值不是/,所有请求路径都需要基于该值拼接。
内容的提问来源于stack exchange,提问作者gabit
相关产品推荐
相关产品推荐

