JSP par programme de rendu
J'ai besoin de par programme de rendu de la page JSP. Comme je le comprends, JSP doit avoir une certaine compilateur. La question est puis-je utiliser ce compilateur dirrectly sans JspServlet et les autres? J'ai besoin de la documentation comment utiliser JSP compilateur (Jasper, par exemple).
Quelques informations supplémentaires permettrait de clarifier la situation, je pense. Je ne peux pas utiliser la norme JspServlet. Je veux changer de source JSP avant la compilation d'une certaine façon (fusion de deux JSP ensemble pour être précis), j'ai donc besoin d'un moyen de compiler JSP résultat de InputStream (ou Reader) à l'aide du compilateur JSP directement.
Fusion de deux JSP est la mise en page exigence. Vous pouvez demander: "Mais pourquoi ce gars n'a tout simplement pas utiliser SiteMesh ou quelque chose comme cela?". L'une des pages JSP n'est pas statique. Ils sont fournis par l'utilisateur et stockées dans la base de données. Nous sanitify et valide cette mise en page JSP (les utilisateurs sont en mesure d'utiliser seulement sous-ensemble de balises, et tous ne sont pas standart, mais spécialement créé pour eux), le cache et ainsi de suite. Mais maintenant, nous avons besoin d'une manière d'utiliser ces pages JSP (qui sont stockées en mémoire) comme les mises en page pour toutes les pages JSP qui demande de l'utilisateur.
OriginalL'auteur Denis Bazhenov | 2009-11-12
Vous devez vous connecter pour publier un commentaire.
Ce qui est de l'exigence fonctionnelle après tout? Vous êtes clairement en train de chercher une solution dans la mauvaise direction. Qu'en est-il du problème/de la condition pour laquelle vous pensez que c'est la solution? Nous pouvons venir avec de meilleures suggestions.
Avez-vous par exemple que juste sa sortie? Si oui, alors
java.net.URLConnection
peut suffire.Modifier: vous avez modifié votre question:
OK, c'est une peu plus clair. Mais pour quoi avez-vous besoin? Ce qui est le cas pour ceux Jsp représentent en fait? Qu'est-ce que le résultat final doit être utilisé pour?
Avez-vous par exemple, juste voulez inclure une JSP dans l'autre? E. g. y compris un
head.jsp
dans unmain.jsp
? Si oui, alors<jsp:include>
peut suffire. Ou est-il plus pire, qu'ils ne contiennent des crus du code Java avec quelques code spécifique à laquelle vous avez voulu vous de les réutiliser? Si oui, alors vous devriez utiliser de la plaine des classes Java et, si nécessaire, taglibs pour cela.Edit 2: comme vous avez dit:
Juste stocker les fichiers JSP sur le système de fichiers du disque à l'intérieur de la webapp est webcontent (le
ServletContext#getRealPath()
peut venir en secours) et de transmettre la demande à votre propre fichier JSP qui comprend les deux fichiers JSP en utilisant, par exemple:Modifier 3: j'ai créé un SSCCE pour prouver son travail.
L'exécuter à http://localhost:8080/playground/test (ou quel que soit l'hôte/contextname que vous utilisez) et vous verrez
Pour le rendre plus efficace je cache toutes les ressources et de faire usage de
File#exists()
pour vérifier si la page est déjà enregistré sur le disque.Ok, il va travailler. Mais je veux que mon JSP regarder d'un peu plus propre. Comme <m:page title="titre de la Page">...</m:page>, et de childs de la page tag décrire page. Page tag par lui-même remplace par la disposition sur le temps de compilation. Est-ce possible?
Il suffit d'inclure taglibs au haut de la page JSP, le contenu. Juste le code JSP de la manière habituelle. Tout ce que vous devez faire est de le stocker dans webapp est webcontent. Voir la SSCCE que j'ai ajouté en dernier.
Serait l'exemple de code de travail si la page1.jsp ou page2.jsp a été modifié après que le serveur d'applications est commencé? Dans la plupart des environnements de production, la appservers ne pas recompiler ces fichiers.
Qui nécessite alors une approche différente. Lui donner un autre nom de fichier et ainsi de suite. J'ai cependant ne crois pas que cela s'applique à son cas particulier.
OriginalL'auteur BalusC
Je ne suis pas totalement sûr si c'est ce que vous cherchez, mais la DWR cadre contient une méthode appelée
WebContext.forwardToString
qui transmet la demande actuelle, plus d'un faux objet de réponse à une URL, puis lit le contenu de la mémoire tampon dans la mémoire. Voici un exemple de code:Vous pouvez l'utiliser pour obtenir les résultats de la jsp rednering et de les stocker dans la mémoire. Vous pouvez télécharger les sources à partir du lien ci-dessus pour voir comment SwallowingHttpServletResponse œuvres.
OriginalL'auteur Jason Gritman
Peut-être que vous pourriez utiliser Tomcat JspC tâche ant?
OriginalL'auteur Jonathan Feinberg
JSTL est juste une bibliothèque de balises est utilisé à l'intérieur des fichiers JSP. Donc, il n'a vraiment pas d'importance dans ce contexte.
Depuis une JSP compilateur transforme les fichiers JSP en Java Servlets, je doute que vous pouvez l'avoir directement exécuter(un compilateur ne fait pas exécuter quoi que ce soit!) ou de rendre un fichier JSP.
C'est vraiment très dur à comprendre à partir de votre question, ce que vous êtes vraiment à la recherche pour.
Edit: je recommande jsp:include pour le travail
N'est-il pas suffisant pour comprendre l'un des fichiers JSP dans l'autre? Voir jsp:include <%@%>
Malheureusement, aucune. Les règles pour les JSP fusion sont non trivial. De cource ce problème en soi, mais...
OriginalL'auteur Marius Burz
Raison de qui vous avez à faire?
Si vous avez besoin de fusionner 2 fichiers jsp de processus, peut-être à l'aide de inclure
Ou vous avez besoin d'autres idées? Pouvez-vous donner des exemples de votre demande?
OriginalL'auteur misamap
Si la JSP a déjà été compilée par le serveur d'applications puis vous pouvez regarder pour le générés .fichier de classe . Dans Tomcat cela devrait être sous le $RACINE_CONTEXTE/org/apache/jsp/répertoire. Vous pourriez être en mesure d'exécuter cette classe en quelque sorte et créer votre sortie.
EDIT: Raté votre modification sur la modification de la source de JSP.
Prendre un coup d'oeil à org.apache.jasper.compilateur.AntCompiler (inclus dans jasper.jar dans Tomcat). Il y a une méthode protégée appelée generateClass qui vous pourriez être en mesure de remplacer et de déconner avec 🙂
OriginalL'auteur Thimmayya