[JSP]C'est magique?

Fermé
Rico - 21 août 2003 à 12:31
 raoudoutchy - 18 févr. 2008 à 01:53
Bonjour,
Voilà, je pose ma question, j'm'explique après...:
comment un script jsp sait-il quelle méthode java invoquer quand un bouton de type "submit" d'une page est pressé?

En fait, j'essaie de voire un peu comment Tomcat et le jsp marchent. J'ai donc jeté un coup d'oeil au code source d'une page jsp donnée en exemple avec tomcat (numguess.jsp). Après avoir fouillé dans les fichiers de config, je n'ai pas trouvé réponse à ma question. C'est précisemment ces trois lignes là qui me peinent :
  <form method=get>
  What's your guess? <input type=text name=guess>
  <input type=submit value="Submit">

Je m'attendais à y trouver l'invocation de la méthode java qui traite la valeur donnée dans la zone de texte. Or cette invocation est implicite, mais bien réelle...(Il s'agit de deviner un nombre entre 1 et 100. Par exemple, le nombre d'essais réalisés est mis à jour à la pression du bouton submit. Tout ça est réalisé par la classe java NumberGuessBean)

Je ne crois pas à la magie, aussi je me dis qu'il doit y avoir une explication, dont la simplicité risque de m'agacer...

Espérant pas avoir été trop flou, bien l'merci pour vos aides!
Rico.

6 réponses

Ou comment se sentir très seul au sein d'une discussion...T'façon j'm'en fous, g fini par trouver tout seul...

Donc si ça en intéresse quand même, le principe du jsp, c'est que c'est effectivement magique, et qu'un certain nombre de méthodes s'apellent "automatiquement" : par exemple, au clique sur un bouton dont le nom est "toto" (défini en html par exemple par :
<FORM METHOD=get>
<INPUT TYPE=submit NAME="toto" VALUE="ma valeur">
</FORM>
)
la méthode "setToto("ma valeur")" est automatiquement appelée (si elle se trouve dans la classe importée)...Grosso modo, ça marche un peu comme ça. Et derrière, y'a plein de subtilités sympathiques.

Moâ, c'était juste ça que je voulais savoir...
Ciao,
L'ami Rico.
1
lillu Messages postés 7 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 10 septembre 2003
10 sept. 2003 à 10:33
Salut,

Moi aussi, j'etais curieuse comment les forms HTML marche avec JSP et je trouve que ces deux articles peuvent clarifier quelque questions...

http://java.sun.com/products/jsp/html/jspbasics.fm2.html

http://www.javaworld.com/javaworld/jw-03-2000/jw-0331-ssj-forms.html

Ciao

Lillu

http://www.geocities.com/lillamarta
http://www.geocities.com/lillamarta/purple
0
Bon, j'insiste un coup, parce que je me suis repenché sur le problème, et j'ai toujours pas vu le principe. Normalement, il y a une méthode "doGet" (dans une classe java incluse dans le .jsp : NumberGuessBean) qui doit permettre au navigateur de savoir quoi faire une fois le bouton pressé. Mais dans ce cas, rien. Donc je ne vois pas le lien entre le clique sur le bouton "submit", et l'action qui en découle. (appel d'une méthode de la classe NumberGuessBean).
Kiki pourrait m'aider?
Vous remerciant,
Rico.
0
<form ACTION=???>
0
Jean-François Pillou Messages postés 18707 Date d'inscription lundi 15 février 1999 Statut Webmaster Dernière intervention 16 février 2023 63 270
4 sept. 2003 à 13:50
Sauf que tu nous donne pas tout le code source...

En fait je suppose que lorsque l'on précise pas d'action, c'est la page elle-même qui est invoquée... elle fait donc le formulaire + le traitement !
0
Voici le code jsp, suivi du code java. Mon soucis est de comprendre comment est apellée la méthode setGuess, avec le bon paramètre (le contenu de la zone de texte) :
(Dans le web.xml, rien n'apparait de ce genre)

<!--
  Copyright (c) 1999 The Apache Software Foundation.  All rights 
  reserved.

  Number Guess Game
  Written by Jason Hunter, CTO, K&A Software
  http://www.servlets.com
-->

<%@ page import = "num.NumberGuessBean" %>

<jsp:useBean id="numguess" class="num.NumberGuessBean" scope="session"/>
<jsp:setProperty name="numguess" property="*"/>

<html>
<head><title>Number Guess</title></head>
<body bgcolor="white">
<font size=4>

<% if (numguess.getSuccess()) { %>

  Congratulations!  You got it.
  And after just <%= numguess.getNumGuesses() %> tries.<p>

  <% numguess.reset(); %>

  Care to <a href="numguess.jsp">try again</a>?

<% } else if (numguess.getNumGuesses() == 0) { %>

  Welcome to the Number Guess game.<p>

  I'm thinking of a number between 1 and 100.<p>

  <form method=get>
  What's your guess? <input type=text name=guess>
  <input type=submit value="Submit">
  </form>

<% } else { %>

  Good guess, but nope.  Try <b><%= numguess.getHint() %></b>.

  You have made <%= numguess.getNumGuesses() %> guesses.<p>

  I'm thinking of a number between 1 and 100.<p>

  <form method=get>
  What's your guess? <input type=text name=guess>
  <input type=submit value="Submit">
  </form>
 <% } %>

</font>
</body>
</html>



Et le code java :
/*
 * Originally written by Jason Hunter, http://www.servlets.com
 */
package num;
import java.util.*;
public class NumberGuessBean {
  int answer;
  boolean success;
  String hint;
  int numGuesses;
  public NumberGuessBean() {
    reset();
  }
  public void setGuess(String guess) {
    numGuesses++;
    int g;
    try {
      g = Integer.parseInt(guess);
    }
    catch (NumberFormatException e) {
      g = -1;
    }
    if (g == answer) {
      success = true;
    }
    else if (g == -1) {
      hint = "a number next time";
    }
    else if (g < answer) {
      hint = "higher";
    }
    else if (g > answer) {
      hint = "lower";
    }
  }
  public boolean getSuccess() {
    return success;
  }
  public String getHint() {
    return "" + hint;
  }
  public int getNumGuesses() {
    return numGuesses;
  }
  public void reset() {
    answer = Math.abs(new Random().nextInt() % 100) + 1;
    success = false;
    numGuesses = 0;
  }
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
s'il vous plait j'ai un problème de code java
je veut savoir comment faire une méthode de recherche en java avec le type résultats est un vector
aidez moi pour terminer mon projet fin d'études
0
bonjour
voilà un exemple qui peut t'aider

public Vector getAllInterests ( ) throws Exception {
// Retourne un vecteur contenant l'ensemble des centres d'intérêt trouvés
// dans la base
Vector interests = new Vector();
try {
String request = "select * from INTEREST";

Statement statement = connection.createStatement();
ResultSet response = statement.executeQuery(request);

while (response.next()) {
int interestID = response.getInt("ID_INTEREST");
String interestName = response.getString("INTEREST");

Interest interest = new Interest ( interestID, interestName );

interests.add(interest);
}

response.close();
statement.close();

return interests;
}
catch (Exception e) {
throw e;
}
}



BN: INTEREST est le nom de la table et ID_INTEREST et INTEREST sont des champs de types int et String respectivement
il est à noter aussi que Interest (dans la ligne contenant le code "new Interest ( interestID, interestName )" est le nom d'une classe java ayant 2 attributs de types int et String
0