NanoHTTPD отвечает одним и тем же файлом на все файлы веб-страницы
У меня есть приложение для Android с веб-обзором, и мне нужно, чтобы Nanohhtd имел веб-сервер в моем приложении для Android.
Отредактировано: все файлы и структура сохраняются во внутреннем хранилище приложения.
Метод ответа сервера отвечает на файл, который я вызываю: главная страница html. Это нормально, и страница отображается в веб-просмотре, но javascript не работает.
Вместо того, чтобы возвращать только HTML-страницу, которая мне нужна, она заменяет весь код в файлах, которые нужны моей странице для того же кода: HTML-содержимое главной веб-страницы.
Когда я проверяю страницу, все файлы js имеют то же содержимое, что и основной html-файл.
Например:
главная страница hmtl - NanoHTTPD должен был его вернуть.
<!DOCTYPE html>
<html>
<head>
<script src='sw/bootstrap/js/bootstrap.min.js'></script>
<script src="generator.js"></script>
<script src='sw/swipe.js'></script>
</head>
<body>
</body>
</html>
И файлы в нем должны были иметь свой код
Например, генератор.js. вместо этого:
function getAltura(alturaOriginal, larguraOriginal, larguraRedimensionada){
var n1 = alturaOriginal * larguraRedimensionada;
return n1 / larguraOriginal;
}
function gerarPagina(numPagina){
$(".swipe-wrap").append("<div id="+numPagina+"><img class='paginas' src='edicoes/"+raiz+"/paginas/pagina_"+numPagina+".png'> </div>");
}
function setLinkVideo(linkVideo){
document.getElementById('video-noticia').src = linkVideo;
}
генератор.js имеет это:
<!DOCTYPE html>
<html>
<head>
<script src='sw/bootstrap/js/bootstrap.min.js'></script>
<script src="generator.js"></script>
<script src='sw/swipe.js'></script>
</head>
<body>
</body>
</html>
Так же, как главная страница. И это происходит со всеми файлами внутри html-страницы, на которую отвечает nanohttp.
Наконец, я использую этот код как ответ NanoHTTPD:
@Override
public Response serve(IHTTPSession session) {
String answer = "";
try{
FileReader filereader = new FileReader(contextoMain.getFilesDir()+ "/"+path);
BufferedReader reader = new BufferedReader(filereader);
String line = "";
while ((line = reader.readLine()) != null) {
answer += line;
}
reader.close();
}catch(IOException ioe) {
Log.w("Httpd", ioe.toString());
}
return newFixedLengthResponse(answer);
}
Путь к файлу в папке android filesDir правильный. Но что я делаю неправильно, что Nanohttp отвечает одинаковым кодом на все файлы?
Он должен был ответить только на один файл.
Заранее спасибо!
Класс сервера - NanoHTTP сервер
import android.content.Context;
import android.util.Log;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Map;
/**
* Created by on 11/12/15.
* gerencia o webserver
*/
public class Myserver extends NanoHTTPD {
private final static int PORT = 8080;
Context contextoMain;
private String path;
public Myserver(Context cont, String _path) {
super(PORT);
contextoMain = cont;
this.path = _path;
try {
start();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println( "\nRunning! Point your browsers to http://localhost:8080/ \n" );
}
@Override
public Response serve(IHTTPSession session) {
String answer = "";
try{
//InputStreamReader input = new InputStreamReader(contextoMain.getAssets().open("test.html"));
FileReader filereader = new FileReader(contextoMain.getFilesDir()+ "/"+path);
BufferedReader reader = new BufferedReader(filereader);
String line = "";
while ((line = reader.readLine()) != null) {
answer += line;
}
reader.close();
}catch(IOException ioe) {
Log.w("Httpd", ioe.toString());
}
return newFixedLengthResponse(answer);
}
1 ответ
Finally, I use this code as response of the NanoHTTPD
, Ну, ты должен был начать с этого. И важная информация отсутствует, какова ценность в path
? И где мы можем увидеть, что вы смотрите, какой файл запрашивается? Вы этого не делаете. Вы только сервер файл в path
что всегда так же, как и где бы вы изменили?