gpt4 book ai didi

java - 仅对某些请求执行代码 Java

转载 作者:行者123 更新时间:2023-12-01 06:56:55 25 4
gpt4 key购买 nike

我正在为类构建一个小 API,老师向我们提供了一个教程的链接,该教程提供了一个实现 Runnable 的简单网络服务器。

我已经编写了一些代码来解析参数(或者至少获取请求字符串)以及一些将返回一些简单 xml 的代码。

但是我认为某些请求(例如图标图标)已发送,我认为这弄乱了我的代码。我将其包装在 if else 中,但它似乎不起作用。

=====已编辑,因为基本字符串比较错误=====

package server;

import java.io.IOException;


import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.*;
import java.io.*;
import java.net.*;
import parkinglots.*;

/**
import our API
*/
public class WorkerRunnable implements Runnable{

protected Socket clientSocket = null;
protected String serverText = null;

public WorkerRunnable(Socket clientSocket, String serverText) {
this.clientSocket = clientSocket;
this.serverText = serverText;
}

public Boolean authenticateAPI(String key){
//Authenticate Key against Stored Keys

//TODO: Create Stored Keys and Compare
return true;
}

public void run() {
try {
InputStream input = clientSocket.getInputStream();
OutputStream output = clientSocket.getOutputStream();
long time = System.currentTimeMillis();


//TODO: Parse args and output different formats and Authentication
//Parse URL Arguments
BufferedReader in = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream(), "8859_1"));

String request = in.readLine();

//Server gets Favicon Request so skip that and goto args
System.out.println(request);
if ( !"GET /favicon.ico HTTP/1.1".equals(request) && !"GET / HTTP/1.1".equals(request) && !"".equals(request) ){

String format = "", apikey ="";

System.out.println("I am Here");

String request_location = request.split(" ")[1];
String request_args = request_location.replace("/","");
request_args = request_args.replace("?","");
String[] queries = request_args.split("&");

System.out.println(queries[0]);

for ( int i = 0; i < queries.length; i++ ){
if( queries[i].equals("format") ){
format = queries[i].split("=")[1];
}
else if( queries[i].equals("apikey") ){
apikey = queries[i].split("=")[1];
}
}

if( apikey.equals("") ){
apikey = "None";
}

if( format.equals("") ){
format = "xml";
}

System.out.println("format: "+format);

Boolean auth = authenticateAPI(apikey);

if ( auth ){
if ( format.equals("xml")){
// Retrieve XML Document
String xml = LotFromDB.getParkingLotXML();
output.write((xml).getBytes());
}else{
//Retrieve JSON
String json = LotFromDB.getParkingLotJSON();
output.write((json).getBytes());
}
}else{
output.write(("Access Denied - User is Not Authenticated").getBytes());
}
}else{
output.write(("Access Denied Must Pass API Key").getBytes());
}

output.close();
input.close();
System.out.println("Request processed: " + time);
} catch (IOException e) {
//report exceptions
e.printStackTrace();
}
}
}

我得到的控制台输出

GET /?format=json HTTP/1.1
I am Here
format=json
json
format: xml

它也总是返回 XML。

这是我第一次接触用 Java 编写 Web 服务器和处理网络,这通常让我很沮丧,所以非常感谢这里的任何建议。

在得到其他人的一点帮助后,结果是这一部分。我正在比较字符串的错误部分,因此它从未匹配

                if( queries[i].split("=")[0].equals("format") ){
format = queries[i].split("=")[1];
}
else if( queries[i].split("=")[0].equals("apikey") ){
apikey = queries[i].split("=")[1];
}

最佳答案

对于所有字符串比较,您需要使用 equals 而不是 ==

示例:条件 block 中的 if( format.equals("xml")) 还检查​​ request 是否为 null

if (request != null && !"GET /favicon.ico HTTP/1.1".equals(request) 
&& !"GET / HTTP/1.1".equals(request) && !"".equals(request) )

关于java - 仅对某些请求执行代码 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10005371/

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