2010-11-26 15 views
0

intérieur doGet()/doPost() dans un servlet J'ai:Réutiliser objet RequestDispatcher

RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/pages/view.jsp"); 
dispatcher.forward(request, response); 

Comme le chemin du jsp est pas par rapport à la demande actuelle et la RequestDispatcher est obtenu à partir du contexte de servlet, puis-je réutiliser le même objet répartiteur plusieurs demandes de telle sorte que RequestDispatcher dispatcher devient variable d'instance

init() a

dispatcher = getServletContext().getRequestDispatcher("/WEB-INF/pages/view.jsp"); 

et doGet()/doPost() ont juste

dispatcher.forward(request, response); 

La raison derrière le faire est d'économiser le coût de la construction (/ recherche) de RequestDispatcher pour chaque demande. Cela peut vraiment ne pas être significatif si l'implémentation du serveur met déjà en cache les objets et recherche le répartiteur par l'URL pour chaque appel getRequestDispatcher(), mais en obtenant la référence au répartiteur dans le code init, nous pouvons également économiser le coût de la recherche.

Vous voulez également savoir si cela sera thread sûr puisque le même objet dispatcher sera utilisé à chaque fois?

Répondre

1

Il est supposé être threadsafe, mais il existe certaines marques/versions de servletcontainer où ce n'est pas threadsafe. Dans Apache Tomcat par exemple, il n'a pas été sécurisé par les threads tant qu'il n'a pas été corrigé dans la version 6.0.8.

Je placerais cette approche dans la catégorie «optimisation prématurée». Je ne le ferais pas comme ça.