【问题标题】:Can send data but request.getParameter always == null可以发送数据但 request.getParameter 总是 == null
【发布时间】:2015-08-07 00:49:44
【问题描述】:

我的代码来自 java eclipse keplero,我的项目是一个 servlet(服务器),它通过 XMLRequest 与 chrome(客户端)的扩展进行通信。我使用过 GET 和 POST,servlet 可以在 case 之间传递字符串,但 request.getParameter 在每种情况下都是 null。

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>XMLFinal</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>

index.html:

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form method = "get" action = "main">
Data: <input type="text" name="data">
<input type="submit" value = "send">
</form>
</body>
</html>

main.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

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 netscape.javascript.JSObject;

/**
 * Servlet implementation class main
 */
@WebServlet("/main")
public class main extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
public main() {
    super();
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */

//server funziona in invio, il segnale in ricezione non funziona ancora
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


    //guardare file index.html
    System.out.println(request.getParameter("data"));



    response.setContentType("text/plain");
    response.setCharacterEncoding("UTF-8");

    //
    response.getWriter().write("GET");

}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub

    //guardare file index.html
    System.out.println(request.getParameter("data"));



    response.setContentType("text/plain");
    response.setCharacterEncoding("UTF-8");

    //invio segnale funzionante 
    response.getWriter().write("POST2");
}

private void getHeadersInfo() {
    // TODO Auto-generated method stub
}
}

我已经改进了登录页面以创建一个简单的表单并且可以完美运行,但我需要来自 js 客户端的数据:

loadXMLRequest();

function loadXMLRequest()
{
    var xmlhttp;

//da testare su Chrome Firefox Opera IE 7 o superiore
if (window.XMLHttpRequest)
{
    xmlhttp = new XMLHttpRequest();

    //arrivo del segnale
    xmlhttp.open("GET","http://localhost:8080/XMLFinal/main?ciao",true);
    xmlhttp.setRequestHeader("Content-Type","text/plain");
    alert("questi sono  i dati da inviare : ciao"");

    xmlhttp.send();
    alert("Message sent");

    //apertura pagina web risposta giunta ed in elaborazione
    //window.open(xmlhttp.responseText);
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==0)
        {
            alert("request not initialized");
        }

        if (xmlhttp.readyState==1)
        {
            alert("server connection established");
        }

        if (xmlhttp.readyState==2)
        {
            alert("request received");
        }

        if (xmlhttp.readyState==3)
        {
            alert("processing request");
        }

        if (xmlhttp.readyState==4)
        {
            alert("request finished and response is ready");
            alert(xmlhttp.responseText);

            //nessun dato ricevuto possibile shutdown del server
            if(xmlhttp.responseText=="")
            {

            }
            else
            {
                //windows.open(xmlhttp.responseText);
            }
        }

        if (xmlhttp.readyState==200)
        {
            alert("OK");
            alert(xmlhttp.responseText);
        }

        if (xmlhttp.readyState==404)
        {
            alert("Page not found");
        }
    }


}
else
{
    //per IE 6 o inferiore
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

    alert("Microsoft alert");
}

}

【问题讨论】:

  • 为什么它应该返回null以外的任何东西?
  • 不要使用 'main' 作为类名。只会造成混乱。并将您的班级名称大写,再次避免混淆。
  • 我已经在必要的地方更改了代码类名称,但错误仍然存​​在
  • 好的,我已经解决了,我在 send(data) 和 url+"?"+data 中添加了字符串

标签: java xml servlets


【解决方案1】:

名字是关键

你的代码说

System.out.println(request.getParameter("http"));

你的表格说

<input type="text" name="data">

将第一个改为

System.out.println(request.getParameter("data"));

第二个到

<input type="text" name="http">

【讨论】:

  • 我已经在之前的文本中使用过数据,但是它们没有工作返回 null 与客户端并从表单返回正确的名称
【解决方案2】:

您正在拨打 Get 电话,即,

xmlhttp.open("GET","http://localhost:8080/XMLFinal/main?ciao",true);

所以从servlet它会调用doGet(-,-)方法,但是在doGet(-,-)方法下你已经写了

System.out.println(request.getParameter("http"));

应该像

这样替换
System.out.println(request.getParameter("data"));

你用doPost(-,-)方法写的正确。

但我总是不喜欢编写多余的代码。在doGet()doPost() 中,您可以使用通用方法编写代码并从两个do*** 方法调用相同的方法。即,

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

希望对你有帮助。

【讨论】:

  • 我在以前的文本数据中使用过我在 doPost 中的制作方式,但它们从 xmlRequest 返回 null 并从表单返回正确的字符串
  • 如果你想在 doPost() 方法中创建它,那么像下面的 xmlhttp.open("POST","http://localhost:8080/XMLFinal/main?ciao",true); 那样更改你的 Java 脚本代码
猜你喜欢
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 2015-12-22
  • 2011-05-28
  • 1970-01-01
  • 2020-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多