浏览器无法连接到Jetty服务器

时间:2014-11-07 13:07:08

标签: java servlets websocket jetty embedded-jetty

我在StackOverflow上看到了这样的另一个问题,但他得到的答案很漂亮,很可笑。 “连接到localhost。” - 好吧,好吧。

无论如何,问题是我终于让我的嵌入式Jetty服务器进行编译和运行,问题是因为我在API中使用它需要源代码,而不仅仅是依赖项。

我现在正在运行最基本的hello-world代码,服务器正在启动,但我的浏览器都不能形成连接。

以下是代码:

try {
    httpServer = new Server(8080);
    httpServer.setHandler(new JettyPage());
    httpServer.start();
} catch(Exception e) {
    e.printStackTrace();
}

当然,这是JettyPage.java:

public class JettyPage extends AbstractHandler {

    @Override
    public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html;charset=utf-8");
        response.setStatus(HttpServletResponse.SC_OK);
        baseRequest.setHandled(true);
        response.getWriter().println("<h1>Hello world.</h1>");
    }

}

控制台中的输出:

2014-11-07 07:01:05.155:INFO::main: Logging initialized @599ms
2014-11-07 07:01:05.190:INFO:oejs.Server:main: jetty-9.3.0.M1
2014-11-07 07:01:05.215:INFO:oejs.ServerConnector:main: Started ServerConnector@6e5e91e4{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
2014-11-07 07:01:05.215:INFO:oejs.Server:main: Started @660ms

火狐:

The connection was reset

歌剧:

No data received

铬:

No data received

---是的,我正在连接到localhost:8080 我也尝试过:0.0.0.0:8080和127.0.0.1:8080

注意:如果我禁用在端口80上运行的apache服务器,并将Jetty绑定到端口80,我仍然无法连接。

2 个答案:

答案 0 :(得分:1)

我有完全相同的问题...非常简单的代码,即使它从命令行和IDE编译并运行,也无法让浏览器连接到Jetty。最后追溯到不匹配的servlet和Jetty罐子(至少我认为这导致了问题)。对我有用的是javax-servlet-api-3.1.0.jar和jetty-all-9.2.8.v20150217.jar。一旦我开始使用那些我可以连接的代码是在命令行或NetBeans IDE中编译的。

对于像我这样的原始noob,命令行编译的大多数在线示例都使用Linux / Unix路径分隔符(“:”)。我花了几分钟才弄清楚Windows机器上我需要一个不同的(“;”):

javac -cp .; javax.servlet-api-3.1.0.jar; jetty-all-9.2.8.v20150217.jar HelloWorld.java

希望有所帮助。

答案 1 :(得分:0)

如果您完全遵循HelloWorld示例,则会有响应。

您的运行时环境仍然存在问题。

你正在运行这个窗口吗?如果是这样,请尝试将端口设置为8080以外的其他设置(尝试38080),因为您可能已经在该端口上有一些东西,并且在这种情况下Windows不会抛出错误或警告。 (在其他操作系统上,这将导致绑定异常)

您是否有任何记录输出指示错误或警告?

即使在启动服务器或提供某些内容时出错,也应该有足够的日志记录输出到控制台。

如果要启用非常详细的日志记录,可以将-Dorg.eclipse.jetty.LEVEL=DEBUG添加到java执行中。

Windows版

> java -Dorg.eclipse.jetty.LEVEL=DEBUG -cp .;servlet-api.jar;jetty-all.jar HelloWorld

Linux / OSX / Unix版本

$ java -Dorg.eclipse.jetty.LEVEL=DEBUG -cp .:servlet-api.jar:jetty-all.jar HelloWorld