Servlet返回響應和執行業務邏輯代碼分開


有一個程序A通過url調用Servlet,如果響應不成功(比如程序里訪問url的時候產生網絡問題、超時等等情況)就再調用一次。 
應用中出現這種情況:程序A實際第一次就調用成功了Servlet的url,但是由於Servlet內部程序執行時間太長,遲遲沒有給程序A響應,造成程序A以為沒有成功,又重復調用了一次url。結果是調用了兩次,重復了。 
現在想去掉這種重復,有兩個思路: 
思路1、程序A通過url調用Servlet時立刻返回正確響應,告訴程序A已經成功訪問Servlet了,不需要再重復調用了。Servlet這邊自己負責自己的代碼是否執行成功,就是雖然告訴程序A調用成功了,但Servlet執行過程中還有可能出現問題,不過跟程序A已經沒有關系了。我通過直接關閉response實現這個思路 
Java代碼  收藏代碼
  1. Servlet{  
  2.   doGet(){  
  3.          response.setHeader("Content-type""text/html;charset=UTF-8");  
  4.          response.setCharacterEncoding("utf-8");  
  5.     PrintWriter out = response.getWriter();  
  6.               
  7.     out.println("OK" );  
  8.     out.flush();  
  9.     out.close();  
  10.            
  11.          ...其他程序...  
  12.   }  
  13. }  

這樣只要訪問這個Servlet的網絡是正常的,程序A調用這個url基本就不會出問題,也就避免了重復發送的問題。但是Servlet內部如果出錯了程序A也就不知道了,需要Servlet自己來做錯誤處理。 

思路2、在Servlet里面可以用集合做一個緩存,調用一次記錄一個request帶的參數,這樣如果重復調用的話就匹配這個集合,如果集合中存在參數就不執行了。 
再開啟一個線程,用線程去處理Servlet里的業務功能,Servlet自身只需要返回正確響應就可以了。 
這樣的話程序A調用Servlet的url應該也不會有問題,因為業務邏輯被另一個線程處理,出了問題不影響Servlet,也就不影響程序A的響應了。 

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com