Java Servlet: passer une demande de retour au traitement par défaut
-
11-09-2019 - |
Question
Je veux un Servlet pour traiter les demandes de fichiers en fonction de préfixe et extension, par exemple.
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 mon servlet pour les fichiers XML ne commençant pas par « prefix_ », de sorte que la demande est traitée comme une demande « normale » dans un fichier xml
Ceci est probablement assez simple mais je ne semble pas être en mesure de trouver cela ...: - /
Merci beaucoup à l'avance
La solution
Je suggère fortement l'aide d'un cadre approprié MVC pour cela. Comme vous l'avez découvert, la flexibilité de l'API Servlet standard est très limitée en matière de demander dispatching.
Idéalement, vous seriez en mesure d'utiliser votre code de servlet existant en combinaison avec un framework MVC, le cadre fait le diapcthing basé sur modèle de chemin, et servlets faire la logique métier. Heureusement, Spring MVC vous permet de faire exactement cela, en utilisant le ServletForwardingController. Ce serait une config de printemps très léger.
Alors, 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 de /prefix*.xml iraient à myServlet, et tous les autres tomberaient à travers le récipient.
Autres conseils
Une autre solution (convient peut-être pour vous) si vous utilisez / plan pour utiliser un Apache en face de cette instance de conteneur Web, vous pouvez utiliser le module de réécriture de apache. Réécriture l'URL pour quelque chose de plus facile à manipuler pour le conteneur Webapp.
Espérons que cela aide. David.
FCKeditor, mais une fois que vous attrapez toutes les demandes * .xml 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
}
}
(code non testé, seulement une idée ...)