Faire interagir son téléphone portable avec son site web
Interrogations d'une Servlet avec javax.microedition.io.HttpConnection
Date de publication : 06 mars 2009
Par
kmdkaci (Ma page perso)
Vous prenez les transports, et comme tous les jours, il y a des problèmes sur le train. Vous vous retrouvez bloqué entre deux stations.
Comme vous avez une réunion ce matin, vous voulez envoyer un mail pour informer vos collaborateurs de votre absence. Comment faire ?
Si vous aimez Java et que vous êtes proche de votre téléphone portable, alors vous trouverez une solution dans les lignes qui suivent.
Dans ce document, nous vous présentons un tutoriel qui vous offre la possibilité de faire interagir votre téléphone portable avec votre serveur,
plus précisément, il vous montre comment envoyer des mails avec votre téléphone portable en passant par votre site web.
I. Introduction
II. Pré-requis
III. Installation des outils
IV. Programmes coté serveur
IV-A. Formulaire de test
IV-B. Servlet de réception de données.
IV-C. Classe d'envoi de mail avec authentification SSL
V. Application J2ME
V-A. Application sur le téléphone portable
V-B. Envoi de données via la méthode GET
V-C. Envoi de données via la méthode POST
V-D. Réception de la réponse du serveur
VI. Téléchargement
VII. Conclusion
VIII. Liens
IX. Remerciements
I. Introduction
Tout au long de ce tutoriel, nous allons vous détailler comment faire communiquer une application installée
sur votre téléphone portable avec un serveur web. Donc, nous aurons deux applications distinctes. La première
installée sur votre téléphone portable, et la seconde coté serveur.
Au début nous allons réaliser notre programme coté serveur, avec une Servlet et une classe. Puis pour
des besoins de test, nous allons interroger le serveur via un formulaire HTML.
Une fois les tests validés, nous allons remplacer notre formulaire par une application J2ME que nous
installerons sur notre mobile.
Le sujet est simple, il s'agit de détailler la procédure d'envoi de mail, par son mobile en passant par
son site Web.
L'utilisateur saisit ses informations sur un formulaire (sur son téléphone portable bien sûr) puis appuie sur un
bouton d'envoi. Vous vous sentez perdu ? On a rien fait pour l'instant !
Nous allons vous détailler toute la procédure dans les lignes ci-dessous.
II. Pré-requis
Nous partons du principe que vous avez Java installé dans votre environnement, ainsi que le serveur Tomcat.
Nos tests sont réalisés sous Java 1.5 et Tomcat 6.0. Mais des versions antérieures sont largement
suffisantes pour créer des applications semblables à la notre.
Les téléphones portables utilisés pour nos tests sont Sony Ericsson K850i et LG KE800. Là aussi,
vous pouvez utiliser votre téléphone, pourvu qu'il contienne l'interpréteur Java.
Pour savoir comment installer Tomcat et travailler avec des Servlets, vous pouvez consulter
http://lfe.developpez.com/Java/TomCat/
sur le site de developpez.com
III. Installation des outils
Il faut commencer par télécharger
Wireless Toolkit (WTK) via le lien suivant:
http://java.sun.com/products/sjwtoolkit/download.htm?feed=JSC
Les étapes pour le téléchargement sont claires. Il suffit de suivre les étapes sur le site et de
choisir son environnement.
Au moment de la rédaction de ce tutoriel, la version du WTK est 2.5.2
Nos tests sont réalisés sous Linux, mais ce sont les mêmes démarches sous Windows ou autre système.
C'est ça la force de Java !
La procédure d'installation est classique. On lance le binaire et on suit les instructions. Une fois
l'installation terminée, nous aurons deux répertoires
WTK2.5.2 qui contient l'outil WTK et un autre
répertoire de travail nommé
j2mewtk.
Nous avons bien installé notre WTK. Pour le lancer, cliquons sur ktoolbar qui se trouve dans le répertoire
WTK2.5.2 /bin
Fig1. Application Wireless Toolkit (WTK)
Mettons en stand-by cette étape, nous y reviendrons lorsque nous aurons besoin de compiler et exécuter
le programme. Occupons-nous maintenant des sources cotées serveur et de notre formulaire HTML.
IV. Programmes coté serveur
Le principe est simple. Nous allons procéder d'une manière classique. Nous commençons par un formulaire
d'envoi d'informations.
Copier coller ce code dans une page HTML que l'on enregistrera sous le nom TelToWeb.html. Pour faciliter nos
tests, nous mettons le fichier HTML dans le répertoire WebContent du serveur
IV-A. Formulaire de test
| TelToWeb |
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>TelToWeb</title>
</head>
<body>
<center>
<form name="formulaire" method="get" action="ServletWebMail">
To :* <input type="text" name="emailTo" size="30"><br>
Sujet :* <input type="text" name="emailSujet" size="30"><br>
Votre Mail :* <textarea name="emailCorps" rows="6" cols="24"></textarea></br>
<input type="submit" value="envoyer">
</form>
</center>
</body>
</html>
|
Détaillons ce petit script :
C'est un formulaire simple. Il contient trois champs de saisie.
To : Pour inscrire les destinataires. S'il y a plusieurs, on les sépare par un point virgule " ;
"
Sujet : Sujet du mail
Votre Mail : Texte du mail.
L'envoi du formulaire se fait via le bouton submit avec la méthode GET ou POST.
Toutes ces informations seront envoyées vers la Servlet ServletWebMail, et seront interceptées
par la méthode doGet si GET est utilisée dans le formulaire, ou par doPOST si POST
est utilisée.
IV-B. Servlet de réception de données.
Voici le code de la Servlet ServletWebMail:
| ServletWebMail.java |
package mesClasses;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletWebMail extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
static final long serialVersionUID = 1L;
public ServletWebMail() {
super();
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String emailTo = req.getParameter("emailTo");
String emailSujet = req.getParameter("emailSujet");
String emailCorps = req.getParameter("emailCorps");
if (emailTo!=null && emailSujet != null && emailCorps != null )
{
String[] ListDest = emailTo.split(";");
EnvoiMailGmail envoiMailGmail = new EnvoiMailGmail();
envoiMailGmail.gererMail(ListDest, emailSujet, emailCorps);
}
resp.setContentType("text/plain");
PrintWriter out = resp.getWriter();
out.print("Mail Transmis ");
out.close();
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
String emailTo = req.getParameter("emailTo");
String emailSujet = req.getParameter("emailSujet");
String emailCorps = req.getParameter("emailCorps");
if (emailTo!=null && emailSujet != null && emailCorps != null )
{
String[] ListDest = emailTo.split(";");
EnvoiMailGmail envoiMailGmail = new EnvoiMailGmail();
envoiMailGmail.gererMail(ListDest, emailSujet, emailCorps);
}
resp.setContentType("text/plain");
PrintWriter out = resp.getWriter();
out.print("Mail Transmis");
out.close();
}
}
|
Détaillons le code de la Servlet ServletWebMail :
Difficile de faire plus simple. Nous définissons les deux méthodes doGet et doPost. Puisque nous
avons la possibilité d'envoyer nos informations via GET ou POST. Pour notre cas, le même traitement
sera effectué dans les deux méthodes. Nous procédons à la récupération des valeurs avec la méthode
getParameter,
String emailTo = req.getParameter("emailTo");
String emailSujet = req.getParameter("emailSujet");
String emailCorps = req.getParameter("emailCorps");
|
On teste si aucun des champs n'est vide, et puis on fait appel à la classe EnvoiMailGmail en invoquant
sa méthode gererMail en lui passant les paramètres récupérés précédemment.
if (emailTo!=null && emailSujet != null && emailCorps != null )
{
String[] ListDest = emailTo.split(";");
EnvoiMailGmail envoiMailGmail = new EnvoiMailGmail();
envoiMailGmail.gererMail(ListDest, emailSujet, emailCorps);
}
|
Si nous regardons de plus prêt la Servlet
ServletWebMail, nous constatons que la variable
emailTo
de type String est transformée en tableau de type String[]. Cela est fait par le moyen de la méthode
split(";") qui permet dans notre cas, d'extraire les chaînes séparées par le caractère ";" et de
les placer dans un tableau.
Puis on renvoie au client un message pour l'informer de la réussite de l'opération d'envoi du mail :
out.print("Mail Transmis");
|
IV-C. Classe d'envoi de mail avec authentification SSL
Notre but final est d'envoyer un mail à partir d'un téléphone portable. Puisque l'on est toujours dans
le train, ceci implique que nous sommes à l'extérieur de notre société. Il est fort possible que
nous ne puissions pas utiliser notre serveur interne pour l'envoi. Dans ce cas, nous utiliserons
une messagerie externe.
On profite de ce tutoriel pour présenter l'envoi de mail par Gmail avec authentification
SSL.
Voici le code de la classe EnvoiMailGmail:
| EnvoiMailGmail.java |
import java.io.IOException;
import com.jscape.inet.smtpssl.SmtpSsl;
import com.jscape.inet.email.EmailMessage;;
public class EnvoiMailGmail {
public void gererMail(String[] ListDest, String cCorps, String cSujet)
{
String EnvoyerA = "";
String EnvoieDe = "monMail@Gmail.com";
String pwd = "monPassWord";
for(int i = 0; i<ListDest.length ; i++)
{
EnvoyerA = ListDest[i];
try{
envoyer(EnvoieDe, pwd, EnvoyerA, cSujet, cCorps);
}catch (IOException ex)
{
System.out.println("L'erreur est "+ex);
}
}
}
public void envoyer (String username,String password,String to, String cSujet, String cCorps ) throws IOException
{
SmtpSsl smtp = null;
try {
smtp = new SmtpSsl("smtp.gmail.com",465);
smtp.connect();
smtp.login(username,password);
EmailMessage message = new EmailMessage();
message.setTo(to);
message.setFrom(username);
message.setSubject(cSujet);
message.setBody(cCorps);
message.setContentType("text/html");
smtp.send(message);
smtp.disconnect();
} catch(Exception e) {
System.out.println("Une erreur s'est produite : " + e) ;
}
}
}
|
Pour pouvoir utiliser cette classe, nous aurons besoin de la librairie sinetfactory. Nous pourrions
aussi utiliser JavaMail qui est une librairie de Sun, très puissante et qui sert à réaliser
des classes permettant de gérer des mails. Avec JavaMail, nous pouvons nous connecter au serveur de mail,
envoyer et relever des messages.
Pour notre exemple, nous utilisons sinetfactory qui va nous servir d'envoyer un mail via Gmail
avec authentification SSL.
Pour chaque élément du tableau ListDest, la méthode envoyer est appelée pour l'envoi de mail.
Dans la méthode envoyer, une instance de connexion SSL via le port 465 est créée, puis on se connecte
via la méthode connect.
smtp = new SmtpSsl("smtp.gmail.com",465);
smtp.connect();
|
On renseigne les différents paramètres du mail, notamment, le destinataire,
le sujet et le corps du message. La méthode setContentType permet de spécifier le format de mail, HTML dans notre
tutoriel.
On procède à l'envoi avec la méthode send,
smtp.login(username,password);
EmailMessage message = new EmailMessage();
message.setTo(to);
message.setFrom(username);
message.setSubject(cSujet);
message.setBody(cCorps);
message.setContentType("text/html");
smtp.send(message);
|
et enfin on se déconnecte du serveur tout simplement avec la
méthode disconnect.
Pour des raisons de simplicité, nous avons codé en dur, le login et le password du mail expéditeur. On
peut facilement les récupérer dans une structure de donnée persistante, une table, fichier XML ou
autre. Mais cela sort du contexte de ce tutoriel.
String EnvoieDe = "monMail@Gmail.com";
String pwd = "monPassWord";
|
Comme nous l'avons évoqué précédemment, nous pouvons aussi utiliser JavaMail pour envoyer vos mails. Le
principe reste le même que dans notre cas.
Il ne nous reste plus qu'à tester nos classes. Essayons d'appeler dans un navigateur le fichier HTML
TelToWeb.html
Après avoir cliqué sur envoyer, on contrôle que le(s) destinataire(s) inscrits dans le champ emailTo
a (ont) reçu un mail. Si cela est vérifié, nous concluons la validation de nos sources coté serveur.
Nous arrivons enfin au coeur du sujet. Nous allons remplacer notre formulaire TelToWeb.html par une application
J2ME que nous allons développer pour notre téléphone portable.
Que les choses sérieuses commencent !
V. Application J2ME
V-A. Application sur le téléphone portable
C'est quoi J2ME et Java ME ? : Dans la FAQ de developpez.com nous trouvons l'explication suivante
:
Java ME ou Java Platform, Micro Edition est l'édition de la plateforme Java à destination de
l'électronique grand public et des systèmes embarqués. La technologie Java ME fourni une machine
virtuelle et un ensemble d'API répartis dans deux composants principaux : les configurations et les
profiles.
Pour plus d'informations, vous pouvez aussi consulter le
FAQ J2ME de developpez.com
Nous allons créer une application J2ME qui nous permettra de communiquer avec notre serveur via HttpConnection.
Pour compiler et exécuter notre application, nous aurons besoin de revenir sur WTK(WirelessToolKit).
Une fois WTK lancé, nous créons un nouveau projet. Pour cela, on clique sur le bouton New Project.
On appelle notre projet TelVersWeb et notre classe principale EnvoiMailJ2me comme indiqué
sur la figure suivante :
Fig2. Notre nouveau projet TelVersWeb
Si nous regardons l'arborescence du répertoire de travail on remarque un nouveau répertoire, le notre
qui porte le nom du projet saisi.
On peut ajouter une icône à notre projet. Pour cela il faut créer une image de format png avec une
taille de 16X16. Enregistrer cette image dans le répertoire res/icons/ Puis aller dans Projects/
Settings/MIDlets puis edit et enfin renseigner la rubrique Icon avec le nom de
l'image que nous avons crée.
Tapez ce code dans votre éditeur préféré, puis enregistrer le dans le répertoire scr de votre application
sous le nom EnvoiMailJ2me.java.
| EnvoiMailJ2me.java |
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.lcdui.*;
import java.io.*;
import javax.microedition.io.*;
public class EnvoiMailJ2me extends MIDlet implements CommandListener {
private final Form MailForm;
private final TextField emailTo,emailSujet,emailCorps;
private static final Command exitCommand = new Command("Exit", Command.EXIT,1);
private static final Command parGet = new Command("ParGet", Command.ITEM, 1);
private static final Command parPost = new Command("ParPost", Command.ITEM, 1);
private Display display;
private StringItem msgResultat;
public EnvoiMailJ2me()
{
MailForm = new Form("EnvoiMailJ2me");
display = Display.getDisplay(this);
emailTo = new TextField("To ","mailNom@domaine.com",30, TextField.ANY);
emailSujet = new TextField("Sujet ","SUJET",30, TextField.ANY);
emailCorps = new TextField("EMail", "Ici texte de mail",150, TextField.ANY);
msgResultat = new StringItem("Resultat : ", "");
MailForm.append(emailTo);
MailForm.append(emailSujet);
MailForm.append(emailCorps);
MailForm.append(msgResultat);
MailForm.addCommand(parPost);
MailForm.addCommand(parGet);
MailForm.addCommand(exitCommand);
MailForm.setCommandListener(this);
}
protected void destroyApp(boolean arg0) {
}
protected void pauseApp() {
}
protected void startApp() {
display.setCurrent(MailForm);
}
public void commandAction(Command comd, Displayable disp) {
if (comd==parGet || comd==parPost)
{
try
{
if(comd==parGet)
{
String url= "http://www.monsite.com/ServletWebMail" + "?";
envoiMailGet(url);
}
else
{
String url= "http://www.monsite.com/ServletWebMail";
envoiMailPost(url);
}
} catch (Exception e) {
e.printStackTrace();
}
}
else if (comd==exitCommand)
{
destroyApp(false);
notifyDestroyed();
}
}
public void envoiMailGet(String url) throws Exception
{
HttpConnection connection = null;
InputStream inStrm = null;
try
{
url = url + "emailTo=" + emailTo.getString();
url = url + "&emailSujet=" + emailSujet.getString();
url = url + "&emailCorps=" + emailCorps.getString();
connection = (HttpConnection) Connector.open(url);
connection.setRequestMethod(HttpConnection.GET);
inStrm = connection.openInputStream();
respServeur(connection, inStrm);
}
finally
{
if (inStrm != null)
inStrm.close();
if (connection != null)
connection.close();
}
}
public void envoiMailPost(String url) throws Exception
{
HttpConnection http = null;
InputStream inStrm = null;
OutputStream outStrm = null;
try
{
http = (HttpConnection) Connector.open(url);
http.setRequestMethod(HttpConnection.POST);
http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
outStrm = http.openOutputStream();
byte data[] = ("emailTo=" + emailTo.getString()).getBytes();
outStrm.write(data);
data = ("&emailSujet=" + emailSujet.getString()).getBytes();
outStrm.write(data);
data = ("&emailCorps=" + emailCorps.getString()).getBytes();
outStrm.write(data);
inStrm = http.openInputStream();
respServeur(http, inStrm);
}
finally
{
if (inStrm != null)
inStrm.close();
if (outStrm != null)
outStrm.close();
if (http != null)
http.close();
}
}
public void respServeur(HttpConnection connection,InputStream inStrm) throws IOException
{
if (connection.getResponseCode() == HttpConnection.HTTP_OK)
{
int length = (int) connection.getLength();
String stringRes="";
if (length != -1)
{
byte servletData[] = new byte[length];
inStrm.read(servletData);
stringRes = new String(servletData);
}
msgResultat.setText(stringRes);
}
}
}
|
Que fait ce code ? Expliquons les grandes lignes du programme.
Le principe est de reproduire le formulaire HTML que nous avons écrit précédemment et procéder à
son envoi. De ce fait, nous obtenons les mêmes champs. Sauf que dans notre cas, nous n'utilisons
pas de navigateur.
Dans notre application, nous avons besoin d'importer les classes de base javax.microedition.midlet.MIDlet,
et les classes javax.microedition.lcdui.* qui nous permettent de réaliser les différents affichages.
Nous commençons par définir les trois champs (emailTo, emailSujet, emailCorps) comme TextField. Trois
boutons exitCommand, parGet et parPost afin de gérer les événements sur notre formulaire que
nous appelons mailForm.
Pour des raisons didactiques, nous allons réaliser deux méthodes envoiMailGet et envoiMailPost
afin d'expliquer les deux façons d'envoi d'informations vers les serveurs.
Dans la méthode public EnvoiMailJ2me nous contentons d'initialiser les différentes valeurs des
champs et nous ajoutons tous les composants au formulaire.
MailForm.append(emailTo);
MailForm.append(emailSujet);
MailForm.append(emailCorps);
|
La méthode CommandAction permet de gérer les événements sur les boutons. On fait appel à l'une
des méthodes en fonction du bouton pressé. envoiMailGet est appelée quand le bouton parGet
est cliqué, envoiMailPost quand le bouton parPost est cliqué. Si exitCommand est pressé
nous quittons l'application.
V-B. Envoi de données via la méthode GET
Pour envoyer des données via la méthode GET, il suffit de les concaténer à la fin de l'url. La forme
du lien ressemble à ceci :
Pour notre cas, nous concaténons les trois champs avec leurs valeurs l'un après l'autre à la fin de l'url
après le caractère " ? ".
url = url + "emailTo=" + emailTo.getString();
url = url + "&emailSujet=" + emailSujet.getString();
url = url + "&emailCorps=" + emailCorps.getString();
|
Puis nous réalisons une connexion avec HttpConnection, et nous choisissons la méthode GET.
connection = (HttpConnection) Connector.open(url);
connection.setRequestMethod(HttpConnection.GET);
|
V-C. Envoi de données via la méthode POST
Contrairement à la méthode GET, les informations envoyées via la méthode POST ne sont pas concaténées
à la fin de l'url. Mais elles sont envoyées via un flux. C'est pour cette raison qu'on définit le
flux de sortie dans envoiMailPost en plus du flux d'entrée et de la connexion Http.
HttpConnection http = null;
InputStream inStrm = null;
OutputStream outStrm = null;
|
Nous commençons par écrire nos données dans un tableau, puis on transfère son contenu dans le flux de
sortie.
byte data[] = ("emailTo=" + emailTo.getString()).getBytes();
outStrm.write(data);
|
On répète la procédure pour chaque champ de notre formulaire
L'envoi des informatisons de l'entête est nécessaire lors de l'utilisation de la méthode POST, contrairement
à GET où on peut se passer de ces informations.
http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
|
Quelque soit la méthode utilisée envoiMailGet ou envoiMailPost, à la fin du traitement,
nous fermons les flux d'entrée, la connexion Http et le flux de sortie pour la méthode envoiMailPost.
if (inStrm != null)
inStrm.close();
if (outStrm != null)
outStrm.close();
if (http != null)
http.close();
|
V-D. Réception de la réponse du serveur
Quand nous envoyons une requête au serveur, dans la plupart des cas, nous attendons une réponse en retour.
Dans notre exemple le serveur (plus précisément la Servlet ServletWebMail) nous renvoie un
message pour nous informer que le mail a été transmis.
out.print("Mail Transmis ");
|
Afin d'afficher ce message sur notre téléphone portable, nous avons utilisé l'objet InputStream. La réception
de ces informations est gérée par la méthode respServeur. Si le serveur nous renvoie un flux,
nous procédons à sa lecture comme suit :
byte servletData[] = new byte[length];
inStrm.read(servletData);
stringRes = new String(servletData);
|
Et enfin nous affichons le résultat en ajoutant la chaîne à StringItem
msgResultat.setText(stringRes);
|
Toutefois, cette méthode a ses limites. Si les informations renvoyées par le serveur sont d'une grande
taille, nous ne pourrons pas les afficher. Il faut utiliser un autre moyen, comme l'objet ByteArrayOutputStream
par exemple.
Avant toute opération, compilation et exécution, nous devons choisir le modèle correspondant à notre
téléphone. Dans le menu Préférences / Modèles /API Selection, puis TargetPlatForm on
choisit un élément. Pour les notres qui sont LG KE800 ou Sony Ericsson K850i, on a sélectionné
MIDP 1.0.
Cette API est compatible avec la plus part des téléphones portables.
Fig.3 Choix de l'API pour le téléphone portable
Compilons notre programme. Pour cela on clique sur le bouton Build. Si nous obtenons Build succed, on
conclue que notre programme est compilé sans erreurs. Pour le lancer nous cliquons sur Run.
Le WTK intègre un émulateur de téléphone portable. Les figures suivantes montrent les différents choix entre
plusieurs modèles. Il suffit de faire défiler la liste dans la rubrique Device et d'en choisir
un.
Fig. 4 Lancement du programme TelVersWeb
Pour lancer notre programme, on clique sur le bouton Launch ou sur OK (le grand bouton au milieu).
On obtient notre formulaire, nous saisissons les informations pour l'envoi de mail, et on appuie
sur le bouton Menu. Nous obtenons deux éléments de menu correspondants aux méthodes ParGet et parPost que nous avons implémentées.
La troisième méthode est exécutée quand on clique sur le bouton Exit.
Fig. 5 Affichage de notre application sur différents émulateurs
Toutefois, il faut paramétrer les permissions pour éviter les multiples messages de confirmations, notamment
ceux relatifs à airtime. Pour cela, dans le programme WTK, il faut aller dans le menu : Edit/Préférences/Security
puis dans la rubrique Security domain et choisir l'option minimum.
Notre programme semble concluant, nous allons le transférer sur notre téléphone portable. On va d'abord créer un
package. Dans le menu Préférence, sélectionner Package puis createPackage. Si
nous regardons dans le dossier bin du projet, nous trouvons un nouveau fichier .jar
au nom de notre projet TelVersWeb.jar
C'est ce fichier que nous allons transférer sur notre téléphone portable. Il suffit de connecter notre mobile via
un port USB ou par un autre moyen. Pour le LG KE800 le fichier a été transféré par un câble USB dans
le répertoire dénommé Autres.
A présent, nous pouvons débrancher notre téléphone de l'ordinateur. Nous allons parcourir ses dossiers
pour lancer l'installation du fichier TelVersWeb.jar
La procédure d'installation est simple, il suffit de sélectionner le fichier et de choisir Install.
Toutefois, quelques différences surgissent d'un téléphone à un autre.
Pour lancer notre programme, on ouvre le répertoire destiné aux applications. Nous obtenons notre formulaire
semblable au formulaire HTML, comme indiqué sur la figure suivante :
Fig. 6 Affichage du formulaire sur le téléphone portable Sony Ericsson K850i
Pour envoyer notre formulaire nous actionnons le bouton Options ou Menu (selon les types
de téléphone portable). Nous allons choisir l'une des options parGet ou parPost. Bien sur, nous
aurons droit à quelques messages de confirmation. Le premier est un message qui nous avertit que
l'application TelVersWeb va procéder à l'envoi ou réception d'informations. Et ceci peut être
payant. Les messages de confirmation peuvent être différents d'un téléphone portable à un autre. Ceci est paramétrable.
Il suffit d'aller dans le menu Permissions de son téléphone portable et configurer les différents messages
liés aux permissions d'accès ou d'envoi de données.
Fig, 7 Affichage du message de permission Sur Sony Ericsson K850i
Important
-
- Avant d'envoyer ces informations avec votre téléphone portable, vérifiez bien que votre compte chez votre opérateur
permet la communication via httpConnection. En effet, au cours d'un de nos tests, il s'est
avéré que le compte utilisé, qui est une mobil carte ne permet pas d'utiliser certains services,
sauf appels et SMS. En France, la plupart des comptes abonnement permettent la communication via
HttpConnection
-
- Les tests effectués avec l'url de format http://IP:Ports/ServletWebMail
n'étaient pas concluants.
Mais en changeant cette url en http://www.domaine.com/ServletWebMail
la communication entre le téléphone portable et la Servlet a fonctionné.
-
- La communication via httpConnection peut être payante, selon votre type d'abonnement.
Et bien ! Vous avez vérifié que votre destinataire a sûrement reçu votre mail. Vous êtes content! Vous
venez de réaliser votre première application J2ME.
Maintenant, vous vous rendez compte que votre téléphone portable peut servir à autre chose que ce pourquoi vous l'utilisez habituellement.
Vous devez certainement le voir à présent sous un angle différent.
Vous êtes maintenant arrivé au bureau. Vous vous vantez devant vos collègues de la manière que vous avez
utilisée pour les informer de votre retard. Hé ! On vous informe que vous n'avez rien inventé, et
que cette procédure existe déjà dans la plupart des téléphones portables? Déçu ? Non! Car vous avez néanmoins
le mérite d'avoir créé vos propres méthodes, et peut-être faire mieux, pourquoi pas? A présent
vous pouvez concurrencer votre opérateur téléphonique!
VI. Téléchargement
Vous trouvez les codes sources dans le fichier zip suivant
sources.zip
VII. Conclusion
Ce tutoriel est loin d'être exhaustif. Il comporte des lacunes au niveau de la sécurité. A aucun moment, nous
n'avons vérifié l'intégrité des données, avouons-le! Toute personne ayant connaissance de votre exploit
peut envoyer un mail via votre Servlet, mais aussi avec vos coordonnées. A vous de développer un
moyen de chiffrer ou d'authentifier la connexion à votre Serveur.
VIII. Liens
IX. Remerciements
Je remercie Lionel Louveau et
Baptiste Wicht pour leurs conseils et leurs propositions,
ainsi que Andrea Klindwort pour la relecture de ce tutoriel. Sans oublier
evarisnea pour la correction orthographique.

