[英]java jersey servlet hits filter but then stops
我有一個未連接的jersey servlet。 當我使用調試器進行跟蹤時,可以看到調用了Servlet的過濾器(處理請求標頭),但是此后我丟失了跟蹤,並且Servlet本身(uploadFolder)從未受到攻擊。
HTML
<form id="uploadForm" method="post" enctype="multipart/form-data">
<p>Upload project folder:
<input type="file" id="files" name="files" multiple webkitdirectory /></p>
JS
$('#uploadForm').submit(function(e) {
var fd = new FormData($('#uploadForm')[0]);
var url = [my local machine]/GProject/uploadFolder;
var cookieVal = RemoteJSvar.userId;
var auth = ['Super_Complex_Auth', cookieVal];
var request = new XMLHttpRequest();
request.open("POST", url);
request.setRequestHeader('Authorization',auth);
request.onreadystatechange = function() {
if(request.readyState == 4) {
alert(request.responseText);
}
}
request.send(fd);
});
Java的
@POST @Path("uploadFolder")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.MULTIPART_FORM_DATA)
public String uploadFolder(FormDataMultiPart multiPart)
{
boolean retVal = projects.uploadFolder(multiPart); //**This never gets hit**
return "{\"retVal\" : " + String.valueOf(retVal) + "}";
}
我可以跟蹤篩選器,它似乎可以正常工作。 不會過早退出或中止請求。 那么它在過濾器之后又去了哪里呢? alert(request.responseText)框顯示“此頁面顯示:”,其中沒有任何內容。
我還嘗試過使用jquery.ajax發送請求,如下所示:
return jQuery.ajax({
type: 'POST',
url: url,
data: fd,
enctype: 'multipart/form-data',
processData: false,
contentType: 'multipart/form-data',
headers : {
Authorization: auth
},
error: function(xhr){
alert("An error occured: status=" +xhr.status + ", statusText=" +xhr.statusText);
},
success: function(data) {
alert("success!: "+data);
}
});
有趣的是,當調試器仍在過濾器中時,錯誤警報會彈出。 我沒想到這一點。 輸出:status = 0,statusText =“”。
有任何建議嗎?
修復的線索是狀態= 0。 谷歌搜索我發現onSubmit存在問題。 因此,我改為將其更改為按鈕單擊。 這是新的
HTML
<form id="uploadForm" method="post" enctype="multipart/form-data">
<label>Choose folder to upload: </label>
<input type="file" id="files" name="files" multiple webkitdirectory class="k-button"/>
<p style="margin:0;margin-top:3px"></p>
<input type="button" id="uploadButton" value="Upload Folder" class="k-button" disabled/>
</form>
修復了狀態錯誤,但是之后又出現了另一個錯誤(我忘了)。 解決方法是還更改Javascript。
JS
$('#uploadButton').click(function() {
var file = document.getElementById('files');
for (var i = 0, f; f = file.files[i]; ++i) {
console.log(f.webkitRelativePath);
}
var fd = new FormData($('#uploadForm')[0]);
var url = [my local machine]/GProject/uploadFolder;
var cookieVal = RemoteJSvar.userId;
var auth = ['Super_Complex_Auth', cookieVal];
var request = new XMLHttpRequest();
request.open("POST", url);
request.setRequestHeader('Authorization',auth);
request.onreadystatechange = function() {//Call a function when the state changes.
if(request.readyState == 4) {
console.log("responseText=" +request.responseText +", status="+request.status +", statusText="+request.statusText);
}
}
request.send(fd);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.