tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
0
ZUGRIFFE
442
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    du-it du-it ist offline Rookie
    Registriert seit
    Aug 2004
    Ort
    Berlin
    Beiträge
    6
    Hallo.

    Ich möchte gerne eine Datei zu einem Servlet mittels Formular method="POST" und action="TestServlet" hochladen. Diese Datei soll dann in doPost(...) validiert werden, was einige Zeit in Anspruch nehmen kann.
    Deshalb dachte ich daran, dass VOR der tatsächlichen Übermittlung an das Servlet ein JavaScript ausgeführt wird, dass ein XmlHttpRequest Objekt erzeugt, dass mit open("GET", "TestServlet", true) immer wieder den Status abfragt und (statt eines Progressbars) die bislang ermittelten Fehler in der JSP anzeigt. URL für POST und GET sind jeweils das selbe Servlet.

    Code :
    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
    
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <script type="text/javascript">
        //<!--
        var xhrInterval = false;
        var xhrTimeout  = false;
        function submitForm()
        {
            var xhr = false;
            try {  xhr = new ActiveXObject('Msxml2.XMLHTTP');   }
            catch (e) 
            {
                try {   xhr = new ActiveXObject('Microsoft.XMLHTTP');    }
                catch (e2) 
                {
                  try {  xhr = new XMLHttpRequest();     }
                  catch (e3) {  xhr = false;   }
                }
             }
            xhr.onreadystatechange  = function()
            {
                if (xhr.readyState == 4) {
                    if (xhr.status == 200) {
                        alert("Fertig!");
                        var errs = xhr.responseXml.getElementsByTagName("ERRORS")[0];
                        document.ajax.dyn.value = "Received:" + errs;
                    } else {
                        document.ajax.dyn = "Error code " + xhr.status;
                    }
                    clearInterval(xhrInterval);
                    //clearTimeout(xhrTimeout);
                }
            };
     
            xhr.open("GET", "TestServlet", true);
            xhr.send("null");
        }
        
        function go() {
            submitForm();
            xhrInterval = setInterval("submitForm();", 1000);
        }
        //-->
    </script>
        <title>Insert title here</title>
    </head>
    <body>
        <form method="post" name="ajax" action="TestServlet">
             <INPUT type="button" value="Click" onclick="go();" /> 
             <!-- <INPUT type="button" value="Click" onclick="submitForm(); return false;" /> -->
             <INPUT type="text" name="dyn" value="" />
             <INPUT type="submit" value="Submit" onclick="submitForm(); return true;" /> 
        </form>
        
    </body>
    </html>

    Hier noch das minimalistische Servlet, das zunächst nur auf der Konsole ausgeben soll, welche der Methoden doPost(...) oder doGet(...) aufgerufen wurde:

    Code :
    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
    
    public class TestServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public TestServlet() {
            super();
            // TODO Auto-generated constructor stub
        }
     
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("Say Hello GET.");
            String sent = request.getParameter("sent");
            System.out.println(sent); 
    //      PrintWriter out = response.getWriter();
    //      response.setContentType("text/xml");
    //      HttpSession session = request.getSession();
    //      Integer errCount = (Integer)session.getAttribute("ERRORS");
    //      errCount = new Integer(5);
    //      session.setAttribute("ERRORS", new Integer(-1));
    //      StringBuffer buffy = new StringBuffer("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n");
    //      buffy.append("<response>");
    //      buffy.append("<errors>");
    //      buffy.append(errCount);
    //      buffy.append("</errors>");
    //      buffy.append("</response>\n");
    //      if(out != null) {
    //          out.println(buffy.toString());
    //          out.flush(); 
    //          out.close();
    //      }
        }
     
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("Say Hello POST.");
            String sent = request.getParameter("sent");
            System.out.println(sent); 
            HttpSession session = request.getSession();
            int errs = 123;
            session.removeAttribute("ERRORS");
            session.setAttribute("ERRORS", new Integer(errs));
            System.out.println(session.getAttribute("ERRORS") + " Fehler in Session gespeichert. Attributname: ERRORS");
        }
     
    }

    TestServlet.doPost(...) wird aufgerufen, TestServlet.doGet(...) aber leider nicht. Jedenfalls erfolgen die Konsolenausgaben nicht. Weshalb nicht?

    Vielen Dank.
    Geändert von du-it (23.03.11 um 13:20 Uhr)
     

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 06.07.06, 12:08
  2. Automatisch Daten über POST übermitteln
    Von Kane_Kowalski im Forum PHP
    Antworten: 1
    Letzter Beitrag: 13.12.05, 15:06
  3. Antworten: 4
    Letzter Beitrag: 06.08.05, 05:24
  4. Parameter in der URL als POST ohne Form-Tag
    Von ExtremeSnail im Forum PHP
    Antworten: 7
    Letzter Beitrag: 12.01.05, 13:00
  5. form method post und get
    Von Flo[H] im Forum PHP
    Antworten: 1
    Letzter Beitrag: 27.11.02, 18:00

Stichworte