我正在构建一个 Java 服务器,到目前为止一切都按预期工作。我可以使用我编写的两种方法提供静态 html 页面:正文和标题。现在,我正在尝试编写一个名为“bodywithQueryString”的新方法。
问题: 它几乎可以工作,但是页面加载后,加载不会停止。它只是加载和加载。我的静态页面没有发生这种情况。
旧方法和新 bodyWithQueryString() 方法之间的唯一区别在于,在新方法中,我使用的是缓冲读取器和打印写入器。这些对我来说是新功能,所以我猜我做得不对。
下面是我的新方法应该如何工作: 我想将我的路由和查询字符串(queryarray)传递给 bodyWithQueryString 方法。我希望该方法将文件(从路由)读取到字节输出流,在读取时对查询字符串的键/值对进行替换,最后返回字节。然后 getResponse() 主要方法会将 html 发送到浏览器。
这是我的代码:
public void getResponse() throws Exception {
String[] routeParts = parseRoute(route); //break apart route and querystring
File theFile = new File(routeParts[0]);
if (theFile.canRead()) {
out.write(header( twoHundredStatusCode, routeParts[0], contentType(routeParts[0]) ) );
if (routeParts.length > 1) { //there must be a querystring
String[] queryStringArray = parseQueryString(routeParts[1]); //break apart querystring
out.write(bodyWithQueryString(routeParts[0], queryStringArray)); //use new body method
}
else out.write(body(routeParts[0])); //use original body method
out.flush();
private byte[] bodyWithQueryString(String route, String[] queryArray)
throws Exception {
BufferedReader reader = new BufferedReader(new FileReader(route));
ByteArrayOutputStream fileOut = new ByteArrayOutputStream();
PrintWriter writer = new PrintWriter(fileOut);
String line;
while ((line = reader.readLine()) != null) writer.println(line.replaceAll(queryArray[0] ,queryArray[1]));
writer.flush();
writer.close();
reader.close();
return fileOut.toByteArray();
}