gpt4 book ai didi

java - 构建休息服务器

转载 作者:行者123 更新时间:2023-11-29 04:37:56 25 4
gpt4 key购买 nike

我已经学会了如何发送和处理 Rest API 请求,因此对外部用户如何通过打开与 API 的连接、设置请求方法和处理返回消息等方法向 API 提交请求相当满意.
然而,是时候创建我自己的 Rest Web 服务了,我有点卡住了,因为我并不完全熟悉服务器将如何处理通信。
我可以很好地建立连接以允许通信,但我对连接的细节不是特别满意。
下面是我初始化服务器的方法,然后服务器将等待连接,并进行简短的对话,直到客户端断开连接。

    public void Initialise(){
try {
ServerSocket s = new ServerSocket(21); //TODO: Change port?
while(true){
Socket incoming = s.accept();
Runnable r = new ConnectionManager(incoming);
Thread t = new Thread(r);
t.start();
}
}
catch(IOException e){
e.printStackTrace();
}
}

以及处理连接的类。

public class ConnectionManager implements Runnable{
private Socket incoming;

public ConnectionManager(Socket i){
this.incoming = i;
}

@Override
public void run() {
try{
try{
//Initialise IOStreams
InputStream inStream = incoming.getInputStream();
OutputStream outStream = incoming.getOutputStream();

Scanner in = new Scanner(inStream);
PrintWriter out = new PrintWriter(outStream, true);

out.println("TODO: Change this message. Press Q to quit.");

boolean done = false;
while (!done && in.hasNextLine()){
String line = in.nextLine();
out.println("Echo: " +line);
if (line.trim().equals("Q")){
done = true;
}
}
}
finally{
incoming.close();
}
}
catch (IOException e){
e.printStackTrace();
}
}

我不确定该怎么做,是我如何开始构建一个应用程序来监听 Rest 请求,然后相应地处理它们。我确信在检查连接后,我能够设计功能来处理 API 请求,但是我不知道如何查看用户发送的 Rest 请求的细节。
例如,如果用户要发送一个请求,例如

GET exampleAPI/endpoint?params  

我如何检查请求,然后相应地处理它?<​​/strong>
例如,在客户端发起请求时,使用 HttpURLConnection 等方法可以让您遵循

HttpURLConnection c = (HttpURLConnection) targetURL.openConnection();
c.setRequestMethod("GET");

这将允许您向目标 URI 提交 Get 请求。
查看 Socket 的 Java 文档,我不太清楚如何查看传入请求和 Activity 连接。
我是不是遗漏了什么,或者只是做错了事?

最佳答案

正如我在评论中提到的,您可以为此使用 Jersey/Spring 等,而不是为整个服务器重写逻辑并处理多个线程等。

此外,您应该知道有一个名为 JAX-RSJDK API(规范加实现)。你可以看看here

可以看看here对于 Spring REST Controllerhere Jersey 。

我建议您先学习一下JDK JAX-RS API,然后再看看Spring and Jersey

还有其他实现JAX-RS的厂商,你可能感兴趣,可以看看here用于比较 JAX-RS 实现。

P.S.:您还应该知道 Spring 不符合 JAX-RS API,而是他们有自己的 API

关于java - 构建休息服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40455038/

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