生活随笔
收集整理的這篇文章主要介紹了
最佳实践: 勿在 Servlet 中实现 SingleThreadModel
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
摘要
請不要實現 SingleThreadModel 接口。這種實踐將導致 Web 容器創建多個 servlet 實例;即為每個用戶創建一個實例。對于任何大小的應用程序,這種實踐都將導致嚴重的性能問題。?
建議
SingleThreadModel 是一種標記接口,servlet 可以通過實現它來將自己的重入(re-entrancy)問題傳送給 servlet 引擎。javax.servlet.SingleThreadModel 本身就是 J2EE 規范的一部分。WebSphere servlet 引擎通過為每個用戶創建單獨的 servlet 實例來處理 servlet 的重入問題。因為這種方法導致極大的系統開銷,所以,應該避免實現 SingleThreadModel。?
通常,開發人員在多線程環境下使用 javax.servlet.SingleThreadModel 來保護可更新的 servlet 實例變量。?
最佳方法 -- 不使用 SingleThreadModel
public class BpAllBadThingsServletsV1c extends HttpServlet
{private int numberOfRows = 0;private javax.sql.DataSource ds = null;public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{Connection conn = null;ResultSet rs = null;PreparedStatement pStmt = null;int startingRows = numberOfRows;try{ String employeeInformation = null;conn = ds.getConnection ("db2admin","db2admin");pStmt = conn.prepareStatement("select * from db2admin.employee");rs = pStmt.executeQuery();}catch (Exception es){// Error handling code here.}}
}
?
應被取代的方法?
通常,開發人員在多線程環境下使用 javax.servlet.SingleThreadModel 來保護可更新的 servlet 實例。下列代碼片斷舉例說明了什么是要避免的。
避免這種情況!!!-- javax.servlet.SingleThreadModel
public class BpAllBadThingsServletsV1c extends HttpServletimplements SingleThreadModel
{private int numberOfRows = 0;private javax.sql.DataSource ds = null;public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{Connection conn = null;ResultSet rs = null;PreparedStatement pStmt = null;int startingRows = numberOfRows;try{String employeeInformation = null;conn = ds.getConnection ("db2admin","db2admin");pStmt = conn.prepareStatement("select * from db2admin.employee");rs = pStmt.executeQuery();}catch (Exception es){// Error handling code here.}}
}
總結
以上是生活随笔為你收集整理的最佳实践: 勿在 Servlet 中实现 SingleThreadModel的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。