10
votes

Mappage de l'URL en Tomcat à FrontController Servlet

J'essaie de suivre le modèle à Applications Web des motifs de conception . Tout fonctionne une partie fine de la maillage des URL "racine".

J'aimerais mettre toutes les demandes via le "contrôleur avant" de sorte que j'ai mis p> xxx pré>

dans le web.xml code>. Travelage avec NetBeans montre la demande à venir, et l'action fonctionne correctement, mais la ligne p> xxx pré>

est également prise par le contrôleur, elle passe à l'action à nouveau et tout échoue. p>

Je peux le faire fonctionner en ne faisant pas de la racine de l'URL, par exemple P>

  <servlet-mapping>
        <servlet-name>ControllerServlet</servlet-name>
        <url-pattern>/pages/*</url-pattern>
    </servlet-mapping>


0 commentaires

4 Réponses :


0
votes

Le motif / * URL correspond à tous les servlets, JSP et le contenu statique de votre application.

Whae dont vous auriez besoin est de définir un motif * .jsp pour permettre à Tomcat d'utiliser le servlet JSP par défaut: P>

<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>*.jsp</url-pattern>
</servlet-mapping>


0 commentaires

8
votes

Le modèle / * URL motif couvre tout , également les fichiers JSP transférés et les ressources statiques telles que CSS / JS / images. Vous ne voulez pas avoir cela sur un servlet de contrôleur frontal.

Gardez votre servlet de contrôleur sur un motif d'URL plus spécifique comme / pages / * . Vous pouvez obtenir l'exigence fonctionnelle de se débarrasser de "/ pages" dans l'URL en regroupant les ressources statiques dans un dossier commun comme / ressources et créant un fichier qui est mappé sur / * et effectue le travail suivant dans le dofilter () méthode: xxx

une ressource JSP transférée Par défaut ne correspond pas à ce filtre, il sera donc correctement ramassé par le propre jspservlet .


3 commentaires

Merci pour les réponses, il a l'air complexe de sorte qu'il va me faire un moment pour se rendre à des filtres, pour l'instant je vais juste laisser tout dans / pages /


Vous pouvez faire correspondre des demandes d'extension avec path.Match ("^. * \\ / [^ \\.] * $") Et transmettre cela à votre contrôleur avant.


@ user2418306: Supprimer le préfixe du chemin de contexte de l'URI.



3
votes

Pourquoi avons-nous besoin de cartographier chaque URL. Si vous devez mapper toutes les URL, vous pourriez avoir besoin sauter URL dans le filtre.

<filter-mapping>
    <filter-name>sessionFilter</filter-name>
    <url-pattern>*.action</url-pattern>
  </filter-mapping>


1 commentaires

Merci pour les réponses, il a l'air complexe de sorte qu'il va me faire un moment pour se rendre à des filtres, pour l'instant je vais juste laisser tout dans / pages /



0
votes

Vous pouvez étendre la valeur par défaut de votre serveur Web.Le servlet étendu sera votre contrôleur avant. Dans la méthode Doket ou Dopost transmettez vos pages statiques à la super classe. Defaultservlet est le servlet mappé sur URL "/" par défaut. Je l'ai utilisé avec Jetty Server, mais il peut également être mis en œuvre à Tomcat. xxx

}

dans les échantillons de code ci-dessus J'ai transféré toutes les demandes commençant par / static / au servlet par défaut à traiter. De cette façon, vous pouvez mapper le niveau FrontController sur "/" niveau " xxx

xxx


1 commentaires

Est-ce que cela lie votre solution à un conteneur spécifique? En d'autres termes, une fois que j'écris ce code dans ma demande, je suis alors coincé avec Tomcat ou Jetée ou quoi que ce soit à partir de là, jusqu'à ce que je doive plus tard revenir et changer ce code?