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: &lt;context&gt;)。

当您将应用程序部署到本地 Tomcat 时,通常是在上下文而不是 ROOT 上下文下完成的。不同之处在于,当您部署到上下文时,所有内容都以该上下文名称为前缀。当您部署到 Cloud Foundry 时,Java 构建包始终将您的应用程序部署为 ROOT 上下文。这意味着没有前缀。

如果您的应用程序中有包含上下文名称的硬编码 URL 或链接,那么当您部署到 CF 时它们将不正确,并且会生成 404。

当您在 CF 上部署时,一个快速测试是转到 /HelloAgain。由于应用程序是在 ROOT 上下文下部署的,因此应该可以通过该 URL 访问它。我怀疑你会在输出中看到"Served at: /"

确保正确生成 URL 的一种方法是使用 JSTL Core 的 &lt;c:url&gt; 标记。另一种方法是从 HttpServletRequest 对象上的参数构建您的 URL。我相信还有很多其他的方法。您只需要确保所使用的 URL 考虑到了应用程序的部署环境。

希望有帮助!

【讨论】:

以上是关于cloud Foundry 404,但本地tomcat很好的主要内容,如果未能解决你的问题,请参考以下文章

谷歌云平台上的 Cloud Foundry

Cloud Foundry Turbine Stream 无法连接到 Command Metric Stream

Node.js 应用程序、Express 和 Cloud Foundry

Spring Boot 微服务在 Pivotal Cloud Foundry 平台上部署时无法通过 Kerberos 身份验证

错误 310:暂存部署失败 - Cloud Foundry 中的 Grails 应用程序

Cloud Foundry平台中国唯一云供应商,阿里云持续链接Cloud Foundry/Kuber