2013-06-16 4 views
1

Я строю сервер Java, и все работает так, как ожидалось до сих пор. Я могу обслуживать статическую html-страницу, используя два метода, которые я написал: body и header. Теперь я пытаюсь написать новый метод, называемый bodywithQueryString.Создание Java-сервера, и я не могу заставить мою страницу останавливать загрузку (используя PrintWriter и Buffered Reader)

Проблема: Это почти работает, но после того, как страница загружена, загрузка не остановится. Он просто загружает и загружает. Это не происходит с моими статическими страницами.

Единственное отличие между старым методом и новым методом 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(); 
    } 
+1

Этот код не компилируется. Вы отредактировали какой-то код. – Raedwald

+0

Спасибо @ Raedwald. Вы писали. Я пытался только опубликовать соответствующий код, чтобы не тратить время других людей. Теперь я понимаю, что я не писал достаточно. – Kelly

ответ

1

Мне кажется, что вы не возвращает заголовок Content-Length. Это затрудняет браузеру, когда прекращается загрузка ответа.

+0

Спасибо! Ты был мертв. Моя длина контента отключена. Спасибо за совет. – Kelly

 Смежные вопросы

  • Нет связанных вопросов^_^