cloud Foundry 404,但本地tomcat很好
Posted
技术标签:
【中文标题】cloud Foundry 404,但本地tomcat很好【英文标题】:cloud foundry 404 but local tomcat is fine 【发布时间】:2017-10-04 04:05:25 【问题描述】:首先让我们把代码弄出来。
WebContent 中的 index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Child Tickets</title>
</head>
<body>
<h1>Find all child tickets affected user and their info</h1>
<hr>
<form name="f1" method="GET" action="/FindChildTicket4/FindChildTickets">
<input type="text" name="masterticket">
<button type="submit" value="main" name="btnSubmit">Hello</button>
<br>
<br>
<div id="results">
results html
</div>
</form>
</body>
</html>
WebContent/WEB-INF 中的 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>HelloWorld</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
Java Resources/src/hlo.hello.net 中的HelloAgain.java
package hlo.hello.net;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class HelloAgain
*/
@WebServlet("/HelloAgain")
public class HelloAgain extends HttpServlet
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public HelloAgain()
super();
// TODO Auto-generated constructor stub
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
// TODO Auto-generated method stub
doGet(request, response);
当我在 Eclipse 中将它部署到本地 Apache7 服务器时,html 会触发,当我单击 Hello 按钮时,我会在浏览器中返回“服务于:/HelloWorld”。 现在,当我将它推送到我们的内部 Cloud Foundry 设置 VIA Eclipse 时,我会在单击 Hello 按钮时得到它
HTTP 状态 404 - /HelloWorld/HelloAgain 输入状态报告 消息 /HelloWorld/HelloAgain 描述 请求的资源不可用。 Apache Tomcat/7.0.62
我已经尝试过这些网站... HTTP Status 404 - on Eclipse with Tomcat Java - Servlet 404 error Getting HTTP Status 404 error when trying to run servlet java servlet not found error 404 in eclipse
以及其他一些建议和非建议修复了云代工方面。 HTML 每次都会工作,但它永远不会找到 servlet。我还查看了我部署的 Cloud Foundry 服务器文件,该类位于 WEB-INF/classes/hlo/hello/net/ 下。
很奇怪。此外,链接站点中的一些建议将本地 apache deployemtn 破坏到服务器将关闭的位置。只是看看是否有人有任何见解,因为我在搜索 cloud Foundry 404 时找不到任何好的数据。
【问题讨论】:
【参考方案1】:您似乎正在尝试访问/HelloWorld/HelloAgain
。
HTTP 状态 404 - /HelloWorld/HelloAgain
您的 Servlet 为 /HelloAgain
配置,/HelloWorld
是上下文(您可以在本地运行时的输出中看到这一点,Served at: <context>
)。
当您将应用程序部署到本地 Tomcat 时,通常是在上下文而不是 ROOT 上下文下完成的。不同之处在于,当您部署到上下文时,所有内容都以该上下文名称为前缀。当您部署到 Cloud Foundry 时,Java 构建包始终将您的应用程序部署为 ROOT 上下文。这意味着没有前缀。
如果您的应用程序中有包含上下文名称的硬编码 URL 或链接,那么当您部署到 CF 时它们将不正确,并且会生成 404。
当您在 CF 上部署时,一个快速测试是转到 /HelloAgain
。由于应用程序是在 ROOT 上下文下部署的,因此应该可以通过该 URL 访问它。我怀疑你会在输出中看到"Served at: /"
。
确保正确生成 URL 的一种方法是使用 JSTL Core 的 <c:url>
标记。另一种方法是从 HttpServletRequest 对象上的参数构建您的 URL。我相信还有很多其他的方法。您只需要确保所使用的 URL 考虑到了应用程序的部署环境。
希望有帮助!
【讨论】:
以上是关于cloud Foundry 404,但本地tomcat很好的主要内容,如果未能解决你的问题,请参考以下文章
Cloud Foundry Turbine Stream 无法连接到 Command Metric Stream
Node.js 应用程序、Express 和 Cloud Foundry
Spring Boot 微服务在 Pivotal Cloud Foundry 平台上部署时无法通过 Kerberos 身份验证