Ich habe an einem einfachen HTTP-Web-Server in Java gearbeitet. jedoch scheint ich in ein Problem zu laufen, wo, wenn ich versuche, den Dateinamen in der Anfrage zu erhalten, bekomme ich einen Array außerhalb der Grenzen Fehler, obwohl es nicht außerhalb der Grenzen und ich kann es deutlich im Array zu sehen. kann jemand helfen Code ist untenHttp Webserver Array außerhalb der Grenzen Fehler
public static void main(String[]args) throws Exception{
ServerSocket ss = new ServerSocket(8080);
while(true){
Socket s= ss.accept();
String ip = s.getInetAddress().toString();
ConnectionHandler ch = new ConnectionHandler(s);
ch.start();
System.out.println(ip);
}
public class ConnectionHandler extends Thread{
private Socket s;
private PrintWriter pw;
private BufferedReader br;
public ConnectionHandler(Socket s) throws Exception{
this.s = s;
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
pw = new PrintWriter(s.getOutputStream());
}
@Override
public void run(){
String reqs = "";
try {
while(br.ready()){
reqs += (char) br.read();
//System.out.println(reqs);
HttpRequest hr = new HttpRequest(reqs);
HttpResponse res = new HttpResponse(hr);
pw.write(res.response.toCharArray());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
pw.close();
try {
br.close();
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class HttpRequest {
String fileName;
public HttpRequest(String reqs){
String lines[] = reqs.split("\n");
//System.out.println(lines[0]);
String lines1[] = lines[0].split(" ");
for(int i = 0;i<lines1.length;i++){
System.out.println(i + lines1[i]);
}
fileName = lines1[1]; //error is here
}
}
public class HttpResponse {
private HttpRequest req;
String response;
private String root="H:/root";
private FileInputStream fis;
private File f;
public HttpResponse(HttpRequest hr) throws Exception {
req = hr;
if(req.fileName == null){
f = new File("H:/root/helloworld.html");
fis = new FileInputStream(f);
}else{
f = new File(root + req.fileName);
fis = new FileInputStream(f);
}
response = "HTTP/1.1 200";
response += "content-type: text/html \r\n";
response += "Connection: close \r\n";
response += "content-length: " + f.length() + "\r\n";
response += "\r\n";
int s;
while((s=fis.read())!=-1){
response += (char) s;
}
fis.close();
}
}
versucht, dass aber das gleiche Problem bekam. Ich weiß, dass es in der Anfrage korrekt in das Array eingelesen wird, weil ich für jede Schleife eine Überprüfung vorgenommen habe, um die ganze Datei zu prüfen. fileName = lines1 [1]; dass es nicht mag und ich bin nicht sicher, warum – jabjab25
Doing this funktioniert für mich. (Bearbeiten) Ich habe stattdessen die Antwort aktualisiert, da der Code hier nicht lesbar war. – Erik
Das hat perfekt für mich funktioniert jetzt sehe ich, wo ich falsch ging, danke für Ihre Hilfe – jabjab25