IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Web Java Discussion :

Erreurs 404 si mon application n'est pas installée à la racine


Sujet :

Spring Web Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut Erreurs 404 si mon application n'est pas installée à la racine
    Bonjour

    Je rencontre des problèmes avec une application web Spring que j'ai développé il y a quelques temps. Jusqu'à présent cette app était installée à la racine de mon Tomcat et était donc accessible par www.mondomaine.com:8080 .
    Mais je dois intsaller une nouvelle application et cette façon de faire ne sera plus possible. J'ai donc réinstallé mon app et elle est maintenant accessible par www.mondomaine.com:8080/monApp

    Mon problème est que quel que soit l'URL une erreur 404 est retournée. Je cherche donc à savoir ce qui manque dans ma configuration :

    Mon web.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    <web-app ...>
     
        <display-name>monApp</display-name>
     
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                /WEB-INF/spring/applicationContext.xml
                /WEB-INF/spring/spring-security.xml
            </param-value>
        </context-param>
     
     
        <filter>
            <filter-name>springSecurityFilterChain</filter-name>
            <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
        </filter>
     
        <filter-mapping>
            <filter-name>springSecurityFilterChain</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
     
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
     
        <servlet>
            <servlet-name>appServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
     
        <servlet-mapping>
            <servlet-name>appServlet</servlet-name>
            <url-pattern>/monApp/*</url-pattern>
        </servlet-mapping>
     
        <error-page>
            <error-code>404</error-code>
            <location>/WEB-INF/views/errors/404.jsp</location>
        </error-page>
    </web-app>
    applicationContext
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    <beans ...>
     
        <!-- Activates various annotations to be detected in bean classes -->
        <context:annotation-config/>
     
        <context:component-scan base-package="com.mondomaine.monapp"/>
     
        <mvc:annotation-driven/>
     
        <mvc:resources mapping="/resources/**" location="/resources/"/>
     
        <import resource="spring-scheduler.xml"/>
        <import resource="spring-data.xml"/>
     
        <util:properties id="reportMailProps" location="classpath:/spring/reportMail.properties"/>
     
        <!-- Mail service -->
        <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
            <property name="host" value="***"/>
            <property name="port" value="***"/>
            <property name="username" value="***"/>
            <property name="password" value="***"/>
            <property name="javaMailProperties">
                <props>
                    <prop key="mail.smtp.auth">true</prop>
                    <prop key="mail.smtp.starttls.enable">false</prop>
                </props>
            </property>
        </bean>
     
        <bean id="messageSource"
              class="org.springframework.context.support.ResourceBundleMessageSource" p:basename="messages"/>
     
        <bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean"
              p:resourceLoaderPath="classpath:/velocity/">
        </bean>
    </beans>
    servlet-context.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?xml version="1.0" encoding="UTF-8"?>
    <beans ...>
     
        <bean id="messageSource"
              class="org.springframework.context.support.ResourceBundleMessageSource" p:basename="messages"/>
     
        <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
            <property name="prefix" value="/WEB-INF/views/"/>
            <property name="suffix" value=".jsp"/>
        </bean>
    </beans>
    spring-security.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    <?xml version="1.0" encoding="UTF-8"?>
    <beans ...>
     
        <sec:http pattern="/resources/**" security="none" />
     
        <sec:http auto-config="true" use-expressions="true" disable-url-rewriting="false">
            <sec:headers disabled="true"/>
            <sec:csrf disabled="false"/>
            <sec:access-denied-handler error-page="/403"/>
     
            <sec:form-login login-page="/login"
                            default-target-url="/"
                            login-processing-url="/j_spring_security_check"
                            username-parameter="username"
                            password-parameter="password"/>
     
            <sec:logout invalidate-session="true" logout-success-url="/login" logout-url="/logout"/>
     
            <sec:intercept-url pattern="/login/**" access="permitAll" />
            <sec:intercept-url pattern="/logout/**" access="permitAll"/>
     
            <sec:intercept-url pattern="/users/add/**" access="hasRole('ROLE_PERM_ADD_USER')"/>
            <sec:intercept-url pattern="/users/edit/**" access="hasRole('ROLE_PERM_EDIT_USER')"/>
            <sec:intercept-url pattern="/users/delete/**" access="hasRole('ROLE_PERM_DELETE_USER')"/>
            <sec:intercept-url pattern="/users/**" access="hasRole('ROLE_PERM_VIEW_USERS_LIST')"/>
     
            <!--[...]-->
     
            <sec:intercept-url pattern="/" access="isAuthenticated()"/>
     
            <sec:intercept-url pattern="/**" access="denyAll"/>-->
        </sec:http>
     
        <bean id="passwordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder">
            <constructor-arg name="strength" value="12"/>
        </bean>
        <bean id="customUserDetailsService" class="ch.pleiades.obs.visites.service.auth.CustomUserDetailsService" />
     
        <sec:authentication-manager>
            <sec:authentication-provider user-service-ref="customUserDetailsService">
                <sec:password-encoder ref="passwordEncoder" />
            </sec:authentication-provider>
        </sec:authentication-manager>
    </beans>
    et mes contrôleurs ressemblent à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    @Controller
    @RequestMapping("/users")
    public class UsersController {
     
        //...
     
        @RequestMapping(value = "", method = RequestMethod.GET)
        public String list(Model model) {
            return "users/list";
        }
     
        @RequestMapping(value = "/add", method = RequestMethod.GET)
        public String add(Model model) {
            //...
            return "users/add";
        }
     
        //...
    }
    Où ai-je commis une erreur ?

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        <servlet-mapping>
            <servlet-name>appServlet</servlet-name>
            <url-pattern>/monApp/*</url-pattern>
        </servlet-mapping>
    Ca devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        <servlet-mapping>
            <servlet-name>appServlet</servlet-name>
            <url-pattern>/*</url-pattern>
        </servlet-mapping>
    parce que là ta configuration dit dans le premier cas "je répond sur l'url http://server:<port>/<nomDeLApplication>/monApp/*". D'une manière générale, il n'y a pas besoin de préciser le nom de l'application dans le web.xml. L'application web ne regarde que ce qui se trouve après <nomDApplicaion> et c'est le conteneur qui se charge de faire la plomberie initiale.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    Ok, j'ai modifié le pattern comme indiqué. Pas encore bon mais c'est déjà mieux, les requêtes ont l'air de se faire correctement. Ex : si j'appelle une page qui nécessite certains droits, je suis redirigé vers la page de login. Par contre je reçois toujours une code 404 et une page blanche

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Tu reçois ton 404 en tappant quoi exactement? Et qu'est-ce qui devrait servir cette url?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    N'importe quelle requête qu'elle soit valide où non.
    Par exemple http://www.mondomaine.com:8080/monApp/login

    Mais la requête semble bien être traitée, si j'appelle http://www.mondomaine.com:8080/monAp...utentification , je suis bien redirigé vers http://www.mondomaine.com:8080/monApp/login
    qui me retourne une erreur 404.
    Par contre ce n'est pas la page 404 définie dans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <error-page>
        <error-code>404</error-code>
        <location>/WEB-INF/views/errors/404.jsp</location>
    </error-page>
    qui est retournée, mais une page blanche.
    Mais j'ai bien un code 404

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Tu as bien retiré l'application root de ton déploiement?

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    en ROOT j'ai restaurer l'app par défaut fournie avec Tomcat

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    J'ai finalement réussi, il fallais simplement que je laisse comme je l'avais au départ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    Par contre j'avais une erreur dans la balise <base> qui faisait que mes requêtes ne fonctionnaient pas correctement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur 404 : la ressource demandée n'est pas disponible
    Par Hind4Dev dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 28/02/2016, 17h07
  2. Réponses: 2
    Dernier message: 07/03/2013, 12h42
  3. Erreur "L'application n'est pas installée" avec ClickOnce
    Par Ishizaki dans le forum Windows Forms
    Réponses: 1
    Dernier message: 21/05/2008, 15h15
  4. Erreur 404 - La ressource demandée (/**/) n'est pas disponible.
    Par Rom1984 dans le forum Tomcat et TomEE
    Réponses: 9
    Dernier message: 20/03/2008, 16h06
  5. erreur 404 -- la ressource demandée n'est pas dispo
    Par dev7 dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 11/03/2007, 02h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo