系统中的许多异常信息,很多都是需要提示给用户的,通过一个错误界面显示出来,我采用的方法即是捕获到异常后,forward到一个错误页面,一般情况下这是没有问题的。
但是如果是用js发起的ajax请求,出现异常后也forward到错误页,返回错误页的HTML数据,就没有道理了,ajax请求的异常应该返回一个请求未能完成的简单响应信息,可能是XML、json或文本而不是完整的页面。也就是说,应该forward到另一个不同的错误处理URL。问题在于,服务器端无法知道一个请求是通过地址栏或链接发起的,还是通过javascript发起的,有什么办法可以较好地解决呢?我们系统的URL规则本身无法判断是正常请求还是ajax请求,每个action(即一个功能的URL)配置中都有一个view属性,view是展示层,每个action可以更换不同展示层而展示html或ajax响应,所以无论返回数据是什么类型,action名是一样的。并且一种常见的异常是URL错误,请求了不存在的action(通常用404错误表示的),即使想通过该action配置的不同view类型判断也不可能,因为action不存在,这时应提示用户此URL不存在,如果用户是浏览器发起的请求则用HTML页面显示提示,如果是ajax发起的,则应返回简单的响应数据,但依据什么判断做不同转向呢?