IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

Simuler un POST dans une JSP


Sujet :

Servlets/JSP Java

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    41
    D�tails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 41
    Par d�faut Simuler un POST dans une JSP
    Bonjour,

    j'aimerais simuler l'envoi d'un formulaire avec la methode POST.
    Actuellement j'ai une page JSP qui poss�de un formulaire qui emet la requette suivante :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    http://casatosorigin.dyndns.org:8081/opiam/logon.do
     
    POST /opiam/logon.do HTTP/1.1
    Host: casatosorigin.dyndns.org:8081
    User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/20061201 Firefox/2.0.0.3 (Ubuntu-feisty)
    Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
    Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    Connection: keep-alive
    Referer: http://casatosorigin.dyndns.org:8081/opiam/?ticket=ST-22-knGl9t4upFmI4KdUKD2XQ0IUmmKE7vgDmxU-20
    Cookie: JSESSIONID=83633B1777912C48804DE0E072882B16; additionalInfoFromCAS=sprain
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 38
    login=scarter&password=sprain&x=35&y=5
    HTTP/1.x 200 OK
    Server: Apache-Coyote/1.1
    Content-Type: text/html;charset=ISO-8859-1
    Content-Length: 918
    Date: Tue, 12 Jun 2007 14:52:13 GMT
    j'aimerais pourvoir g�n�rer la meme requette en me connectant sur une autre JSP.

    en gros, j'aimerais realiser une JSP qui cr�� cette requette, mais je n'y parviens pas. J'ai test� ca :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <%@ page language="java"  %>
    <%
            String cookieName = "additionalInfoFromCAS";
            Cookie cookies [] = request.getCookies ();
            Cookie myCookie = null;
            String userLogin = null;
            String userPassword = null;
            if (cookies != null)
            {
                    for (int i = 0; i < cookies.length; i++)
                    {
                            if (cookies [i].getName().equals (cookieName))
                            {
                                    myCookie = cookies[i];
                                    break;
                            }
                    }
            }
            //si le cookie contenant les informations issues de CAS existe,
            //on récupère le login et le password.
            if (myCookie != null)
            {
                    userLogin = request.getRemoteUser();
                    userPassword = myCookie.getValue();
            }
            //envoie de la requette POST pour valider le formulaire d'OPIAM
    try {
            // Construct data
            //String data = java.net.URLEncoder.encode("user", "UTF-8") + "=" + java.net.URLEncoder.encode(userLogin, "UTF-8");
            //data += "&" + java.net.URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode(userPassword, "UTF-8");
            String data = "login=scarter&password=sprain";
     
            // Send data
            java.net.URL url = new java.net.URL("http://applisatosorigin.dyndns.org:8080/opiam2/logon.do");
            java.net.URLConnection conn = url.openConnection();
            conn.setDoOutput(true);
            java.io.OutputStreamWriter wr = new java.io.OutputStreamWriter(conn.getOutputStream());
            wr.write(data);
            wr.flush();
        
            // Get the response
            java.io.BufferedReader rd = new java.io.BufferedReader(new java.io.InputStreamReader(conn.getInputStream()));
            String line;
            String pagecontent =  "";
            while ((line = rd.readLine()) != null) {
                // Process line...
                    pagecontent += line;
            }
            wr.close();
            rd.close();
        } catch (Exception e) {
        }
    %>
    sans succ�s.

    merci pour vos remarques

    Aswat

  2. #2
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    41
    D�tails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 41
    Par d�faut POST avec httpclient dans une JSP
    en cherchant d'autres solutions potentielles � mon probl�me je suis tomb� sur le projet HttpClient d'Apache. j'ai donc �ssay� d'int�grer ca dans ma JSP, ce qui donne ca :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <%@ page language="java"  %>
    <%@ page import="java.io.IOException;"%>
    <%@ page import="org.apache.commons.httpclient.HttpClient;"%>
    <%@ page import="org.apache.commons.httpclient.HttpException;"%>
    <%@ page import="org.apache.commons.httpclient.methods.PostMethod;"%>
    <%
            String cookieName = "additionalInfoFromCAS";
            Cookie cookies [] = request.getCookies ();
            Cookie myCookie = null;
            String userLogin = null;
            String userPassword = null;
            if (cookies != null)
            {
                    for (int i = 0; i < cookies.length; i++)
                    {
                            if (cookies [i].getName().equals (cookieName))
                            {
                                    myCookie = cookies[i];
                                    break;
                            }
                    }
            }
            //si le cookie contenant les informations issues de CAS existe,
            //on récupère le login et le password.
            if (myCookie != null)
            {
                    userLogin = request.getRemoteUser();
                    userPassword = myCookie.getValue();
            }
            //envoie de la requette POST pour valider le formulaire d'OPIAM
     
            HttpClient client = new HttpClient();
     
            // Adresse du formulaire à soumettre
            String postUrl = "http://applisatosorigin.dyndns.org:8080/opiam2/logon.do";
            PostMethod method = new PostMethod(postUrl);
     
            // Champs du formulaire à renseigner
            method.addParameter("user", userLogin);
            method.addParameter("password", userPassword);
     
            try 
            {
                    client.executeMethod(method);
                    String body = method.getResponseBodyAsString();
     
                    // Il est aussi possible de récupérer le résultat sous
                    // forme de flux InputStream avec getResponseBodyAsStream()
                    System.out.print(body);
     
            } catch (HttpException e) {
                    e.printStackTrace();
            } catch (IOException e) {
                    e.printStackTrace();
            } finally {
                    // Libération des ressources
                    method.releaseConnection();
            }
    %>
    cependant la JSP ne compile pas, j'ai bien inclus commons-httpclient-3.0.1.jar
    et commons-logging.jar

    mais j'obtient ca :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    11:14,261 ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/opiam2].[jsp] - "Servlet.service()" pour la servlet jsp a généré une exception
    org.apache.jasper.JasperException: Impossible de compiler la classe pour la JSP:
     
     
     
     
    Stacktrace:
            at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:85)
            at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
            at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:435)
            at org.apache.jasper.compiler.Compiler.compile(Compiler.java:298)
            at org.apache.jasper.compiler.Compiler.compile(Compiler.java:277)
            at org.apache.jasper.compiler.Compiler.compile(Compiler.java:265)
            at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
            at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:299)
            at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
            at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
            at edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:401)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
            at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
            at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
            at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
            at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
            at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
            at java.lang.Thread.run(Thread.java:595)

  3. #3
    Membre �m�rite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par d�faut
    simuler une requ�te post? c'est quoi le probl�me?

    requ�te post signifie passage des donn�es � uploader au serveur par un formulaire... ce qui donne pour toi:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    <form action='taServlet' method='post'>
    <input type='text' name='login' />
    </form>
    Dans cette situation tu auras dans ta requ�te post:

    login=la valeur entr�e par l'utilisateur

    Ensuite chaque param�tre est s�par� par un &

  4. #4
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    41
    D�tails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 41
    Par d�faut
    euh, je pense que tu n'as pas compris ce que je recherche a faire.

    En gros jusqu'ici, le point d'entr� de mon application �tait un formulaire dans une jsp, il resemble � ca :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <html:form action="/logon" method="POST" focus="login" target="_parent" >
                     <TABLE cellpadding="0" cellspacing="0" border="0" summary="Login" align="center" class="body" width="100%">
                       <TR><TD><BR/></TD></TR>
                       <TR><TD align="left">Login&nbsp;:&nbsp;</TD>
                       <TD>
    			 <html:text property="login" size="20" maxlength="128"/>
                       </TD>
                       </TR>
                       <TR><TD><BR/></TD></TR>
                       <TR><TD align="left">Password&nbsp;:&nbsp;</TD>
                       <TD>
                       <html:password property="password" size="20" maxlength="128" redisplay="false"/>
                       </TD>
                       </TR>
                       <TR><TD><BR/></TD></TR>
                       <TR><TD colspan="2" align="center">
                       <INPUT type="image" src="<%=request.getContextPath()%>/images/ok_button.gif" border="0" alt="Ok" title="Log on">
                       </TD>
                                                </TR>
                                                <TR><TD><BR/><BR/></TD></TR>
                                                <TR><TD colspan="2" align="center">Please enter your login and password.</TD></TR>
                                            </TABLE>
                                        </html:form>
    Maintenant, je doit remplacer ce formulaire remplis par l'utilisateur par un formulaire POST-� automatiquement. La premi�re partie de ma JSP recup�re la liste des cookies et s'en sert pour "remplir" le formulaire. Ensuite la deuxi�me partie de ma JSP devra envoyer ce formulaire remplis via POST. Seulement je n'y parviens pas encore. Pour information, j'avais d�j�s fait un truc similaire en Perl qui resemblais � ca :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #!/usr/bin/perl
    #agent LemonLDAP pour protéger l'application OPIAM-demo
     
    use LWP::UserAgent;
    use CGI;
    use Cwd;
    my $dir = getcwd;
    my $ua = LWP::UserAgent->new;
    my $req = HTTP::Request->new(POST => 'http://opiam.example.com:8080/demo/logon.do');
    $req->content_type('application/x-www-form-urlencoded');
     
    # On transmet le login + password de l'utilisateur pour simuler la connection
    $req->content("login=$ENV{HTTP_UID}&password=$ENV{HTTP_PASSWORD}");
    my $res = $ua->request($req);
    my %headers = %{$res->headers};
    my $cgi=CGI->new;
    my %cgiHeaders;
    $cgiHeaders{'-type'} = $headers{'Content-Type'} || 'text/html';
    foreach(keys %headers) {
    	next if(/Content-Type/);
    	$cgiHeaders{"-$_"} = $headers{$_};
    }
    print $cgi->header(%cgiHeaders);
    print $res->content;
    J'espere que tu as compris ce que je voulais dire.

    Merci pour votre aide

    aswat

  5. #5
    Membre �m�rite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par d�faut
    ok j'avais pas compris les choses comme ca en effet

    tes directives page import, il faut que tu enl�ves le ';' � la fin

  6. #6
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    41
    D�tails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 41
    Par d�faut
    merci Pollux, en effet j'avais pas vu les ;

    Mais en fait le probl�me c'est que j'utilise le SSO CAS et que lorsque j'appel /logon, je tombe sur le filtre de CAS qui v�rifie que j'ai bien le cookie qui va bien, le probl�me c'est que mon code s'execute cot� serveur et que forcement les cookies ne sont pas pr�sents. J'essaye donc de rajouter mes cookies � la requetes. Probl�me : au d�but j'ai des javax.servlet.http.Cookie et je doit les transformer en org.apache.commons.httpclient.Cookie. Pour ce faire, je n'ai pas trouv� de methode simple donc je lit et j'ecris la valeur dan sle nouveau. Seulement bizzarement, cookie.getDomain() et cookie.getPath() me renvoient null alors que je sais pertinament qu'ils ne sont pas null (ce que me confirme Web Developper Toolbar ). Vous avez une id�e qui expliquerais cela ?

    sinon voila ou en est mon code actuel :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <%@ page language="java"  %>
    <%@ page import="java.util.Date"%>
    <%@ page import="java.io.IOException"%>
    <%@ page import="org.apache.commons.httpclient.HttpClient"%>
    <%@ page import="org.apache.commons.httpclient.HttpState        "%>
    <%@ page import="org.apache.commons.httpclient.HttpException"%>
    <%@ page import="org.apache.commons.httpclient.methods.PostMethod"%>
    <%
            String cookieName = "additionalInfoFromCAS";
            Cookie cookies [] = request.getCookies ();
            org.apache.commons.httpclient.Cookie[] cookiesADeplacer = new org.apache.commons.httpclient.Cookie[cookies.length];
            Cookie myCookie = null;
            String userLogin = null;
            String userPassword = null;
            if (cookies != null)
            {
                    for (int i = 0; i < cookies.length; i++)
                    {
                            System.out.println("COOKIE -N-"+i);
                            System.out.println("cookie initial :");
                            System.out.println(cookies[i].getName());
                            System.out.println(cookies[i].getValue());
                            System.out.println(cookies[i].getDomain());
                            System.out.println(cookies[i].getPath());
                            System.out.println(cookies[i].getSecure());
                            System.out.println(cookies[i].getMaxAge());
                            System.out.println("------------");
                            String domain = cookies[i].getDomain();
                            String name = cookies[i].getName();
                            String value = cookies[i].getValue();
                            String path = cookies[i].getPath();
                            boolean secure = cookies[i].getSecure();
                            int maxAge = cookies[i].getMaxAge();
                            cookiesADeplacer[i] = new org.apache.commons.httpclient.Cookie(domain, name, value, path,maxAge, secure);             System.out.println("nouveau cookie :");
                            System.out.println(cookiesADeplacer[i].getName());
                            System.out.println(cookiesADeplacer[i].getValue());
                            System.out.println(cookiesADeplacer[i].getDomain());
                            System.out.println(cookiesADeplacer[i].getPath());
                            System.out.println(cookiesADeplacer[i].getSecure());
                            System.out.println(cookiesADeplacer[i].getExpiryDate());
                            System.out.println("------------");
                            System.out.println("------------");
                            if (cookies [i].getName().equals (cookieName))
                            {
                                    myCookie = cookies[i];
                                    break;
                            }
                    }
            }
            /*
            for (int i = 0; i < cookies.length; i++)
            {
                    System.out.println(cookiesADeplacer[i].getName());
            }
            //si le cookie contenant les informations issues de CAS existe,
            //on récupère le login et le password.
            if (myCookie != null)
            {
                    userLogin = request.getRemoteUser();
                    userPassword = myCookie.getValue();
            }
     
            HttpState initialState = new HttpState();
            HttpClient client = new HttpClient();
     
            // on insert les cookies venant de CAS dans la requete afin de ne pas etre bloqué par CAS-Filter
            initialState.addCookies(cookiesADeplacer);
            client.setState(initialState);
    // Adresse du formulaire à soumettre
            String postUrl = "http://applisatosorigin.dyndns.org:8080/opiam2/logon";
            PostMethod method = new PostMethod(postUrl);
     
            // Champs du formulaire à renseigner
            method.addParameter("user", userLogin);
            method.addParameter("password", userPassword);
            try
            {
                    client.executeMethod(method);
                    String body = method.getResponseBodyAsString();
     
                    // Il est aussi possible de récupérer le résultat sous
                    // forme de flux InputStream avec getResponseBodyAsStream()
                    System.out.print(body);
     
            } catch (HttpException e) {
                    e.printStackTrace();} catch (IOException e) {
                    e.printStackTrace();
            } finally {
                    // Libération des ressources
                    method.releaseConnection();
            }*/
    %>

Discussions similaires

  1. [ XML ][ XSL ][ JSP ] afficher du xml dans une JSP
    Par zozolh2 dans le forum Servlets/JSP
    R�ponses: 9
    Dernier message: 17/07/2009, 20h34
  2. La methode POST dans une page JSP
    Par fadex dans le forum Servlets/JSP
    R�ponses: 8
    Dernier message: 10/05/2006, 21h53
  3. [jsp] include dynamique dans une jsp
    Par petitelulu dans le forum Servlets/JSP
    R�ponses: 9
    Dernier message: 04/03/2005, 07h59
  4. navigation dans une jsp avec javascript
    Par petitelulu dans le forum G�n�ral JavaScript
    R�ponses: 3
    Dernier message: 15/11/2004, 18h55
  5. [struts][jsp]Inclusion dans une jsp
    Par GreenJay dans le forum Servlets/JSP
    R�ponses: 2
    Dernier message: 17/06/2004, 11h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo