61 votes

Comment accéder aux ressources statiques lors de l'utilisation par défaut de la servlet

Salut j'ai un problème je veux envoyer tous mes demande à un ressort de servlet

<servlet>   	
  <servlet-name>home</servlet-name>     	
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>     
</servlet>  
<servlet-mapping>   	
  <servlet-name>home</servlet-name>     	
  <url-pattern>/*</url-pattern>     
</servlet-mapping>

mais cette cartographie s'arrête l'accès aux fichiers statiques (images, etc j'ai mis tous dans /res/....... dossier

s'il vous plaît aider moi comment puis-je faire ce travail, je suis en utilisant ce sur google app engine.

75voto

BalusC Points 498232

Carte de la servlet contrôleur sur un plan plus spécifique url-pattern comme /pages/*, mettre le contenu statique dans un dossier spécifique, comme /static et de créer un Filter écoute sur /* qui de manière transparente continue de la chaîne de contenu statique et distribue les requêtes au contrôleur de servlet pour d'autres contenus.

En un mot:

<filter>
    <filter-name>filter</filter-name>
    <filter-class>com.example.Filter</filter-class>
</filter>
<filter-mapping>
    <filter-name>filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<servlet>
    <servlet-name>controller</servlet-name>
    <servlet-class>com.example.Controller</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>controller</servlet-name>
    <url-pattern>/pages/*</url-pattern>
</servlet-mapping>

avec les éléments suivants dans le filtre de l' doFilter():

HttpServletRequest req = (HttpServletRequest) request;
String path = req.getRequestURI().substring(req.getContextPath().length());

if (path.startsWith("/static")) {
    chain.doFilter(request, response); // Goes to default servlet.
} else {
    request.getRequestDispatcher("/pages" + uri).forward(request, response);
}

Non, ce n'est pas la fin avec l' /pages dans la barre d'adresse du navigateur. Il est totalement transparent. Vous pouvez, si nécessaire, faire "/static" et/ou "/pages" un init-param du filtre.

43voto

Joaquín L. Robles Points 2306

Avec Le Printemps 3.0.4.La LIBÉRATION et de plus, vous pouvez utiliser

<mvc:resources mapping="/resources/**" location="/public-resources/"/>

Comme vu dans le Printemps de Référence.

21voto

casey Points 697

Ce que vous faire est d'ajouter un fichier dans votre dossier de bienvenue web.xml

<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>

Et puis l'ajouter à votre servlet mappages de sorte que quand quelqu'un va à la racine de votre application, ils sont envoyés à index.html en interne et la cartographie à l'interne les envoyer à la servlet vous carte à

<servlet-mapping>
    <servlet-name>MainActions</servlet-name>
    <url-pattern>/main</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>MainActions</servlet-name>
    <url-pattern>/index.html</url-pattern>
</servlet-mapping>

Résultat final: Vous visite /de l'Application, mais vous êtes présenté avec /Application/MainActions servlet sans perturber de toute autre racine demandes.

Pour l'obtenir? Ainsi, votre application se trouve encore à un sous url, mais est automatiquement présentée lorsque l'utilisateur passe à la racine de votre site. Cela vous permet d'avoir l' /images/bob.img est encore d'aller sur le lieu de travail habituel, mais '/' est votre application.

17voto

GO' Points 79

De servir du contenu statique avec le suffixe approprié dans plusieurs servlet-mapping définitions résolu le problème de sécurité qui est mentionné dans l'un des commentaires dans l'une des réponses postées. Cité ci-dessous:

C'était un trou de sécurité dans Tomcat (WEB-INF et META-INF contenus sont accessibles de cette façon) et il a été résolu en 7.0.4 (et sera porté à 5.x et 6.x). – BalusC Nov 2 '10 à 22:44

ce qui m'a beaucoup aidé. Et voici comment je l'ai résolu:

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.htm</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.html</url-pattern>
</servlet-mapping>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X