Struts2与ajax整合之缺点 1,Struts2与Ajax整合的缺点 2,$.post()与$.ajax() 3,Servlet中$.ajax()

 之前有篇博客介绍了Struts2ajax的整合,链接Struts2之—集成Json插件实现Ajax

这里不再累述,看以上博客。

   此篇博客想吐槽一下Struts2的缺点——错误处理做的不好,怎么做的不好,哪里做的不好,通过Struts2Ajax的应用缺陷来介绍。

  先提出它的缺点,后面再做出证明。

不管採用$.post还是$.ajax都捕获不到server产生的错误($.ajax捕获错误在servlet能做到),是struts2内部设计的不好,不是Ajax的问题。

2$.post()$.ajax()

大家都知道,$.post()方法与$.ajax()方法的差别:

$.post()方法:不能截获异常;

$.ajax()方法:能够截获异常;

官方文档解释:

Struts2与ajax整合之缺点
1,Struts2与Ajax整合的缺点
2,$.post()与$.ajax()
3,Servlet中$.ajax()

 

3Servlet$.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

运行结果:刷新页面后,毫无反应——不能对异常做出处理

Struts2与ajax整合之缺点
1,Struts2与Ajax整合的缺点
2,$.post()与$.ajax()
3,Servlet中$.ajax()

 

(2)运行ajax-post.html中的$.ajax()方法:

——调用后台AjaxServlet.java,当中有异常 int a = 1/0

运行结果:刷新页面后,运行结果例如以下;代码中走的错误处理函数error:function()

Struts2与ajax整合之缺点
1,Struts2与Ajax整合的缺点
2,$.post()与$.ajax()
3,Servlet中$.ajax()

 

总结1Servlet$.post()方法不能对异常做出处理,$.ajax()方法能对异常做出处理(通过error:function()回调函数)

 

4Struts2$.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整合之缺点
1,Struts2与Ajax整合的缺点
2,$.post()与$.ajax()
3,Servlet中$.ajax()

 

总结:Struts2$.ajax()的错误处理不能正常使用,(也就是说,不管后台是否有异常,$.ajax()函数都走成功后的回调函数success:function())——这是Struts2的内部设计缺点

 

      Struts2中的错误处理存在这种缺点,在系统开发时无疑让人非常头疼,那么针对这个问题,该怎样解决呢?之后的博客再做介绍。

      即便是再完美的框架也有它的缺点,我们要善于发现!