Java中的StringIndexOutOfBoundsException?

Java中的StringIndexOutOfBoundsException?,java,Java,我尝试运行这个java程序,它会在我的webroot文件夹中返回一个网页 import java.io.DataOutputStream; import java.io.File; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class WebServer { static ServerS

我尝试运行这个java程序,它会在我的webroot文件夹中返回一个网页

import java.io.DataOutputStream;
import java.io.File;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class WebServer {

    static ServerSocket requestListener;
    static Socket requestHandler;
    static Scanner requestReader, pageReader;
    static DataOutputStream pageWriter;
    static String HTTPMessage;
    static String requestedFile;
    public static int HTTP_PORT = 12346;

    public static void main(String[] args) {

        try {

            requestListener = new ServerSocket(HTTP_PORT);

            System.out.println("Waiting For IE to request a page:");
            requestHandler = requestListener.accept();
            System.out.println("Page Requested: Request Header:");

            requestReader = new Scanner(new InputStreamReader(
                    requestHandler.getInputStream()));
//THis is the part where its throwing the error

            int lineCount = 0;
            do {

                lineCount++; // This will be used later
                HTTPMessage = requestReader.next();
                System.out.println(HTTPMessage);
                if (lineCount == 1) {
                    requestedFile = "WebRoot\\"
                            + HTTPMessage.substring(5,
                                    HTTPMessage.indexOf("HTTP/1.1") - 1);
                    requestedFile = requestedFile.trim();
                }

                // localhost:12346/default.htm
                // HTTPMessage = requestReader.nextLine();
                pageReader = new Scanner(new File(requestedFile));
                pageWriter = new DataOutputStream(
                        requestHandler.getOutputStream());
                while (pageReader.hasNext()) {
                    String s = pageReader.nextLine();
                    // System.out.println(s);
                    pageWriter.writeBytes(s);
                }
                // Tells the Browser we’re done sending
                pageReader.close();
                pageWriter.close();
                requestHandler.close();

            } while (HTTPMessage.length() != 0);
        } catch (Exception e) {

            System.out.println(e.toString());
            System.out.println("\n");
            e.printStackTrace();
        }
    }
}
我收到了这个错误信息。我应该在IE中获得一个网页,但我得到的只是这个错误消息

正在等待IE请求页面:

Page Requested: Request Header:
GET
    java.lang.StringIndexOutOfBoundsException: String index out of range: -7
        at java.lang.String.substring(Unknown Source)
        at WebServer.main(WebServer.java:39)

引发此错误的原因是字符串“HTTPMessage”不包含字符串“HTTP/1.1”。因此

HTTPMessage.indexOf("HTTP/1.1")  => returns -1
在我们的子串函数中,传递的是:

 HTTPMessage.substring(5, -2);
因此出现了错误

要解决此错误,应首先尝试检查HTTPMessage是否包含所需的字符串,然后尝试计算子字符串。进行以下更改:

 if (lineCount == 1 && HTTPMessage.indexOf("HTTP/1.1") != -1) {
                requestedFile = "WebRoot\\"
                        + HTTPMessage.substring(5,
                                HTTPMessage.indexOf("HTTP/1.1") - 1);
                requestedFile = requestedFile.trim();
  }

您是否在询问
StringIndexOutOfBounds
代表什么,或者为什么您的代码会抛出此异常?简单的回答是,您的代码在某个地方引用了一个索引为
-7
的字符串,您需要调试发生这种情况的位置。有没有可能发生在这里:
HTTPMessage.indexOf(“HTTP/1.1”)-1)
-您是否检查了此代码中的响应?似乎您希望找到该子字符串,但它实际上不在输入中?我正在尝试从http标头中提取请求的页面标题