gpt4 book ai didi

Java 小服务程序 : Best Way to Determine if request is AJAX

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:36:03 26 4
gpt4 key购买 nike

确定进入 java servlet 的 GET 或 POST 请求是否为 AJAX 请求的最佳方法是什么?到目前为止,我在搜索中遇到的方法是使用

从标题中删除信息
"XMLHttpRequest".equals(request.getHeader("X-Requested-With"));

还有其他方法可以解决这个问题吗?似乎依赖 header 并不是一个非常可靠的解决方案。

最佳答案

以下 HTML 文档使用 jQuery.post() 方法向 Servlet 发送异步 AJAX 请求:

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>click demo</title>
<style>
body {font-family: verdana;margin:20px; font-size: 14px;}
div.container {border: 1px solid black;
background-color: #f0ffff;padding:10px;width:460px;
}
p.result {color:red;font-weight:bold;}
h3 {color:blue;}
</style>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>
<script>
$(document).ready(function() {
$("#myAsyncBtn").click(function() {
$.post(
"async",
function( data ) {
$(".result").html(data);
}
);
});
});
</script>
<body>
<div class="container">
<h3>Ajax Request Detection using Java</h3>
<p>Click this button to make a Asynchronous Request
<button id="myAsyncBtn"> Click Here</button>
</p>
<p>Now click a Link to make a synchronous request
<a href="async">Sync Call</a>
</p>
<p class="result"></p>
</div>
</body>
</html>

需要处理两种类型请求的 Controller 可以使用request.getHeader() 方法来检测请求类型。开发者可以使用 x-requested-with 头参数来获取请求类型。在 Ajax 请求的情况下,request.getHeader('x-requested-with') 将返回 XMLHttpRequest 作为字符串,否则返回 null

package org.techzoo.async;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/async")
public class AsyncServlet extends HttpServlet {

public AsyncServlet() {
super();
}

@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {

String headerName = request.getHeader("x-requested-with");

if(null == headerName){
PrintWriter out = response.getWriter();
String html = "<h3>Clinet send a Synchronous request</h3>" +
"<p><a href=\"index.jsp\">Go Back</a> to main page</p>";
out.write(html);
}
else {
ServletOutputStream out = response.getOutputStream();
out.print("Ajax Request Detected");
out.flush();
}
}

}

关于Java 小服务程序 : Best Way to Determine if request is AJAX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25927079/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com