IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

HttpServletResponse vs. JSP


Sujet :

Servlets/JSP Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 8
    Points : 7
    Points
    7
    Par défaut HttpServletResponse vs. JSP
    Bonjour,

    Je suis en train d'adapter un framework AJAX initialement basé sur le mécanisme d'une servlet, lequel écrit toutes les réponses directement dans la HttpServletResponse.

    En gros, voila le principe :

    On lance l'appli depuis le client ->localhost:8080/MonAppli/

    la servlet instancie un service qui va récupérer le Writer de la HttpServletResponse, pour y écrire un code HTML minimal (en gros, juste les balises <HTML><HEAD><TITLE> et <BODY> et un titre. Il y a également dans ce code html une inclusion de javascript dont le code n'est initialement pas fourni, mais chargé grâce à un onLoad().
    Une seconde requête est donc lancée (localhost:8080/MonAppli/serviceId=synchro) afin de récupérer le code du javascript, qui est lui aussi directement inscrit dans la HttpServletResponse. Puis ce javascript lance plein de requetes via un objet XMLHttpRequest, dont les réponses sont egalement directement inscrite dans la HttpServletResponse.

    Bon, voila le contexte. Avec tout ce petit monde, j'ai réussi à remplacer la servlet par une action struts afin de rendre utilisable le framework dans un projet architecturé avec struts. De ce côté là, aucun soucis.

    Mais, vu qu'il fait toujours un mais, j'ai maintenant besoin de passer par une JSP pour afficher mon résultat (car je compte désormais utiliser ce framework dans une portlet avec le bridge struts d'apache, qui me semble-t-il exige une JSP comme intermédiaire...)

    Comment puis-je procéder pour ne plus écrire directement dans la réponse Http, mais bel est bien dans un bean, lequel sera ensuite retranscrit dans une JSP ? sachant que je dois un coup utiliser un Writer (pour les content-type text/...) ou un OutputStream pour les images (pour le moment, je me limite à ça...)

    J'aimerai autant que possible ne pas refaire entièrement mon framework qui marche pas trop mal jusque là, mais seulement "bricoler" au plus rapide pour obtenir une ébauche de truc qui marche...(ah oui, point important, j'ai jamais écrit une seule JSP, et comprends pas vraiment à quoi ça sert dans la mesure ou tout peut être écrit dans une réponse...Alors n'hésitez pas à me "prendre par la main" )

    Merci pour vos conseils

    Cheloute

  2. #2
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Bonjour,

    La première idée qui me vient à l'esprit est de créer pour chaque servlet une page JSP qui ne contiendrait que l'instruction jsp:forward

    Donc je "wrappe" une page JSP autour de ta servlet.

    Es-tu sûr que tu dois passer par une JSP? Car une page JSP est un "dérivé" d'un servlet.
    Bien le bonjour chez vous
    Jowo

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Ben disons qu'une appli struts basique genre helloworld marche au travers d'une JSP dans ma portlet, mais que lorsque je veux écrire ce même helloworld directement dans la reponse, il n'y a rien...Donc je suppose que je dois utiliser une JSP ?
    Ton forward, c'est quoi ? je suppose que je ne dois pas simplement marquer jsp:forward dans le fichier truc.jsp, je dois bien préciser qu'est ce qui est forwardé a qui non ? (j'ai dit, j'y connais dalle en JSP )
    Ce que je comptais faire, c'était rajouter un String dans mon bean, dans lequel j'écrirai tout le contenu que je mettais initialement dans le Writer de la reponse, puis ensuite mettre dans la jsp un truc du genre <bean:write name="bean" property="contenuDuWriter" filter="false"/>

    Mais non, car dans ce cas, le contenu est perdu si mon bean est en scope request (et vu que la page est rempli au fur et a mesure des requetes...), et le reste du bean pose probleme si je mets le scope en session.

  4. #4
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Je ne sais pas si ma solution fonctionne correctement.

    Mon idée est d'effectuer un forward vers ta servlet. Cette dernière écrit dans le response des ta jsp

    Je ne comprend pas tes explications...
    Bien le bonjour chez vous
    Jowo

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par jowo
    Je ne sais pas si ma solution fonctionne correctement.

    Mon idée est d'effectuer un forward vers ta servlet. Cette dernière écrit dans le response des ta jsp

    Je ne comprend pas tes explications...
    Mdrrr, en même temps c'est assez dur à expliquer, c'est vrai.
    Bon, du début.

    J'ai donc une action struts qui s'occupe de tout le graphique de ma webapp.Elle reçoit donc en entrée une requete un form et une reponse http (et le mapping...berf)
    De la au premier appel, mon form est vide, donc un service lancé par mon Action va initialiser le contenu web avec un squelette HTML, qu'il va ensuite ecrire dans le PrintWriter de la reponse Http, puis mon serveur va renvoyer cette réponse au client.
    Le squelette, il a cette gueule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title> 
    </title>
    <meta content="Cheloute EchoStruts" name="generator" />
    <script src="/TreeStruts/TestEchoAction.do?serviceId=Echo.ClientEngine" type="text/javascript"> 
    </script>
    </head>
    <body onload="EchoClientEngine.init('/TreeStruts/TestEchoAction.do', true);" style="position:absolute;font-family:verdana, arial, helvetica, sans-serif;font-size:10pt;height:100%;width:100%;padding:0px;margin:0px;overflow:hidden;"><form action="#" id="c_root" onsubmit="return false;" style="padding:0px;margin:0px;" />
    </body>
    </html>
    Bon, ensuite, on voit qu'il y a un javascript inclu au début : src="/TreeStruts/TestEchoAction.do?serviceId=Echo.ClientEngine"

    Donc une seconde requête est lancée pour le récupérer.

    Côté serveur, mon action struts voit le param Echo.ClientEngine et va donc lancer le service approprié pour écrire le javascript requis dans le PrintWriter de la réponse http.

    ensuite la méthode EchoClientEngine.init(...) est lancé (voir onload dans le code HTML), méthode qui va faire appel à un objet XMLHttpRequest pour demander les bout de javascript dont il a besoin pour construire le corps de la page (c'est un moyen détourné pour ne pas avoir a charger un script de 1.5Mo dès le départ...je ne charge que les éléments dont j'ai besoin, soit un total de 200ko à l'arrivée pour mon appli de test)

    Bon, en utilisation "traditionnelle" cad dans une webapp struts tout va bien, ça marche.

    Maintenant j'aimerai porter ce framework de façon a l'utiliser dans une portlet de type JSR168. Pour éviter de tout refaire, j'utilise le bridge struts d'Apache, qui va gentiment faire abstraction de la page HTML pour la mettre comme il faut dans la portlet. Donc j'ai tenté un exemple tout bete, une JSP (en réalité une page HTML statique donc le code est plus que simple dans la mesure ou mis a part les balises "obligatoires", il n'y avait que HelloWorld), et mon HelloWorld s'est affiché. Mon action struts quand a elle ne faisait que rediriger vers cette JSP.
    J'ai ensuite modifié mon action struts afin qu'elle ne redirige vers rien, mais qu'elle ecrive directement dans la reponse http, comme le fait mon framework.
    et la, ma portlet n'affiche rien (même pas d'erreur, si c pas bien ça...)
    Donc je me dis, surement que le bridge struts requiert le passage obligé vers une JSP ?

    Donc pour vérifier cela, je tente d'adapter mon framework en vue d'écrire le résultat de toutes ces requêtes non plus directement dans la réponse ,mais dans une JSP, via le bean. Alors, pour cela, je crée un StringWriter dans mon bean, et a chaque fois que je faisais appel a ma response.getWriter, ben j'appelle mon bean.getWriter a la place. Ensuite côté JSP, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <bean:write name="bean" property="contenuDuWriter" filter="false"/>
    et espère que ma JSP va se remplir de la même manière qu'en passant par la reponse http.

    Alors, premiere tentative, je défini le scope de mon bean en request :
    Manque de bol (mais c t a prévoir), a chaque requête lancée, le bean est supprimé puis réalloué, et donc le contenu de la JSP vidé puis rerempli (normal...) donc pour les premières requetes "traditionnelles", pas de probleme, mais dès que le XMLHttpRequest entre en jeu, ça plante, vu qu'il doit modifié le contenu existant a partir des requetes qu'il lance. Or si la JSP est vidée, il ne trouve plus ce qu'il a à modifier ,et donc ne trouve même plus le script initial (Echo.ClientEngine pour ceux qui suivent plus) et donc erreur : EchoClientEngine est null.
    Qu'a cela ne tienne, le scope part en session pour un nouvel essai :
    ça a l'air de passer un peu mieux, mais je tombe vite fait sur le résultat suivant : session expirée.

    Je tente alors de mettre le scope en session avec la version "originale" de mon framework, ie celui ou j'ecris directement dans la reponse, même résultat, session expirée...

    Donc voila, je suis bloqué, et ne sais pas vraiment quoi faire...

    J'espère avoir été plus clair !!!

    Cheloute

Discussions similaires

  1. [XSLT][JSP] solution technique pour cas typique
    Par Alix_10 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 04/09/2006, 13h09
  2. Erreur lors de l'execution d'un script jsp
    Par tuxor dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 06/08/2004, 12h35
  3. [JSP/Servlet] Outils pour developper?
    Par BenoitM dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 04/05/2004, 11h03
  4. [debogage]JSP
    Par polo54 dans le forum JBuilder
    Réponses: 3
    Dernier message: 10/06/2003, 11h57
  5. problème JSP avec JBuilder et Weblogic 7
    Par viny dans le forum JBuilder
    Réponses: 2
    Dernier message: 24/04/2003, 08h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo