java - 无法在后台使用内置的 nanohttpd 服务器运行 jar(使用 nohup)

标签 java jar nohup nanohttpd

我的应用程序中有简单的 nanohttpd 服务器实现,当我以常规方式运行它时它工作正常 ( java -jar myApp.jar )。但是当我尝试运行它时,因为后台进程 nanohttpd 没有收到 http 请求,浏览器就会卡住并且永远不会收到响应。日志文件中也没有消息,我只收到服务器启动的消息:Server started, Hit Enter to stop.

我用来在后台运行我的应用程序的命令:nohup java -jar myApp.jar &我还尝试了很多不同的变体,包括写入日志等(即 nohup java -jar myApp.jar >myApp.log 2>&1 & )。

我的服务器类代码:

public class WebServer extends NanoHTTPD {

public static final String JSON_STATUS = "status";
public static final String JSON_MESSAGE = "message";
public static final String JSON_RESPONSE = "response";

private static final Logger logger = Logger.getLogger(WebServer.class
        .getName());

private static final String FAVICON_URL = "/favicon.ico";
private static final String MYME_JSON = "application/json";
private static final int PORT = 1313;

public WebServer() throws IOException {
    super(PORT);
}

@Override
public Response serve(IHTTPSession session) {
    Map<String, String> params = session.getParms();
    String uri = session.getUri();
    if (!uri.equals(FAVICON_URL)) {
        logger.info("Request url: " + uri);
    }
    JSONObject result = RoutesController.resolveRoute(uri, params);
    Response response = new Response(Status.OK, MYME_JSON,
            result.toString());
    return response;
}
}

我的主类代码:

public class Application {

private static final Logger logger = Logger.getLogger(Application.class
        .getName());

public static void main(String[] args) {
    ServerRunner.run(WebServer.class);
    return;
}
}

对任何信息都非常有帮助...

最佳答案

终于知道问题出在哪里了。 NanoHTTPD 的默认 ServerRunner 使用 System.in.read(); 等待按下输入以停止服务器。问题是 System.in.read(); 阻止了go后台的应用。所以我只写了我自己的 ServerRunner,它不与输入流交互,服务器可以通过简单的 bash 脚本或获取请求停止。

关于java - 无法在后台使用内置的 nanohttpd 服务器运行 jar(使用 nohup),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31093007/

相关文章:

java - android中如何从字符串中获取资源

java - 如何使用多线程增加java中的 volatile 整数?

java - 在 Jackson 构造函数中使用自定义对象

java - 从 jar 文件复制目录

c# - 有什么方法可以在后台运行进程?

java - 当我们有多个按钮时如何重定向到 servlet

java - 在java中使用.jar程序复制目录

linux - 运行进程nohup

java - 'nohup mycommand &' 通过 Java 代码

java - 如何更改 JAR 中类的包名称?