Javascript 如何向XMLHttpRequest添加请求参数

Javascript 如何向XMLHttpRequest添加请求参数,javascript,forms,servlets,xmlhttprequest,Javascript,Forms,Servlets,Xmlhttprequest,我有一个文件(data),我使用XMLHtppRequestJS对象将其发送到servlet。我对此没有问题。我通过servlet中的request.getInputStream()接收它,解析它并完美地获得文件。当我还必须发送/接收文件名时,问题就会出现。我试图将该文件名放入中,并在javascript中调用submit()方法发送它。关键是我不能使用request.getParameter(“fileName”)(它总是空的),我不知道我是否做错了什么,或者我不能让submit()加上XML

我有一个文件(
data
),我使用
XMLHtppRequest
JS对象将其发送到servlet。我对此没有问题。我通过servlet中的
request.getInputStream()
接收它,解析它并完美地获得文件。当我还必须发送/接收文件名时,问题就会出现。我试图将该文件名放入
中,并在javascript中调用
submit()
方法发送它。关键是我不能使用
request.getParameter(“fileName”)(它总是空的),我不知道我是否做错了什么,或者我不能让
submit()
加上
XMLHtmlRequest.send()
(两篇文章)

Javascript:

function save(data){

    var loadedFilename = "exampleFileName";
    var xhr = new XMLHttpRequest();
    var base64data = (new core.Base64()).convertUTF8ArrayToBase64(data);

    xhr.open("POST", "ServletUpload", true);
    xhr.send(base64data);

    document.getElementById("fileName").value = loadedFilename;
    document.forms["formExample"].submit();
}
Servlet doPost方法:

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

    String fileName = request.getParameter("fileName");

    byte[] content = Base64.decodeBase64(IOUtils.toByteArray(request.getInputStream()));

    ByteArrayInputStream input = new ByteArrayInputStream(content);

    FileOutputStream file = new FileOutputStream("/home/user/Documents/workspace/tests/editingTests.odt");
    IOUtils.copy(input, file);

    input.close();
    file.close();
}
HTML格式:

<form method="POST" name="formExample" action="ServletUpload">
    <input type="hidden" name="fileName" id="fileName" />
</form>


由于表单的Method属性设置为“POST”,您将不会在服务器端获得名为fileName的请求“parameter”(参数附加到URL中)。请改为尝试
request.getAttribute()
。@ringbearer,不幸的是,这不起作用,它仍然为空。不管怎样,我已经将before getParameter()与POST方法一起使用,没有任何问题。看到这个了吗
function save(data){

    var loadedFilename = "exampleFileName";
    var xhr = new XMLHttpRequest();
    var base64data = (new core.Base64()).convertUTF8ArrayToBase64(data);

    //changing this line should fix the problem 
    xhr.open("POST", "ServletUpload"+"?fileName="+loadedFilename , true);
    xhr.send(base64data);

    //following two lines are not needed 
    //document.getElementById("fileName").value = loadedFilename;
    //document.forms["formExample"].submit();
}