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

Tomcat et TomEE Java Discussion :

problème de redirection avec une app SpringBoot


Sujet :

Tomcat et TomEE Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Homme au foyer
    Inscrit en
    Juillet 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Homme au foyer

    Informations forums :
    Inscription : Juillet 2022
    Messages : 7
    Points : 2
    Points
    2
    Par défaut problème de redirection avec une app SpringBoot
    Bonjour à tous,

    je m'en viens présenter mon problème car je ne sais plus où chercher.

    Pour m'entraîner j'ai fait une petite application Java avec SpringBoot, faisant appel à MariaDB.
    Mon appli fonctionne parfaitement en local.

    Comme j'ai installé un serveur à domicile, avec Apache et Tomcat, je l'ai déployée dessus et cela fonctionne aussi quand j'utilise l'adresse IP.

    Ensuite parce que je dispose d'un nom de domaine j'ai mis en place une redirection dans Apache avec le module mod_proxy.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <VirtualHost *:80>
            ServerName nom_de_domaine.fr
            ServerAlias www.nom_de_domaine.fr
            ErrorLog /var/log/httpd/nom_de_domainel-error.log
            CustomLog /var/log/httpd/nom_de_domaine-access.log common
     
            ProxyRequests Off
            ProxyPreserveHost on
            <Location / >
                 ProxyPass http://localhost:8080/webapp2-0.0.1-SNAPSHOT/
                 ProxyPassReverse http://localhost:8080/webapp2-0.0.1-SNAPSHOT/
            </Location>
    </VirtualHost>
    Et là le problème commence: la page de mon appli s'affiche bien avec le nom de domaine mais quand on envoie le formulaire qui fait partie de cette page, on tombe sur "Page not found err404" et les données ne sont pas transmises à la base de données.

    Il y a donc un problème de communication entre les différents composants. Je ne sais même pas si ça vient d'Apache, de Tomcat ou de mon appli.

    Si quelqu'un a une idée, qu'il n'hésite vraiment pas à m'en faire part, parce que là vraiment je sèche depuis plusieurs jours

    Merci d'avance

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 462
    Points : 896
    Points
    896
    Billets dans le blog
    5
    Par défaut
    Il faut un code de ce genre:
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    package fr.cisirh.explorateur.controller;
     
    import java.io.IOException;
     
    import javax.servlet.http.HttpServletResponse;
     
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
     
    import fr.cisirh.explorateur.controller.util.ConfigurationApplication;
     
    /**
     * Controlleur appeelée lors de l'appel de l'application par Open HR. On redirige vers les pages index.html construites avec Vue.je.
     * @author pgibault-adc
     *
     */
    @Controller
    public class IndexController {
     
    	private static final Logger LOGGER = LoggerFactory.getLogger(IndexController.class);
     
    	private static final String PATH_APPLICATION_BASE = "./application/index.html";
     
    	private static final String PATH_APPLICATION_ADMINISTRATION = "./configuration/index.html";
     
    	private static final String PATH_NON_DISPONIBLE = "./applicationNonDisponible.html";
     
    	private final ConfigurationApplication configurationApplication;
     
    	public IndexController(ConfigurationApplication configurationApplication) {
    		this.configurationApplication = configurationApplication;
    	}
     
    	/**
             * Redirige vers l'application.
             * @param response Réponse HTTP
             * @throws IOException
             */
    	@RequestMapping(value =  {"" ,"/"})
        public void redirectApplication(HttpServletResponse response) throws IOException {
            String path = configurationApplication.isDisponible()?PATH_APPLICATION_BASE:PATH_NON_DISPONIBLE;
            LOGGER.debug("Redirect..."+path);
            response.sendRedirect(path);
        }
     
    	/**
             * Redirige vers l'application administrateur.
             * @param response Réponse HTTP.
             * @throws IOException
             */
    	@RequestMapping(value =  {"/configuration"})
        public void redirectAdministration(HttpServletResponse response) throws IOException {
            String path = configurationApplication.isDisponible()?PATH_APPLICATION_ADMINISTRATION:PATH_NON_DISPONIBLE;
            LOGGER.debug("Redirect..."+path);
            response.sendRedirect(path);
        }
    }
    A noter que le WAR (ici, compilation en WAR) est de ce type:
    Nom : archive.png
