2009-07-07 6 views
0

Je souhaite qu'un servlet gère les demandes de fichiers en fonction du préfixe et de l'extension, par ex.Java Servlet: renvoi d'une demande au traitement par défaut

préfixe

_ *. Xml

Depuis la cartographie sur le début et la fin du chemin de requête n'est pas possible, je cartographié toutes les demandes * .xml à mon Servlet. La question est maintenant: comment puis-je abandonner ma servlet pour les fichiers XML ne commençant pas par "prefix_", de sorte que la demande est traitée comme une demande "normale" à un fichier xml?

Ceci est probablement assez simple mais je ne semble pas être en mesure de le découvrir ...: -/

Merci beaucoup à l'avance

Répondre

0

Je suggère fortement l'utilisation un cadre MVC approprié pour cela. Comme vous l'avez découvert, la flexibilité de l'API de servlet standard est très limitée en termes de répartition des demandes.

Idéalement, vous seriez en mesure d'utiliser votre code de servlet existant en combinaison avec un framework MVC, le framework faisant le diapcthing basé sur le pattern path, et vos servlets faisant la logique métier. Heureusement, Spring MVC vous permet de faire exactement cela, en utilisant le ServletForwardingController. Ce serait une config printanière très légère.

Donc, vous auriez quelque chose comme ça dans votre web.xml:

<servlet> 
    <servlet-name>myServlet</servlet-name> 
    <servlet-class>foo.MyServlet</servlet-class> 
</servlet> 

<servlet> 
    <servlet-name>spring</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
</servlet> 

<url-mapping> 
    <servlet-name>spring</servlet-name> 
    <url-pattern>*</url-pattern> 
</url-mapping> 

Vous auriez alors un fichier servlet.xml printemps WEB-INF/comme ceci:

<beans> 
    <bean name="/prefix*.xml" class="org.springframework.web.servlet.mvc.ServletForwardingController"> 
     <property name="servletName" value="myServlet"/> 
    </bean> 
</beans> 

Et ce serait à peu près tout. Toutes les demandes pour /prefix*.xml iraient à myServlet, et tous les autres tomberaient dans le conteneur.

+0

Hé, merci ... ça a l'air assez facile. Le printemps me surprend :) En fait, nous utilisons déjà swing comme cadre MVC - je vais vérifier cela. – PeterP

+0

Il est parfois surprenant de voir à quel point vous pouvez vous débrouiller au printemps, il y a beaucoup de conventions sur la configuration que vous pouvez utiliser. – skaffman

0

FCKeditor, mais une fois que vous attrapez tous *. xml demande que vous pouvez consulter à nouveau la demande dans votre code via HttpServletRequest.getRequestURI()

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
     String uri =req.getRequestURI(); 
     int i = uri.lastIndexOf('/'); 
     int j = uri.lastIndexOf('.', i); 
     if (uri.substring(i+1, j).startsWith("prefix_")) { 
      // your code 
     } 
    } 

(le code non testé, seulement une idée ...)

+0

Cela ne répond pas à la question: comment revenir au traitement par défaut dans ce cas. – Avi

+0

Merci ... J'ai été aussi loin. Ce qui manque (ou j'espère dans quelques minutes: était) pour moi est la partie "else", comme l'a souligné Avi. – PeterP

2

une autre solution (peut-être adaptée à vous) est que si vous utilisez/prévoyez d'utiliser un Apache devant cette instance de conteneur Web, vous pouvez utiliser le module de réécriture d'apache. Réécriture de l'URL pour quelque chose de plus facile à gérer pour le conteneur Webapp.

Espérons que cela aide. David.

+0

Merci ... Sons utiles - Cependant, je préférerais ne pas être lié à Apache et (puisque nous sommes déjà liés à Spring en tant que MVC), je préfère rester fidèle à la suggestion de skaffman. Semble être beaucoup plus facile dans les circonstances données :) Thx – PeterP

Questions connexes