2015-09-10 20 views
1

我有一個servlet與doGet()doPost()函數。當我在的doPost()使用的getParameter()它可以完美運行,但是當我使用的getParameter()的doGet()不能得到參數...它說,他們是空。這些是我的代碼。Java doPost()在使用getParameter()時工作,但doGet()總是拋出null ...爲什麼?

HTML(的index.html):

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="ISO-8859-1"> 
    <title>JAVA-AJAX Test</title> 
    <script type="text/javascript" src="ajaxfunctions.js"></script> 
</head> 
<body> 
    <h1>Enviar POST mediante AJAX</h1> 
    <input type="text" id="username" name="username" value="Puma" /> 
    <input type="password" id="password" name="password" value="Bernal" /> 
    <input type="button" id="sendpost" name="sendpost" value="Send POST" /> 
    <hr/> 
    <h1>Enviar GET mediante AJAX</h1> 
    <input type="text" id="firstname" name="firstname" value="Jose" /> 
    <input type="text" id="lastname" name="lastname" value="Bernal" /> 
    <input type="button" id="sendget" name="sendget" value="Send GET" /> 
</body> 

的JavaScript(ajaxfunctions.js):

window.onload = function() 
{ 
    xhr = new XMLHttpRequest(); 

    //*************************************POST FUNCTIONS************************************************ 

    var sendpost = document.getElementById("sendpost"); 

    sendpost.onclick = function() 
    { 
     var username = document.getElementById("username"); 
     var password = document.getElementById("password"); 

     if (username.value == "" || password.value == "") 
      alert("Debe ingresar el usuario y la contraseña!"); 
     else 
      enviarDatosPost(username, password); 
    } 

    function enviarDatosPost(username, password) 
    { 
     xhr.onreadystatechange = prepararRespuestaPost; 
     xhr.open("POST", "Messages", true); 
     var datosPost = crearDatosPost(username, password); 
     xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
     alert("POST: " + datosPost); 
     xhr.send(datosPost); 
    } 

    function crearDatosPost(username, password) 
    { 
     var datosPost = "username="+username.value+"&password="+password.value; 
     return datosPost; 
    } 

    function prepararRespuestaPost() 
    { 
     if (xhr.readyState == 4) 
     { 
      if (xhr.status == 200) 
      { 
       alert("XHR responseText: " + xhr.responseText + "\nXHR statusText: " + xhr.statusText); 
      } 
     } 
    } 

    //*************************************GET FUNCTIONS************************************************ 

    var sendget = document.getElementById("sendget"); 

    sendget.onclick = function() 
    { 
     var firstname = document.getElementById("firstname"); 
     var lastname = document.getElementById("lastname"); 

     if (firstname.value == "" || lastname.value == "") 
      alert("Debe ingresar el nombre y el apellido!"); 
     else 
      enviarDatosGet(firstname, lastname); 
    } 

    function enviarDatosGet(firstname, lastname) 
    { 
     xhr.onreadystatechange = prepararRespuestaGet; 
     xhr.open("GET", "Messages", true); 
     var datosGet = crearDatosGet(firstname, lastname); 
     xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
     alert("GET: " + datosGet); 
     xhr.send(datosGet); 
    } 

    function crearDatosGet(firstname, lastname) 
    { 
     var datosGet = "firstname="+firstname.value+"&lastname="+lastname.value; 
     return datosGet; 
    } 

    function prepararRespuestaGet() 
    { 
     if (xhr.readyState == 4) 
     { 
      if (xhr.status == 200) 
      { 
       alert("XHR responseText: " + xhr.responseText + "\nXHR statusText: " + xhr.statusText); 
      } 
     } 
    } 
} 

的Java(Messages.java):

package com.puma.servlets; 

import java.io.IOException; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import java.io.*; 
/** 
* Servlet implementation class Messages 
*/ 
@WebServlet(asyncSupported = true, urlPatterns = { "/Messages" }) 
public class Messages extends HttpServlet 
{ 
    private static final long serialVersionUID = 1L; 

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public Messages() 
    { 
     super(); 
    } 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    { 
     String responseData = ""; 
     String firstname = request.getParameter("firstname"); 
     String lastname = request.getParameter("lastname"); 
     System.out.println("DATOS - First Name: " + firstname + "/Last name: " + lastname); 
     if (firstname.equals("Jose") && lastname.equals("Bernal")) 
      responseData = "USUARIO CONOCIDO - Name : " + firstname + "/Last name: " + lastname; 
     else 
      responseData = "USUARIO DESCONOCIDO - Name: " + firstname + "/Last name: " + lastname; 

     System.out.println(responseData); 

     OutputStream stream = response.getOutputStream(); 
     OutputStreamWriter writer = new OutputStreamWriter(stream, "UTF-8"); 
     response.setCharacterEncoding("UTF-8"); 
     response.setContentType("text/plain"); 
     writer.write(responseData); 
     writer.flush(); 
    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    { 
     String responseData = ""; 
     String user = request.getParameter("username"); 
     String pass = request.getParameter("password"); 
     if (user.equals("Puma") && pass.equals("Bernal")) 
      responseData = "DATOS CORRECTOS - Username : " + user + "/Password: " + pass; 
     else 
      responseData = "DATOS INCORRECTOS - Username: " + user + "/Password: " + pass; 

     System.out.println(responseData); 

     OutputStream stream = response.getOutputStream(); 
     OutputStreamWriter writer = new OutputStreamWriter(stream, "UTF-8"); 
     response.setCharacterEncoding("UTF-8"); 
     response.setContentType("text/plain"); 
     writer.write(responseData); 
     writer.flush(); 
    } 
} 

如果你看,POST和GET的結構完全一樣。 POST完美工作,但GET不。難道我做錯了什麼?提前致謝!

回答

0

POST通過在請求正文中發送參數來工作。 GET可以處理URL中編碼的參數。因此,對於GET部分,您需要將變量追加到URL中,如下所示:myurl?paramname = paramvalue & paramname2 = paramvalue3

不要忘記在將參數附加到URL之前對它們進行編碼。

+0

非常感謝朋友! – Puma

+0

不要忘記你可以接受答案,如果它回答你的問題。 – benohead

+0

好的,謝謝!我是新來的stackoverflow,但我認爲它做到了! – Puma

相關問題