Affichages : 79
Taille : 103,5 Ko

  3. #3
    Candidat au Club
    Homme Profil pro
    Homme au foyer
    Inscrit en
    Juillet 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Homme au foyer

    Informations forums :
    Inscription : Juillet 2022
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci je vais checker ça

  4. #4
    Candidat au Club
    Homme Profil pro
    Homme au foyer
    Inscrit en
    Juillet 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Homme au foyer

    Informations forums :
    Inscription : Juillet 2022
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci pour ta suggestion mais hélas pour moi, le résultat est le même.

    J'ai modifié ma méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    @PostMapping("/")
        public String doPost(User user){
           webApp2Service.createUser(user);
     
            return "redirect:/";
    }
    en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    @PostMapping("/")
        public void doPost(User user, HttpServletResponse response) throws IOException {
            webApp2Service.createUser(user);
     
           response.sendRedirect("/");
     
        }
    Mon app fonctionne partout comme avant mais toujours pas avec le nom de domaine.

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 462
    Points : 896
    Points
    896
    Billets dans le blog
    5
    Par défaut
    Evidement, vu que tu ne précise pas ta ressource...(Traduction:La page HTML/JSP à charger).

  6. #6
    Candidat au Club
    Homme Profil pro
    Homme au foyer
    Inscrit en
    Juillet 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Homme au foyer

    Informations forums :
    Inscription : Juillet 2022
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci pour ta réponse.

    Je veux bien croire qu'il y ait un problème avec mon code, bien que ça fonctionne correctement quand on tape l'adresse IP + :8080/nom_de_l_appli dans le navigateur.

    Mon appli c'est juste une page qui s'appelle elle-même pour actualiser l'affichage d'une liste.

    Mon contrôleur ;
    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
    package xyz.strahi.webapp2.controller;
     
    ..
    @Controller
    public class WebApp2Controller {
     
        @Autowired
        private WebApp2Service webApp2Service;
     
        @GetMapping("/")
        public String doGet(Model model){
            List<User> userList = webApp2Service.findAllUser();
            model.addAttribute("userList",userList);
            return "index";
        }
     
        @PostMapping("/")
        public void doPost(User user, HttpServletResponse response) throws IOException {
            webApp2Service.createUser(user);
     
           response.sendRedirect("/");
     
       }
    }
    La méthode Post redirige vers le Get, où se trouve le fichier html ( ici : index)

    Mais ça a l'air que même le Post n'est pas envoyé puisqu'il n y a pas de nouvelles données dans la BDD.

    Mon fichier html
    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
    <!DOCTYPE html>
    <html lang="fr">
        <head>
            <meta charset="UTF-8">
            <link rel="stylesheet" href="style.css">
            <title>loginPage</title>
        </head>
        <body>
            <h1>Veuillez vous identifier :</h1>
     
            <form method="post" th:action="@{/}" th:object="${user}">
                <p>
                    <label for="prenom">Votre prénom :</label>
                    <input type="text" id="prenom" name="prenom" /><br/>
                    <label for="nom">Votre nom :</label>
                    <input type="text" id="nom" name="nom" />
                    <input type="hidden" name="message" th:value="${message}">
                </p>
                <input type="submit" value="Go !!" />
            </form>
     
            <table class="table table-bordered">
                <thead>
                    <tr>
                        <th>Prénom</th>
                        <th>Nom</th>
                    </tr>
                </thead>
                <tbody>
                    <tr th:each="user : ${userList}">
                        <td th:text="${user.prenom}"></td>
                        <td th:text="${user.nom}"></td>
                    </tr>
                </tbody>
            </table>
        </body>
    </html>
    Théoriquement le problème pourrait venir de <form method="post" th:action="@{/}" th:object="${user}"> puisque le Post du contrôleur n''est pas actionné.

    Mais alors pourquoi cela déconne uniquement quand on utilise le nom de domaine et pas l'IP ?

    Sacrée question

  7. #7
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 462
    Points : 896
    Points
    896
    Billets dans le blog
    5
    Par défaut
    Je sous entends que la ressources HTML (index.html) doit exister:
    Nom : archive_sous.png
