您应该检查请求标头X-Requested-With是否存在并且等于
XMLHttpRequest.
请注意,并非所有AJAX请求都有此标头,例如Struts2 Dojo请求不发送它;如果您使用Struts2-jQuery(或任何其他新的AJAX框架)生成AJAX调用,它就在那里.
您可以使用Firebug的Net模块检查它是否存在…例如,当您对Stack Overflow投票时;)
要从Struts2 Action中检查它,您需要实现ServletRequestAware接口,然后获取Request并检查特定标头是否存在,如下所示:
public class MyAction extends ActionSupport implements ServletRequestAware {
private HttpServletRequest request;
public void setRequest(HttpServletRequest request) {
this.request = request;
}
public HttpServletRequest getRequest() {
return this.request;
}
public String execute() throws Exception{
boolean ajax = "XMLHttpRequest".equals(
getRequest().getHeader("X-Requested-With"));
if (ajax)
log.debug("This is an AJAX request");
else
log.debug("This is an ordinary request");
return SUCCESS;
}
}
请注意,您也可以通过ActionContext获取请求,而无需实现ServletRequestAware接口,但这不是推荐的方式:
HttpServletRequest request = ServletActionContext.getRequest();