我一直在開發一個反應應用程式。在這個應用程式中,我會將用戶的輸入發送到 tomcat 服務器上的 Java servlet 以對其進行排序。排序后,我試圖在我的反應應用程式的標簽上顯示它。我已經使用 fetch method() 成功地將它發送到 java servlet 并對其進行了排序。
這就是我的 fetch() 方法的樣子:
const [text, setText] = useState("");
async function onSubmit() {
var newText = { text: text}; //object
await fetch(`http://localhost:8080/backend/link`, {
method: "POST",
headers: {
"Content-Type": "application/json",
"Access-Control-Allow-Origin" : "*",
"Access-Control-Allow-Credentials" : true,
"status" : 200
},
body: JSON.stringify(newText),
mode: 'no-cors',
})
.then((response) => {
console.log("response");
console.log(response.body); //displays null
})
.then((data) => {
console.log(data);
console.log("Success");
});
}
我的 Java servlet 如下所示:
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException
{
System.out.println("invoked");
String jsonBody = new BufferedReader(new InputStreamReader(request.getInputStream())).lines().collect(
Collectors.joining("\n"));
System.out.println(jsonBody);
if (jsonBody == null || jsonBody.trim().length() == 0) {
return;
}
JSONObject jObj;
try {
jObj = new JSONObject(jsonBody);
String lines[] = ((String) jObj.get("text")).split(","); //The words in the input are separated by comma
Arrays.sort(lines);
for (String a : lines)
System.out.println(a);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
} catch (JSONException e) {
System.out.print("Exception");
}
}
無論我在回應物件中發送什么(使用 Printwriter),獲取的回應的正文都是空的。如何發送陣列,以便可以在 fetch 的回應物件中獲取它,然后將其顯示在標簽中?
請留下您的建議
uj5u.com熱心網友回復:
我看不到您在 servlet 回應中寫正文的位置。
也許你需要這樣的東西:
final PrintWriter writer = response.getWriter();
for (String a : lines)
writer.println(a);
注意:您的客戶端期望回傳一個 JSON 物件,因此您可能希望將 jObj 寫入輸出而不是文本行。
使用 google chrome debug
uj5u.com熱心網友回復:
從您的代碼中不清楚您是如何使用 PrintWriter 的。您可以嘗試以下方法,然后檢查回應:
String message = new ArrayList<String>();
PrintWriter writer = response.getWriter();
JSONObject obj = new JSONObject();
obj.put("message",message);
response.setStatus(200);
writer.append(obj.toString());
writer.close();
在 JSON 物件上放置一條字串訊息,以檢查是否沒有傳遞任何內容或只有回應沒有傳遞。呼叫“ response.message ”在客戶端獲取訊息。
uj5u.com熱心網友回復:
const [text, setText] = useState("");
async function onSubmit() {
var newText = { text: text}; //Create a json object here and pass it to body
await fetch(`http://localhost:8080/backend/link`, {
method: "POST",
headers: {
"Content-Type": "application/json",
"Access-Control-Allow-Origin" : "*",
"Access-Control-Allow-Credentials" : true,
"status" : 200
},
body: newText, //do not need to use any json stringfy method
mode: 'no-cors',
})
.then((response) => {
console.log("response");
console.log(response.body); //displays null
})
.then((data) => {
console.log(data);
console.log("Success");
});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/407931.html
標籤:
