Avatar billede kernelx Juniormester
22. november 2007 - 12:44 Der er 6 kommentarer og
1 løsning

Java - få fat i POST-data

Hi,

jeg har et HTML-formular
<form action="test.jsp?test=123&test2=abc" method="POST">
  <input type="text" name="test" /><br/>
  <input type="text" name="test2" /><br/>
  <input type="submit" name="submit" value="ok" /><br/>
</form>

i test.jsp vil jeg nu gerne explizit få fat i POST-værdierne.
Er det muligt at få fat i det, som står i HTTP-body'en?
er f.eks muligt med request?
request.getParameters <-- få fat i alle værdier - og ikke kun POST.

med venlig hilsen
KernelX
Avatar billede arne_v Ekspert
22. november 2007 - 16:32 #1
Jeg tror at du er ude i noget snavs.

:-)

Af uransagelige årsager valgte servlet specs'enes forfattere at lave GET og POST
transparent med hensyn til måden at hente parametre på.

Du bør kunne kalde request.getReader() først i din JSP side og læse body med
readLine og så parse manualet.

Men overvej et redesign !
Avatar billede kernelx Juniormester
23. november 2007 - 18:27 #2
Hi,

jeg har indtil nu ikke arbejdet meget med java.
jeg kender det fra PHP, at der laves forskel på GET og POST.

en grund til det kan være. at der både bliver sendt POST og GET-værdier, som tilfældigvis har samme variable-navn.
det kunne føre til problemer.
en anden ting, som jeg vil forhindre er, at det er alt for let at manipulere POST-værdierne.

GET bliver mange gange sættet med mod-rewrite med f.eks. en variable "page".
mens det kan være, at POST også sender noget med en variable "page" - som skal lave noget helt andet.
jeg har indtil nu ikke fundet noget lignene til tomcat, så jeg bliver muligvis nød til at opfange alt med en apache-http-server?
Avatar billede arne_v Ekspert
24. november 2007 - 02:02 #3
Som jeg skrev:

Du bør kunne kalde request.getReader() først i din JSP side og læse body med
readLine og så parse manualet.
Avatar billede arne_v Ekspert
24. november 2007 - 06:12 #4
Simpel demo:

<%@ page import="java.io.*" %>
<%
if(request.getMethod().equals("POST")) {
    //out.println("getParameter f1 = " + request.getParameter("f1") + "<br>");
    //out.println("getParameter f2 = " + request.getParameter("f2") + "<br>");
    String qs = request.getQueryString();
    String[] qsparts = qs.split("&");
    for(int i = 0; i < qsparts.length; i++) {
        String[] twoparts = qsparts[i].split("=");
        out.println("getQueryString parse " + twoparts[0] + " = " + twoparts[1] + "<br>");
    }
    BufferedReader br = request.getReader();
    String b = br.readLine();
    String[] bparts = b.split("&");
    for(int i = 0; i < bparts.length; i++) {
        String[] twoparts = bparts[i].split("=");
        out.println("getReader readLine parse " + twoparts[0] + " = " + twoparts[1] + "<br>");
    }
}
%>
<form method="post" action="doubleparams.jsp?f1=123&f2=abc">
f1: <input type="text" name="f1">
<br>
f2: <input type="text" name="f2">
<br>
<input type="submit" value="Test">
</form>
Avatar billede kernelx Juniormester
25. november 2007 - 21:28 #5
mange tak!
husk at skrive et eller andet som svar
Avatar billede kernelx Juniormester
25. november 2007 - 21:29 #6
min tekst skulle selvfølgelig være en kommentar :-)
Avatar billede arne_v Ekspert
25. november 2007 - 23:15 #7
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester