2009-03-13 5 views
5

Je suis chargé d'essayer de créer un site qui créera des modèles HTML personnalisés. Les personnalisations sont personnalisées lors de la saisie par l'utilisateur. J'utilise actuellement Tomcat/JSP pour le reste de l'interface. Ce que je veux faire est de créer les templates HTML dans JSP pour sortir du code HTML conditionnel, mais au lieu d'afficher cette sortie HTML à l'utilisateur, je voudrais enregistrer ce code dans plusieurs fichiers (qui seront ensuite compressés et livrés à l'utilisateur, avec des images, des fichiers css, des fichiers js). J'ai besoin de savoir comment créer un faux conteneur qui va exécuter un fichier JSP (le processus inclut et évalue les variables). J'ai lu à propos de l'utilisation des filtres de serveur pour intercepter la sortie du code JSP, mais je ne suis pas sûr que cela fonctionnera car a) Je dois créer plusieurs fichiers HTML et b) J'ai besoin d'afficher un contenu différent pour l'utilisateur (c.-à-d. voici le fichier zip, téléchargez-le) et non la sortie de la JSP en cours de traitement.Capturez la sortie JSP, enregistrez dans le fichier

Merci!

Répondre

4

Voici une idée. Créez une servlet pour accepter l'entrée de l'utilisateur, à partir du servlet, utilisez java.net.HttpURLConnection pour transmettre l'entrée à la page JSP et obtenir le résultat.

URL urlPage = new URL(url); 
HttpURLConnection conn = (HttpURLConnection)urlPage.openConnection(); 
conn.connect(); 
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

//then loop through lines of webpage with br.readLine(); 

Ensuite, dans votre servlet vous pouvez zip tous les fichiers que vous tirez et le retourner à l'utilisateur

0

Pourquoi ne pas utiliser wget? Vous pouvez charger les pages dans un vrai conteneur, puis récupérer les pages générées à partir du conteneur en utilisant wget.

--input-file=FILE read URLs from file. 

En utilisant cette option wget prendra une liste d'URL à partir d'un fichier et les télécharger pour vous tout comme le texte sera affiché dans la vue-src du navigateur.

De plus, wget est disponible pour Windows et Linux.

+0

merci pour l'idée, j'adore wget, mais il ne correspond pas à mes besoins –

+0

@Roy A faire avec le zipping bit n'est-ce pas? – leeand00

+0

@ leeand00 pas spécifiquement, d'autant plus qu'il s'agit d'un environnement Java qui doit fonctionner dans plusieurs environnements, et que nous avons des développeurs windows, mac et linux travaillant sur la même base de code, donc la solution doit être basée sur Java –

1

Vous pouvez avoir une servlet qui appelle le JSP en ouvrant une URLConnection puis en lisant la sortie dans un fichier temporaire ou un tampon. Il serait ensuite le compresser et écrire le zip.

1

Je ne suis pas sûr que je comprends votre question, mais je vais prendre un coup de poignard à elle. Pourquoi ne pas créer un servlet et avoir appeler votre fichier en utilisant jsp les éléments suivants:


    RequestDispatcher d = getServletContext().getRequestDispatcher(jspName); 
    d.forward(request, response); 

Demandez à l'jsp l'avant avec les valeurs entrées/formulaire utilisateur. Lorsque le formulaire est complété, soumettez le formulaire. À quel point le jsp renverra le contexte au servlet où vous pouvez analyser les valeurs, déterminer quels fichiers créer et retourner à l'utilisateur. Une fois que vous avez déterminé ce que vous voulez afficher à l'utilisateur, lancez-le dans un autre fichier jsp et transmettez le contexte à ce fichier jsp.

Vous pouvez le faire de deux façons. Vous pouvez créer un fichier jsp différent pour les différents types de fichiers que vous souhaitez renvoyer et appeler simplement le fichier approprié. Ou Vous pouvez transmettre les structures/valeurs que vous voulez dans votre jsp en les intégrant dans la requête et en les récupérant dans votre jsp. Vous pouvez utiliser ce fait pour créer une seule jsp qui, basée sur les paramètres passés (intégrés dans la requête) affichera les informations correctes.

Si j'ai complètement manqué le point de votre question, n'hésitez pas à supprimer cette réponse. Edit: De toute façon, vous devrez intégrer vos valeurs dans la demande.

0

Vous pouvez également essayer d'utiliser certains des nombreux moteurs de gabarit conçus spécialement pour ce travail. C'est ce que j'ai fait quand j'ai eu une tâche similaire et je n'ai jamais regardé en arrière. Découvrez Velocity par exemple.

Questions connexes