클래스 용으로 약간의 API를 구축 중이며 선생님이 Runnable을 구현하는 간단한 웹 서버를 제공하는 자습서에 대한 링크를 제공했습니다.특정 요청에 대해서만 코드 실행 Java
나는 인수 (또는 적어도 요청 문자열을 얻는다)와 간단한 xml을 반환 할 일부 코드를 구문 분석 할 일부 코드를 이미 작성했습니다.
그러나 favicon에 대한 요청과 같은 특정 요청은 내 코드가 엉망이라고 생각합니다. 나는 그것을 다른 곳에 포장했지만 작동하지 않는 것 같습니다. 때문에 기본 문자열 비교 오류의 수정 됨
=====은 =====
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();
}
}
}
콘솔 출력은 내가 항상뿐만 아니라 XML을 반환
GET /?format=json HTTP/1.1
I am Here
format=json
json
format: xml
를 얻을.
이것은 웹 서버를 작성하고 Java 네트워킹을 다루는 데 처음 접했을 때 일반적으로 많이 좌절 시켰습니다. 따라서 제안 사항은 매우 만족 스럽습니다.
다른 사람들로부터 조금만 도움을 받으면이 부분이됩니다. if(format.equals("xml"))
조건 블록도 request
있는지 확인 : 그것은 당신이 대신 ==
예 equals
를 사용하는 데 필요한 모든 you'r 문자열 비교를 위해
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];
}