2009-11-26 4 views
0

Pour un client, je dois écrire une servlet qui peut imprimer des valeurs dans un formulaire. Le formulaire est hébergé sur un autre serveur et ressemble un peu à ceci:Le poste de formulaire tomcat intersite ne fonctionne pas

<form action="http://myserver/myServlet" method="POST"> 
<input type="text" id="someName" value="someInterestingValue"/> 
<input type="submit" value="submit" /> 
</form> 

J'ai un Tomcat 5.0.28 serveur disponible, en cours d'exécution sur un JDK Java 1.4, donc je fait une servlet simple:

public class ProxyServlet extends HttpServlet { 
    public void doPost(HttpServletRequest req, 
         HttpServletResponse res) 
         throws ServletException, IOException { 
     PrintWriter out = res.getWriter();  
     Enumeration a =req.getAttributeNames(); 
     while (a.hasMoreElements()){ 
      String attrname = (String) a.nextElement(); 
      out.println(attrname+"="+req.getAttribute(attrname)+"<br/>"); 
     } 
     out.close(); 
    } 
} 

Quand je vais à la servlet par URL tout ressemble comme prévu. Lorsque j'envoie une requête GET avec certains paramètres, je peux les voir en tant qu'attributs dans le débogueur dans la méthode doGet() (la méthode a été omise).

Cependant, dans le doPost(), mes champs de formulaire semblent être manquants. J'ai regardé dans les fichiers journaux Tomcat, et rien de spécial n'est enregistré. J'ai essayé d'ajouter un fichier crossdomain.xml à certains répertoires, mais je n'ai pas trouvé un moyen de modifier ce comportement. Donc, pour être clair: Le formulaire indiqué ci-dessus est sur le serveur A. Mon servlet fonctionne sur une ancienne application Tomcat/Java existante hébergée sur le serveur B. Lorsque le formulaire est de type "POST", aucun des champs n'arrive à le Servlet sur le serveur B. Apache n'est PAS "en face" de Tomcat.

Y a-t-il des paramètres de configuration qui me manquent dans Tomcat? Des conseils ou des suggestions où chercher? L'aide est grandement appréciée.

Répondre

0

Trouvé le problème. Après une journée entière de recherche et de codage, tout se résume au fait que mon code fonctionnait bien. Le problème est dans le formulaire. la ligne:

<input type="text" id="someName" value="someInterestingValue"/> 

lire:

<input type="text" name="someName" value="someInterestingValue"/> 

Pour les personnes mentionnant "getParameter" au lieu de "getAttribute" vous êtes tout à fait correct. Dans mon code de test, je devais juste être sûr (parce que je pensais l'avoir perdu ...) mais les deux ne renvoyaient pas de résultats, car le navigateur n'envoyait tout simplement pas les paires nom/valeur. Je suppose que poster sur Stackoverflow m'a aidé, parce que je devais expliquer et relire mon problème, je pensais que le "id =" avait l'air drôle. Le codage consiste à trouver des bugs dans des morceaux de texte que vous avez oubliés ...

+0

Ah, ça m'a aussi manqué. Cela aurait été trop évident oui. Cela aurait été plus utile si vous aviez réellement dit que le truc 'getParameter()' ne fonctionnait pas non plus. Néanmoins heureux que vous l'ayez résolu vous-même. – BalusC

+0

Oui, mon mauvais, j'avais le code de getParameter() à l'origine mais j'ai pensé que je pourrais le perdre pour rendre la question un peu plus courte. – Rolf

1

Demander des attributs? Vous n'avez pas besoin d'y accéder en tant que paramètres de demande en utilisant HttpServletRequest#getParameter() et ainsi de suite?

Ce qui ajoute plus de confusion, c'est que vous avez dit que cela fonctionne dans le doGet(). Comment son code ressemble-t-il alors? Est-ce que cela leur donne aussi accès à des attributs? Cela aurait été impossible dans un environnement JSP/Servlet normal (c'est-à-dire que vous n'utilisez pas un filtre qui copie les paramètres vers des attributs).

0

Ceci n'a rien à voir avec le cross-site. Comme l'a dit BalusC, utilisez getParameter ... au lieu de getAttribute ...

Questions connexes