gpt4 book ai didi

java - ReSTLet 在处理完一个请求后停止服务器

转载 作者:行者123 更新时间:2023-12-01 11:36:25 28 4
gpt4 key购买 nike

我想使用Restlet创建本地服务器。该服务器应该接收精确的一个请求(除了图标),并且在处理该请求后它应该关闭。我不想使用 System.exit,我希望它正确关闭。

正如您在我的代码中看到的,当我假设请求得到正确处理时,我注释了该行。但我不能告诉服务器停在那里。

此时我如何告诉服务器停止等待请求?我已经成功了,但有两个问题我想解决。

  • 当我在请求中停止服务器时出现异常
  • 如果我在请求中停止服务器,发送到客户端的响应将不会显示

    public class Main {

    public static void main(String[] args){
    Server serv = null;

    Restlet restlet = new Restlet() {
    @Override
    public void handle(Request request, Response response) {

    if(!request.toString().contains("favicon")){
    System.out.println("do stuff");
    response.setEntity("Request will be handled", MediaType.TEXT_PLAIN);
    //stop server after the first request is handled.
    //so the program should shut down here
    //if I use serv.stop() here (besides it's currently not final)
    //I'd get exceptions and the user wouldn't see the response
    }
    }
    };



    // Avoid conflicts with other Java containers listening on 8080!
    try {
    serv = new Server(Protocol.HTTP, 8182, restlet);

    serv.start();
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    }

最佳答案

我想出了一个办法。将 OnSent 事件添加到响应中,并在此处关闭服务器。

public class Main {

private Server serv;

public Main(){
run();
}

public void run(){

Restlet restlet = new Restlet() {
@Override
public void handle(Request request, Response response) {
response.setEntity("Request will be handled", MediaType.TEXT_PLAIN);
if(!request.toString().contains("favicon")){
System.out.println("do stuff");

response.setOnSent(new Uniform() {

@Override
public void handle(Request req, Response res) {

try {
serv.stop();//stop the server
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});

}
}
};

// Avoid conflicts with other Java containers listening on 8080!
try {
serv = new Server(Protocol.HTTP, 8182, restlet);

serv.start();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void main(String[] args){

new Main();

}

}

关于java - ReSTLet 在处理完一个请求后停止服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29943380/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com