Affichages : 68
Taille : 96,6 Ko

    Par contre, j'ai l'impression que dans ton cas que tu utilises Theamleaf.

    C'est un framework que je ne connais pas, proche de JSF dans les bases, et qui est d'après ce que j'ai compris, un framework MVC qui renvoie la page HTML. C'est totalement une autre façon de faire.

    https://www.thymeleaf.org/
    https://www.baeldung.com/thymeleaf-in-spring-mvc

  8. #8
    Candidat au Club
    Homme Profil pro
    Homme au foyer
    Inscrit en
    Juillet 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Homme au foyer

    Informations forums :
    Inscription : Juillet 2022
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Oui j'utilise Thymleaf.

    Et pour l'instant j'ai plutôt l'impression que c'est une façon qui fonctionne pas

    Bon ben je continue de chercher..

  9. #9
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 462
    Points : 896
    Points
    896
    Billets dans le blog
    5
    Par défaut
    Aujourd'hui, on différentie le client (fait avec du Javascript et un framework comme angular/vue/react) du front (fait avec Java/Spring Boot).

    C'est 2 applications différentes.
    Le client envoie du HTTP avec éventuellement des données et reçoit la réponse sous forme de JSON.

    En général, le tout tourne sous 2 conteneur docker (NGINX pour le client, java pour le serveur).

    Sur le projet du boulot, je dois déposer un WAR. Je construit donc le projet vue et je dépose les ressources dans le WAR lors de la création du WAR.

    Thymleaf n'est pas dans cette logique.

  10. #10
    Candidat au Club
    Homme Profil pro
    Homme au foyer
    Inscrit en
    Juillet 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Homme au foyer

    Informations forums :
    Inscription : Juillet 2022
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Ah merci pour ces infos.

    Je viens de terminer une formation Java et j'essaie de me frotter à la réalité.

    Je savais pas qu'on différenciait le client du front. Je vais me renseigner la dessus. Je connais un tout petit peu Docker, mais pour Nginx est il plus intéressant à apprendre qu'Apache ?

  11. #11
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 462
    Points : 896
    Points
    896
    Billets dans le blog
    5
    Par défaut
    J'ai un projet perso:
    https://bitbucket.org/philippegibaul...r40k/src/main/

    Le front est en angular.
    Les services REST, c'est le projet REST.

    J'envoie du JSON. Au front de traiter.

    Les projets Angular et REST ont des Doker files. La racine du projet a un Docker Compose.

  12. #12
    Candidat au Club
    Homme Profil pro
    Homme au foyer
    Inscrit en
    Juillet 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Homme au foyer

    Informations forums :
    Inscription : Juillet 2022
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci pour ton aide et pour le lien de ton projet. Je vais volontiers y jeter un coup d'oeil.

    Et j'ai résolu mon problème. Il manquait une réécriture de l'URL. Je pensais pas avoir de ça.

    En tout cas voilà le VirtualHost d'Apache

    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
    <VirtualHost *:80>
            ServerName nom_de_domaine.fr
            ServerAlias www.nom_de_domaine.fr
            ErrorLog /var/log/httpd/nom_de_domainel-error.log
            CustomLog /var/log/httpd/nom_de_domaine-access.log common
     
            ProxyRequests Off
            ProxyPreserveHost on
            <Location / >
                 ProxyPass http://localhost:8080/webapp2-0.0.1-SNAPSHOT/
                 ProxyPassReverse http://localhost:8080/webapp2-0.0.1-SNAPSHOT/
            </Location>
            RewriteEngine on
            RewriteRule "^/webapp2-0.0.1-SNAPSHOT/$" "/" [PT]
    </VirtualHost>
    Pour ceux qui voudraient plus d'infos : https://httpd.apache.org/docs/2.4/re...remapping.html

    Et j'ai maintenant l'honneur de cliquer sur "Résolu" !!

    Merci à tous

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

Discussions similaires

  1. Contrôler des programmes avec une app VB.NET ?
    Par Pouknouki dans le forum VB.NET
    Réponses: 2
    Dernier message: 18/06/2014, 06h37
  2. modifier un fichier XML avec une App
    Par demzu dans le forum Windows Phone
    Réponses: 1
    Dernier message: 16/05/2011, 14h26
  3. redirection avec une zone de texte
    Par tjoce dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 24/06/2007, 21h41
  4. [jsp] redirection avec une variable
    Par louline dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 11/06/2007, 15h51
  5. communiquer avec une app tierce depuis java
    Par azzhunter dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 24/03/2007, 10h32

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