Bonjour,
Je ne pose pas souvent de questions ici, mais là, je bute un peu.
Je veux envoyer un mail au format HTML, et il me faut formatter une String en HTML. plutôt que d’écrire bestiallement mes balises une par une, j’avais l’idée d’écrire une JSP, et d’utiliser le flux de sortie pour remplir ma String. Je ne sais pas si c’est possible, alors si vous avez une idée…
Je suis sur un serveur d’appli Websphere 5, mais le pbm doit être le même quelque soit le serveur d’appli.
Toutes suggestions sont les bienvenues :jap:
Je me répond pour me dire qu’il y a toujours la solution d’ouvrir une connexion, et d’accéder réellement à la JSP par Socket, mais c’est un peu lourdingue:
public static void main(String[] args){
//note: take care of proxy config
// -DproxySet=true -DproxyHost='HostServeurProxy' -DproxyPort='PortServeurProxy'
try {
byte buffer[]=new byte[300000];
URL url=new URL("http://www.clubic.fr");
URLConnection uc = url.openConnection();
DataInputStream input = new DataInputStream(uc.getInputStream());
int numRead=0;
int size=0;
while (numRead != -1) {
numRead = input.read(buffer,size,20000);
size+=numRead;
}
String result = new String(buffer,0,size);
System.out.println(result);
} catch (MalformedURLException e) {
e.printStackTrace();
//return 1;
} catch (IOException e) {
e.printStackTrace();
//return 2;
}
//return 0;
}
Le source ci-dessus se connecte à l’url et m’affiche la source HTML correspondante, je peux facilement l’adapter. mais j’aurais potientellement des problèmes d’accès (si le serveur Web est full), j’accède au réseau, je trouve pas ça terrible
Ce que j’aurais voulu, si quelqu’un connaît, c’est accéder directement au moteur de JSP (ou en refaire une partie) et declencher l’appel à une servlet ou une JSP quelquonque en récuperant le flux.
Merci, c’est plus simple en effet.
Mais je trouve domage qu’on ne puisse pas utiliser des JSP, formatter du HTML pour afficher sur le Web, ou dans un mail, c’est pareil :neutre:
Surtout que ce qu’on me demande est assez chiadé, il faut que j’affiche des liste de valeurs qui sortent d’une requête, alors je ne vais pas échapper à la génération de String avec de <TR><TD> dans tous les sens.
Obligé si on ne peut insérer qu’une valeur au milieu d’un template. En JSP, on boucle sur un bloc qui contient <TR><TD><%=list.get(i)%> etc… et c’est bouclé.
Enfin bon, avec ça, j’ai déjà une solution.
Petit up!
Finalement je n’utilise pas de JSP, mais un fichier avec un formattage ad-hoc, comme je conseille Paneb. Le problème c’est que MessageFormat est limité à 10 valeurs à remplacer, et j’en ai 30!
En plus, je suis en Java 1.3, donc pas de regexp. :grrr:
J’ai l’impression que je vais encore me recoder un joli moteur de parsing imbitable , des idées?
deltree> Tatoo!!
http://igm.univ-mlv.fr/~roussel/Tatoo/
par contre : c’est buggé ! (c’est normal, c’est mes profs qui l’ont fait :D)
Oui, Velocity ça a l’air cool, surtout que ça fait partie des projet Jakarta, donc j’ai pas mal confiance.
Mais c’est pas le cas de mon client, alors je me suis fait mon fameux code imbiatable:
/***
* Work nearly as MessageFormat class, with more than 10 arguments.
*
* @param body String that contains {0} {1} ... {30} to be replaced
* @param args the replacers
* @param sb the buffer where to insert formatted body
*/
private StringBuffer formatBody(String body, String[] args, StringBuffer sb) {
int pos1=0,pos2=0;
int id;
String idS;
while((pos2=body.indexOf('{',pos1))>-1){
//cut from pos1 to pos2, and append
sb.append(body.substring(pos1,pos2));
//extract argument id, keep CSS code if any, keep number if not enough args.
pos1=body.indexOf('}',pos2);
idS=body.substring(pos2+1,pos1);
pos1++;
try {
id = Integer.parseInt(idS);
if(id<args.length){
sb.append(args[id]);
}else{
sb.append('{');
sb.append(id);
sb.append('}');
}
} catch (NumberFormatException e) {
// ignore format exception because it might be HTML code:
sb.append(body.substring(pos2,pos1));
}
//could reparse it with messageFormat?
}
//append the rest of the String
sb.append(body.substring(pos1));
return sb;
}
Voilà, si ça peut servir à quelqu’un.
Mais je garde l’idée de Velocity, c’est vraiment un projet intéressant, mais je le trouve carrément redondant avec les JSP, avec une syntaxe différente. ??
Edit: correction de code.