2013-03-14 3 views
1

J'ai essayé d'implémenter un petit serveur http dans mon programme C++ pour utiliser un site Web comme interface utilisant la bibliothèque dlib (http://dlib.net/network.html#server_http). Ce que ce code devrait faire est de lire un fichier html d'entrée sur demande et de le renvoyer.Le serveur http dlib montre le site Web en tant que html simple sans javascript/css

class web_server : public server_http 
{ 
    const std::string on_request ( 
     const incoming_things& incoming, 
     outgoing_things& outgoing 
    ) 
    { 
     ostringstream sout; 
     sout<<get_file_contents("Seite.html"); 
     return sout.str(); 
    } 

}; 

Cela fonctionne mais mon navigateur affiche uniquement le site html sans éléments javascript/css. Ceux-ci sont intégrés dans le fichier html via:

<script type="text/javascript" src="scripte.js")> 
    </script> 
    <link rel="stylesheet" type="text/css" href="Style.css"> 

Le html semble bien si je l'ouvre avec le navigateur directement. Merci d'avance

Editer: Merci Davis King J'ai au moins le travail javascript, tandis que le CSS refuse toujours de travailler. J'ai réussi à mettre dans une réponse générique qui envoie maintenant un fichier demandé en tant que chaîne: corps de on_request:

ostringstream sout; 
sout<<get_file_contents("Seite.html"); 
cout << "request path: " << incoming.path << endl; 
string filename=incoming.path.substr(1,incoming.path.length()); 
if (incoming.path.substr(0,1) == "/" && incoming.path.length()>1) return get_file_contents(filename.c_str()); 
return sout.str(); 

Modifier à nouveau: Il fonctionne maintenant. Chrome m'a donné un indice, il a dit que le type MIME du fichier de feuille de style est text/html, mais il est censé être text/css. J'ai changé ma méthode de réponse en conséquence et il fonctionne maintenant:

if (incoming.path=="/Style.css") outgoing.headers["Content-Type"] == "text/css"; 

En question de suivi: Pourquoi les fichiers CSS et js déclenchent une demande, et non les images que je référencé dans le code HTML qui semblent fonctionner comme autant que je peux dire avec la mise en page foiré? Mais merci beaucoup de toute façon, je vous upvote mais je ne peux malheureusement pas ...

+0

Quelles sont les URL pour les images? Si elles fonctionnent, les URL doivent être des images sur un autre serveur. –

+0

Voici un exemple de fichier qui est stocké localement: Comme il apparaît dans la console, une requête correcte est envoyée mais je ne comprends pas comment fonctionne ma réponse générique pour les fichiers texte brut avec un gif – user2160180

+0

Les octets sont des octets, Donc, si tout ce que vous faites est de lire les octets du disque et de les retourner, alors cela fonctionnera, peu importe ce qu'il y a dans le fichier. Cependant, vous pourriez trouver que vous avez besoin de définir le type de contenu pour certains fichiers afin que le navigateur se rende compte de ce qu'il faut faire avec, mais en gros, il devrait être en mesure de le comprendre. –

Répondre

0

Le navigateur va demander les fichiers Style.css et scripte.js du serveur web, mais comme vous l'avez écrit , il ne répondra jamais qu'avec le fichier Seite.html. Donc, vous devez ajouter quelque chose comme ceci à votre méthode on_request:

cout << "request path: " << incoming.path << endl; 
if (incoming.path == "/scripte.js") 
    return get_file_contents("scripte.js"); 
else if (incoming.path == "/Style.css") 
    return get_file_contents("Style.css"); 
+0

Merci beaucoup, mais si votre réponse semble raisonnable, cela ne fonctionne pas. La console affiche le chemin de la requête correctement, mais la vue ne change pas du tout. Les fichiers javascript et css sont dans le même répertoire que l'exécutable du serveur et le fichier html. – user2160180

+0

Whoa je viens de réaliser, la partie javascript fonctionne en effet maintenant, je ne l'ai tout simplement pas vu d'abord parce que css ne fonctionne pas et je ne peux pas voir beaucoup. Toujours aucune idée pourquoi css ne fonctionne pas. – user2160180

+0

Peut-être que le navigateur a mis en cache la réponse précédente à Style.css? Le voyez-vous demander le fichier Style.css? –

Questions connexes