Aller au contenu

importer un projet sous tomcat?


Recommended Posts

Bonsoir,

Je viens poster mon sujet ici car je n'ai trouvé aucune réponse sur google...

Commençons d'abord par une brève présentation: Je m'appelle Benjamin, 20 ans et je suis étudiant en deuxième année d'informatique. (Pour faire bref c'est bref :/)

Je participe actuellement à un projet qui est le suivant:

en gros, une application qui permet de faire des recherches de recettes de cuisine, avec une adaptation de la demande par intelligence artificielle via une communication avec un serveur etc.. Ce projet a déjà été développé par des docteurs dans le domaine de l'informatique (non non, pas par moi :) ). Le projet est écrit à l'aide de fichiers java , de servlets .. (au passage je fais de la pub si vous voulez voir vraiment à quoi ça ressemble: http://intoweb.loria.fr/taaable3ccc/ , car je vous imagine bien devant votre ordinateur à vous gratter la tête, perdus dans l'incompréhension la plus totale à cause de moi :/ ).

Notre "mission", à nous dans ce projet?

Justement, j'y viens:

Créer une interface compatible avec Android, et lorsque l'utilisateur rentre sa recherche, aller interroger le serveur pour aller récupérer une réponse. (Comme sur le site ou quand vous tapez par exemple "apple" il vous sort toutes les recettes à base de pomme).

J'ai acheté un livre pour la programmation Android, et j'ai lu quelques sujets il y a maintenant 5 jours. J'ai fini la programmation de l'interface graphique et arrive à récupérer la requête de l'utilisateur dans un String. Le problème c'est que je me demande comment faire maintenant, pour aller interroger le serveur avec....

Ma responsable de projet tuteuré m'a dit qu'il fallait créer un serveur Tomcat qui permettrait de contenir l'application déjà existante. Il suffirait après de mettre en oeuvre à l'aide de classes déjà existantes (avec le protocole HTTP) pour aller interroger le serveur à l'aide du String récapitulant la demande, et récupérer une réponse.

Soit :o cette réponse m'a beaucoup aidé (si si j'vous jure). Le problème c'est que à partir du projet déjà existant (donc le projet qui existait déjà avant le développement de l'interface compatible Android), j'arrive à l'exécuter avec le plugin Tomcat (j'utilise l'IDE Eclipse) pour arriver sur la page dont je vous ai donné le lien. Mais comment coupler les deux? (à savoir ce qui existe déjà avec ce que j'ai écrit moi).

Me servir des classes permettant l'échange entre application/serveur ça ne me pose pas de problème. Mais Tomcat et tout ça pour moi sont encore des noms grossier n'évoquant rien de bien dans mes pensées :/. Comment faire? Créer un serveur et déposer toute l'application qui existait déjà dessus? C'est plus à ce niveau là que je suis bloqué!

Si quelqu'un arrive à comprendre ce que j'ai voulu expliqué, arrive à comprendre le problème, et aurait une solution, je le félicite tout d'abord :)) Si au passage il peut m'expliquer, alors là! Ben là je sais pas j'en perds mes mots :)

Merci d'avance et bonne fin de soirée, ou plutôt (1h00..) bonne nuit!

Minisac!

Modifié par minisac
Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 67
  • Créé
  • Dernière réponse

Top forumeurs sur ce sujet

Salut,

En gros voici les étapes que tu dois suivre :

1 - Installe un serveur tomcat. Rien de compliqué... (cf http://www.objis.com/formation-java/tutoriel-tomcat-installation-tomcat-6.html)

2 - Exporte l'application depuis ton IDE Eclipse sous la forme d'une archive .war (cf. http://www.java-tips.org/other-api-tips/eclipse/how-to-make-war-file-in-eclipse.html)

3 - Copie ton archive .war dans le sous-répertoire webapps de ton installation Tomcat (Tomcat décompresse et installera alors automatiquement ton appli...)

Voila, j'espère que c'est plus clair pour toi ...

Cdlt,

Rodolphe

Modifié par rib64
Lien vers le commentaire
Partager sur d’autres sites

Si ton serveur est en local (les urls contiennent localhost) pense à mettre ton tomcat sur ton Android. Une appli existe pour ca !!!

Pour l'échange de message entre le serveur et ton application. Pense à utiliser du Json ou Rest.

Cordialement

Lien vers le commentaire
Partager sur d’autres sites

2 - Exporte l'application depuis ton IDE Eclipse sous la forme d'une archive .war (cf. http://www.java-tips...in-eclipse.html)

Quand tu dis application, c'est seulement le projet Android qui s'occupe de gérer l'interface, ou aussi le projet à côté ?

Effectivement j'y vois déjà plus clair, merci à vous deux pour ces réponses rapides!

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Si je comprend bien l'architecture applicative que tu as décrite ci-dessus, tu as d'un côté une application web 'existante' à déployer sur un serveur tomcat et de l'autre une application Android 'cliente' que tu as développée. Les deux applications communiquent via un protocole http (par exemple REST/JSON ou REST/POX comme suggéré par Naskel). C'est donc l'application web 'existante' que tu dois exporter sous forme d'une archive war pour être déployée sur le serveur tomcat afin que ton application cliente puisse lui envoyer des requêtes http.

Cdlt,

Rodolphe.

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

J'ai installé tomcat, installé les servlets à déposer etc.

Si je tape dans mon navigateur l'adresse URL qu'il faut, ma page web affiche "RESULTATS"+ les résultats voulus en XML .

Jusqu'ici parfait, je couple le serveur tomcat avec mon application, je me connecte avec une WebView à cette URL, le chargement s'effectue, mais rien ne s'affiche mis à part "RESULTATS". J'ai l'impression qu'il ne veut pas afficher le XML, alors que depuis google chrome ou mozilla ça s'affiche tout à fait correctement.

Quelqu'un aurait il une réponse à ce problème?

Merci d'avance,

Minisac

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

J'ai une petite idée. Quand tu démarre une WebView, il faut savoir que tous ses settings sont à false c'est à dire que les plugins du navigateur ne sont pas activés et que le javascript n'ont plus. Je suppose que ton navigateur à besoin d'activer un plugin pour pouvoir lire le XML (Attention ce n'est qu'une supposition je ne suis pas sur).

Essaye en ajoutant ce code à ta WebView :

 
 WebSettings webSettings = webview.getSettings();
 webSettings.setJavaScriptEnabled(true);
 webSettings.setPluginsEnabled(true);

Si cela ne fonctionne pas, essaye avec un autre navigateur ou vérifie que la taille du flux XML renvoyé n'est pas trop gros .

Lien vers le commentaire
Partager sur d’autres sites

Très bien,

je vais essayé, de toute façon c'est provisoire car il va falloir après traduire le XML en HTML, et c'est le serveur qui s'en occupera, donc la question ne se posera plus, non?

Sinon, j'ai un autre petit problème. Les url's qui peuvent être affichées dans la webview comportent des liens. J'ai réussi à trouver le moyen de rester dedans si l'on clique dessus (plutôt que de fermer l'application et d'ouvrir le navigateur livré avec l'OS). Cependant, j'aimerais bien que l'utilisateur puisse (comme sur un navigateur) aller sur les pages précédentes si jamais il veut y retourner (faire un équivalent du bouton précédent quoi).

Sur internet, j'ai trouvé cette fonction à plusieurs reprises:

public boolean onKeyDown(int keyCode, KeyEvent event) {

if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {

webview.goBack();

return true;

}

return super.onKeyDown(keyCode, event); }

Le problème c'est que dans cette fonction "webview" n'est pas définit. Quel code dois-je écrire pour arriver à produire l'effet voulu?

Merci d'avance.

Modifié par minisac
Lien vers le commentaire
Partager sur d’autres sites

Ben le problème c'est que j'ai 4 webviews différentes (pour des histoire de différentes langues).

Donc en fait dans la fonction onKeyDown, ça ne marche pas car il ne sait pas à quelle WebView l'appliquer :/

en gros on a :

public boolean onKeyDown(int keyCode, KeyEvent event) {

if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {

webview.goBack();

return true;

}

return super.onKeyDown(keyCode, event); }

mais il faudrait savoir si webview= webview1 ou webview2 ou webview3 ou webview 4 :/

Lien vers le commentaire
Partager sur d’autres sites

y'a un truc que je comprend pas tu affiches les 4 webview en même temps à l'écran ?

Si oui comment choisi-tu (fonctionnellement parlant) celui que ou tu veux faire revenir en arrière ?

Si tu n'en a q'un d'afficher d'abord pourquoi en as-tu 4 si un seul est affiché, ensuite tu sais lequel est affiché donc tu peux exécuter ta méthode dessus.

Modifié par moritan
Lien vers le commentaire
Partager sur d’autres sites

En fait j'ai 4 webviews décrites dans 4 layouts différents en XML (suivant le langage que l'utilisateur aura choisi au lancement du programme). Et dans le fichier .java j'ai par exemple:

Fr () {

WebView wv=(WebView) findViewById(R.Id.webview1);

wv.loadUrl("....");}

En() {

WebView wv=(WebView) findViewById(R.Id.webview2);

wv.loadUrl("....");}

etc...

Je suis obligé de faire des layouts différents, car pour chaque layout où se trouve une webview, je mets un bouton qui lorsque l'on clique dessus permet à l'utilisateur de retourner dans le programme principal au langage correspondant:

exemple pour webview1.xml

<..Layout......

>

<Button

...

android:onClick= retournerAuMenuFr; />

...

</layout>

webview2.xml

<..Layout......

>

<Button

...

android:onClick= retournerAuMenuEn; />

...

</layout>

Vous voyez ce que je veux dire???

Donc du coup j'ai 4 WebView's. Une seule peut être affichée à la fois. Le problème c'est de savoir laquelle dans la fonction onKeyDown(...).

Car cette fonction est implémentée de la manière suivante:

public boolean onKeyDown(int keyCode, KeyEvent event) {

if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {

webview.goBack();

return true;

}

return super.onKeyDown(keyCode, event); }

Ce qu'il faudrait que je fasse, c'est faire comprendre au programme exécutant cette fonction de quelle WebView il s'agit (est-ce que la webview dont on se sert au moment présent est webview1, 2, 3 ou 4??)

Vous voyez ce que je veux dire?

Désolé de ne pas pouvoir être plus précis mais je n'ai pas le code sur moi. Je pourrai vous en faire une copie demain, ou même vous l'envoyer par mail pour ceux qui veulent.

Si en attendant certains ont compris et ont une réponse..

Merci d'avance et bonne fin de soirée/bonne nuit,

minisac!

Lien vers le commentaire
Partager sur d’autres sites

houla tu fonces dans un mur.

Bon faut faire bcp plus simple, 1 seul webview. la langue dois être une propriété et pas un élément de l'ihm.

Pour gérer la langue tu as tout ce qu'il faut ailleurs mais surtout ne duplique par ton ihm par langue c'est une grosse connerie.

http://developer.android.com/guide/topics/resources/localization.html

Lien vers le commentaire
Partager sur d’autres sites

Merci beaucoup pour tes conseils, c'est bon j'ai plus qu'une webviexw et ça marche.

J'ai donc cette fonction:

public boolean onKeyDown(int keyCode, KeyEvent event) {

webview=(WebView)findViewById(R.id.WebView4);

if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {

webview.goBack();

return true;

}

return super.onKeyDown(keyCode, event);

}

Le seul truc qui bug maintenant c'est que quand je quitte ma webview pour revenir dans le programme et que j'appuie sur la touche KEYCODE_BACK ça fait planter l'application.. Des idées?

Lien vers le commentaire
Partager sur d’autres sites

Alors comme fonction dans mon code, j'ai exactement ceci:

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

webview=(WebView)findViewById(R.id.WebView4);

if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {

webview.goBack();

return true;

}

return super.onKeyDown(keyCode, event);

}

Pour ce qui est de l'exécution, le programme crash quand j'appuis sur le bouton KEYCODE_BACK alors que j'ai quitté ma webview (le bouton devrait alors être utilisé pour quitter l'application).

Le message d'erreur est le suivant: "the application (app.src) has stopped unexpectedly, please try again." Et je n'ai d'autres choix que d'appuyer sur "Force close" :/

Par contre aucun message d'erreur dans la console de l'environnement de développement. Cependant avant l'implémentation de cette fonction je n'avais pas ce problème.

Si vous voulez d'autres bouts de code, faites le moi savoir ! :)

Merci d'avance,

minisac!

Lien vers le commentaire
Partager sur d’autres sites

Personnellement je pense que c'est cette ligne qui bug:

webview=(WebView)findViewById(R.id.WebView4);

Car quand l'application rentre dans la fonction alors que je ne suis plus connecté à internet (et donc que je n'utilise plus ma webview et que je suis passé à un autre layout), il ne trouve plus la WebView4.

Lien vers le commentaire
Partager sur d’autres sites

J'ai parlé trop vite...

Ca marche si la webview à été utilisée. Mais maintenant lorsque je démarre l'application et que j'appuie sur le bouton retour, si la webview n'a pas encore utilisée le programme plante (comme si il n'arrivait pas à savoir si la webview.canGoBack() retourne true). Je comprends plus grand chose donc si quelqu'un a une idée en tête!

Merci d'avance et bonne fin de soirée,

minisac.

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.




×
×
  • Créer...