Struts2与ajax整合之缺点 1,Struts2与Ajax整合的缺点 2,$.post()与$.ajax() 3,Servlet中$.ajax()
之前有篇博客介绍了Struts2与ajax的整合,链接Struts2之—集成Json插件实现Ajax
这里不再累述,看以上博客。
此篇博客想吐槽一下Struts2的缺点——错误处理做的不好,怎么做的不好,哪里做的不好,通过Struts2中Ajax的应用缺陷来介绍。
先提出它的缺点,后面再做出证明。
不管採用$.post还是$.ajax都捕获不到server产生的错误($.ajax捕获错误在servlet能做到),是struts2内部设计的不好,不是Ajax的问题。
2,$.post()与$.ajax()
大家都知道,$.post()方法与$.ajax()方法的差别:
$.post()方法:不能截获异常;
$.ajax()方法:能够截获异常;
官方文档解释:
3,Servlet中$.ajax()
Servlet中$.ajax()可正常工作,能正常捕获异常,并作出处理(使用回调函数error:function())
样例:
新建Servlet类——AjaxServlet.java:
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class AjaxServlet extends HttpServlet { /** * Constructor of the object. */ public AjaxServlet() { super(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException { response.setContentType("text/html"); PrintWriterout = response.getWriter(); int a = 1/0; //异常 out.println("</HTML>"); out.flush(); out.close(); } public void init()throws ServletException { //Put your code here } public voiddestroy() { super.destroy();// Just puts "destroy" string in log //Put your code here } }
Web.xml:
用户User类——实体类:
UserAction.java——处理业务,获取用户
配置Strut2的配置文件Struts.xml
——继承json-default,指定Action返回的结果集的类型为:json;
<struts> <packagename="userjson"namespace="/"extends="json-default"> <actionname="userAction_*"method="{1}"class="cn.itcast.oa0909.struts2.action.UserAction"> <!--指定返回的结果集的类型为:json --> <resulttype="json"></result> </action> </package> </struts>
ajax-struts2.html:
test.js:
(1)运行ajax-post.html中的$.post()方法:
——调用后台AjaxServlet.java,当中有异常 int a = 1/0
运行结果:刷新页面后,毫无反应——不能对异常做出处理
(2)运行ajax-post.html中的$.ajax()方法:
——调用后台AjaxServlet.java,当中有异常 int a = 1/0
运行结果:刷新页面后,运行结果例如以下;代码中走的错误处理函数error:function()
总结1:在Servlet中$.post()方法不能对异常做出处理,$.ajax()方法能对异常做出处理(通过error:function()回调函数)
4,Struts2中$.ajax()
可是,在Struts2中两个方法一样,都不能截获异常——Struts2的缺点;
(在Struts2中,运行$.ajax()方法,不管后台是否有异常,都运行成功)
样例:
Web.xml:
——配置Struts2的核心的过滤器
用户User类——实体类:
UserAction.java——处理业务,获取用户
配置Strut2的配置文件Struts.xml
——继承json-default,指定Action返回的结果集的类型为:json;
ajax-struts2.html:
test.js:
运行结果:刷新页面后,运行结果例如以下;代码中走的成功后的回调函数success:function()——应该走error:function(),由于后台代码有异常int a=1/0;
总结:在Struts2中$.ajax()的错误处理不能正常使用,(也就是说,不管后台是否有异常,$.ajax()函数都走成功后的回调函数success:function())——这是Struts2的内部设计缺点
Struts2中的错误处理存在这种缺点,在系统开发时无疑让人非常头疼,那么针对这个问题,该怎样解决呢?之后的博客再做介绍。
即便是再完美的框架也有它的缺点,我们要善于发现!