Java 向Servlet发出AJAX POST请求失败
从客户端代码中,我正在对servlet进行AJAX调用。如果我使用GET作为请求方法。一切正常,我得到了回复。但当我以POST的形式发送请求时,servlet无法发送响应。从日志中我发现,当使用POST调用ajax时,servlet中的“request”对象为null。根据这篇文章: ,我正在为同源策略设置标题 以下是我的代码供参考:Java 向Servlet发出AJAX POST请求失败,java,ajax,servlets,post,Java,Ajax,Servlets,Post,从客户端代码中,我正在对servlet进行AJAX调用。如果我使用GET作为请求方法。一切正常,我得到了回复。但当我以POST的形式发送请求时,servlet无法发送响应。从日志中我发现,当使用POST调用ajax时,servlet中的“request”对象为null。根据这篇文章: ,我正在为同源策略设置标题 以下是我的代码供参考: function aimslc_ajaxCall(url,callback, postParams){ var xmlhttp = null if (wi
function aimslc_ajaxCall(url,callback, postParams){
var xmlhttp = null
if (window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();
}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
eval( callback+"("+xmlhttp.responseText+")" );
}
}
if(postParams!=null && typeof postParams!="undefined" ){
xmlhttp.open("POST",url,true);
xmlhttp.send(postParams);
}else{
xmlhttp.open("GET",url,true);
xmlhttp.send();
}
}
Servlet代码:
public void doProcess (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
logger.info("doProcess::start..."+request.getQueryString());
response.setHeader("P3P","CP='NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM'");
response.setHeader("Access-Control-Allow-Origin","*");
response.setHeader("Access-Control-Allow-Credentials","true");
response.setHeader("Access-Control-Allow-Methods","POST, GET");
}
在请求时引发null异常。getQueryString()如果执行post,则所有数据都在请求正文中,而不是url上。从中可以看出,
getQueryString
只获取url上的内容
有关如何获取请求正文的信息,请参见
此外,如果您的数据是名称/值对,则可能需要使用和关联的方法
如果请求为null,我会问您是否在servlet上实现
doPost
?检查ajax中的If语句,它似乎总是在没有任何负载的情况下执行xmlhttp.send()。尝试发出警报以检查每次选择的条件选项。实际上,如果没有参数,我会使用GET方法发出请求。编辑代码使其更清晰这是有意义的。我有doPost()。下面是同一个问题——“request.getAttribute()”和“request.getParameter()”之间有什么区别。在我使用的servlet中,request.getAttribute()用于检索请求参数。这似乎适用于GET,但不适用于POST。getParameter用于获取from key=val的参数。GET属性获取请求属性,这些属性不同。您想使用getParameter和关联的methods@indusBull:HttpServletRequest具有getParameter()
和getAttribute()
方法。您认为它返回请求参数的是哪一个?试着逻辑地思考…@BalusC在问这个问题之前,我的逻辑结论是getParameter()。但是我正在访问的servlet(由某个经验丰富的人编写)有getAttributes()方法。这让我很困惑。它只是用来获取请求属性。不是参数。