在写后台程序时,有时候需要知道客户端发送的是普通的请求,还是ajax 请求,至少在我目前所做的项目中有这样一个用途:如果session 过期的时候,如果是普通请求,跳转到登录页面,但如果是ajax 请求,如果后台session 已经过期了,这时候会返回登陆界面的的html 代码作为ajax 的返回值,这样就很郁闷,不好处理,如果是ajax 请求,理想的方式是返回json给客户端,这样客户端就好处理. 目前我采用了比较笨的一个方法来实现,可以在 请求的参数中加入一个标志来判断.public class SessionIntecepter implements HandlerInterceptor {

private Logger logger = LoggerFactory.getLogger(SessionIntecepter.class);

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws InvalidSessionException, InvalidSessionJsonException {

request.setAttribute("startTime", System.currentTimeMillis());

logger.info("current url: " + request.getRequestURI());

boolean result=false;

boolean ajax = "XMLHttpRequest".equals( request.getHeader("X-Requested-With") );

String ajaxFlag = null == request.getParameter("ajax") ? "false": request.getParameter("ajax") ;

boolean isAjax = ajax || ajaxFlag.equalsIgnoreCase("true");

HttpSession session = request.getSession();

result = null == session.getAttribute("user") ? false : true ;

if (!result){

if (isAjax){

throw new InvalidSessionJsonException("invalide session");

}else{

throw new InvalidSessionException("invalide session");

}

}

return result;

}

......

这里由于我是采用了spring mvc 的方式所以用了intecepter 方式来做,然后抛出异常,交给controller 去处理,controller 根据不同的异常,做不同的处理.

@ExceptionHandler(InvalidSessionException.class )

public ModelAndView sessionExceptionHandle(HttpServletRequest request, Exception ex) {

logger.error("500 Exception - " + ex.getMessage());

ModelAndView mv = new ModelAndView("error");

mv.addObject("message", "invalide session");

return mv;

}

/**

* return json format string for ajax request if error occurs.

* @param request

* @param ex

* @return

*/

@ExceptionHandler(InvalidSessionJsonException.class )

@ResponseBody

public JsonResult sessionJsonExceptionHandle(HttpServletRequest request, Exception ex) {

JsonResult jr =new JsonResult();

jr.setErrorCode(Constants.SESSION_TIMEOUT);

jr.setErrorMessage(ex.getMessage());

return jr;

}

这样就可以做到灵活应用了,另外一般来说,如果采用了 jquery 发送 ajax 请求,应该在http header 中,应该能有如下的语句成立: "XMLHttpRequest".equals( request.getHeader("X-Requested-With") );

java判断ajax请求_判断Httprequest 是否ajax 请求的方法相关推荐

  1. java 以什么开头_判断字符串以什么开头

    Java 判断字符串是否以什么开头 可以使用 startsWith() 判断,例如: String str = "Hello World.";// 判断是否以 Hello 开始Sy ...

  2. java判断颜色合法_判断颜色是否合法的正则表达式(详解)

    判断颜色是否合法的正则表达式(详解) "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$"; 意思是:以#开头,后面是数字和a-f的字符(大写或小写),这个值是 ...

  3. java list 为空_判断List集合为空或null

    判断List集合是否为空 Java中,判断List集合是否为空与是否为null并不相同 新建List对象,默认是为空,即没有数据,而不是null 如: List list = new ArrayLis ...

  4. java数据类型指定长度_判断(2分) Java的各种数据类型占用固定长度,与具体的软硬件平台环境无关...

    参考答案如下 判断多选(3分) 下列有关我国公平责任的源流以及背景的说法正确的是 各定长度单选(2分) Which word stands for "pessimistic"?( ...

  5. java判断浏览器类型_判断浏览器类型

    一.判断是否为IE 以前判断是否IE浏览器用的是window.navigator.userAgent,跟踪这个信息,发现在开发环境,识别为IE10,但访问服务器则识别为IE11,但IE11的userA ...

  6. 用java判断三角形类型_判断三角形类型

    假期无聊,继续九度OJ刷题,每天几道题,强制编程人啊! 三角形判断的方法: 直角三角形:勾股定理 锐角和钝角三角形:余玄定理 题目描述:给定三角形的三条边,a,b,c.判断该三角形类型. 输入:测试数 ...

  7. java 判断基本数据类型_判断(1分) Java语言中的数组元素只能是基本数据类型而不能为对象类型。...

    参考答案如下 判断I'm going to call ___ one of my former classmates 语言元素Imagin - No Carhops - No Waitresses - ...

  8. java 第几天_判断这一天是这一年的第几天? 的三种方法! Java

    程序分析: 以3月5日为例,应该先把前两个月的加起来,然后再加.上5天即本年的第 几天. 特殊情况:闰年且输入月份大于3时需考虑多加一天. 闰年的条件: year除以400能整除,或者year除以4能 ...

  9. java获取ie11版本号_判断IE浏览器的版本号

    function IEVersion() { var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串 var isIE = userAgen ...

最新文章

  1. web进修之—Hibernate 继承映射(5)
  2. BLE 包结构及传输速率
  3. 蚂蚁金服支付平台代码配置
  4. 部署WSE3.0实战:性能、证书与WSE910错误
  5. 小甲鱼 OllyDbg 教程系列 (十三) : 把代码和变量注入程序 以及 硬件断点
  6. typescript索引类型_typescript入门:高级类型
  7. 使用Material Design的Flutter应用
  8. 英语总结系列(十九):七月英语Baby成长史
  9. android p官方铃声,Android 铃声播放
  10. 运算放大电路_电工CChap03 集成运算放大电路与应用
  11. matlab竞赛论文模板,美赛数学建模比赛论文模板.doc
  12. linux基础(二)——linux各文件夹含义和作用
  13. CMM3学习笔记--常用专业术语
  14. 选择正规的资质好的期货公司开户
  15. 怎么取消工作组计算机,windows10系统如何退出workgroup工作组 windows10系统退出workgroup工作组的操作方法...
  16. (旧)子数涵数·PS——冷色调与LOMO
  17. “学习金字塔”的真与假
  18. 【JavaWeb】Request对象详解
  19. 使用Socket实现类似微信群聊的功能
  20. C++程序设计课程中的团队建设

热门文章

  1. CTF-Misc-CRC32碰撞脚本 (二)
  2. windows编写linux脚本,Windows PowerShell:共享您的脚本 - 在脚本中编写 Cmdlet | Microsoft Docs...
  3. Python3基础教程:元类详解
  4. Python3基础教程:可变参数和关键字参数
  5. python调用其他文件中的函数或者类
  6. python 查询文本文件的层次
  7. Python超详细的字符串用法大全
  8. java怎么解决页面乱码问题_java页面中文乱码的解决办法
  9. pytorch 1.9.0 backward函数解释以及报错(RuntimeError: grad can be implicitly created only for scalar outputs)
  10. python pandas中关于DataFrame行,列显示不完全(省略)的解决办法