Strut2判断是否是AJAX调用

前端之家收集整理的这篇文章主要介绍了Strut2判断是否是AJAX调用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Strut2判断是否是AJAX调用

分类:@L_403_1@StrutsJ2EE 176人阅读 评论(0) 收藏 举报

目录(?)[+]


1.AJAX与传统Form表单

实际上,两者一般都是通过HTTP的POST请求。区别是浏览器提交Form表单后,期望服务器返回一个完整的HTML页面。而AJAX调用是由XMLHttpRequest对象(不同浏览器可能不一样)发出,浏览器期望服务器返回HTML片段即可,具体是JSON、XML等都没有要求。返回到浏览器后如何使用,也是由JS脚本自己决定的。

2. 请求是不是AJAX

那么对于服务器端,如何判断一个HTTP请求是不是AJAX调用?这需要看HTTP的Header。

我们可以通过Header中的x-request-with来判断。尽管不同浏览器发送AJAX请求的对象不同,但是如果使用jQuery发送AJAX请求的话,jQuery内部实现ajax的时候,已经加入了标识。jQuery源码中是这样的:xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");

所以,如果项目的前台页面都是通过jQuery发送AJAX请求的话,这样判断是安全的。

下面是HTTP请求携带的Header信息。

普通Form表单提交

===MimeHeaders ===

accept = */*

referer =http://localhost:8080/user2/toQueryPage.action

accept-language = zh-CN

user-agent = Mozilla/4.0 (compatible; MSIE8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C;.NET4.0E)

accept-encoding = gzip,deflate

host = localhost:8080

connection = Keep-Alive

cache-control = no-cache

AJAX调用(IE)

===MimeHeaders ===

x-requested-with = XMLHttpRequest

accept-language = zh-cn

referer =http://localhost:8080/user2/toQueryPage.action

accept = application/json,text/javascript,*/*; q=0.01

content-type =application/x-www-form-urlencoded

accept-encoding = gzip,deflate

user-agent = Mozilla/4.0 (compatible; MSIE8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C;.NET4.0E)

host = localhost:8080

content-length = 57

connection = Keep-Alive

cache-control = no-cache

3.在Action中获得HTTP请求头

在Action类中,通过ServletRequestAware接口获得HttpServletRequest对象,再通过getHeader方法得到我们想要的头信息。

[java] view plain copy
  1. publicabstractclassBaseAction
  2. <ParamVoextendsBaseParamVo,ResultVoextendsBaseResultVo>
  3. extendsActionSupport
  4. implementsServletRequestAware{
  5. privatestaticfinalStringAJAX_RESULT_NAME="ajaxResult";
  6. finalStringXHR_OBJECT_NAME="XMLHttpRequest";
  7. finalStringHEADER_REQUEST_WITH="x-requested-with";
  8. /**
  9. *Request对象,用来判断请求是否是AJAX调用
  10. */
  11. privateHttpServletRequestrequest;
  12. privateParamVoparamVo;
  13. privateResultVoresultVo;
  14. @Override
  15. publicStringexecute(){
  16. StringresultPage=SUCCESS;
  17. try{
  18. resultVo=doExecute(paramVo);
  19. }
  20. catch(BaseExceptione){
  21. resultPage=ERROR;
  22. }
  23. if(XHR_OBJECT_NAME.equals(request.getHeader(HEADER_REQUEST_WITH))){
  24. resultPage=AJAX_RESULT_NAME;
  25. returnresultPage;
  26. }

猜你在找的Ajax相关文章