2010-06-04 5 views
1

J'ai un problème avec l'implémentation de la requête "forwarded" dans java. J'ai donc une servlet, et je veux que pour la demande localhost (servlet fonctionne sur localhost) je reçois une page (page définie interne au programme) et peux continuer à travailler avec cette page en utilisant localhost. Exemple: page defined: stackoverflow.com Donc, si je tape url du navigateur: localhost, je reçois le contenu de stackoverflow mais l'URL doit être localhost, si je vais à localhost/tags je reçois le contenu de stackoverflow/tags mais l'url devrait toujours être localhost/tags. J'espère pour votre aide les gars"Forwarded" request

Répondre

1

Il semble que vous ayez à implémenter une sorte de proxy HTTP tunnel dans votre servlet. Heureusement, ce n'est pas si difficile à faire et il peut même y avoir des options open source disponibles là-bas.

Ce lien peut vous être utile: http://httpd.apache.org/docs/2.0/mod/mod_proxy.html

+1

Exactement, ce qui est plus d'un problème de réseau ("comment puis-je faire des demandes à localhost aller à www.stackoverflow.com?") qu'une question de servlet en soi –

0

Cela ne peut pas être transmis car il est sur un autre domaine. Un forward ne peut avoir lieu que vers une ressource dans le contexte webapplication.

Vous devez inclure la ressource externe. Le JSTL<c:import> peut être utile ici.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<c:import url="http://stackoverflow.com" /> 

C'est essentiellement tout.

Une alternative est l'élément HTML , la différence est qu'il comprend au côté client.

<iframe src="http://stackoverflow.com"></iframe> 

Cela ne fonctionne pas parfaitement sur certains sites tels que Stackoverflow;) L'avantage est toutefois que l'URL parent reste le même tout le temps, quel que soit ce que vous faites sur le site inclus (sauf de l'ouverture liens dans un nouvel onglet/fenêtre).

0

hmm vous pouvez utiliser un httpclient pour obtenir le contenu complet du site, puis l'envoyer à l'agent utilisateur à l'aide HttpComponents httpclient ou le package maillot-client comme dans:

public void doGet(HttpServletRequest req,HttpServletResponse resp){ 
    HttpClient client=new HttpClient() // dont instantiate like this it's a heavyweight ;) 
    GetMethod get=new GetMethod("http://stackoverflow.com/"); 
    int status=client.executeMethod(get); 
    if (status=200){ 
     resp.getWriter().write(get.getResponseBodyAsString().getBytes("UTF-8")); 
     resp.getWriter().flush(); 
    }else{ 
     // handle error 
    } 
    get.releaseConnection(); 

} 
+0

que faire si vous devez maintenir une session? – LoudNPossiblyWrong

+0

vous devrez alors ajouter l'état à votre programme, ce qui enregistre la session en interne et la définit en utilisant l'API httpsomponents lors d'un appel au site tiers. comme dans get.setRequestHeader ("Cookie", "JSESSIONID = xxx"); – fasseg

+0

Quel type de HttpClient est-ce? D'apache? –