生活随笔
收集整理的這篇文章主要介紹了
最佳实践: 勿在 Servlet 中实现 SingleThreadModel
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
摘要
請不要實(shí)現(xiàn) SingleThreadModel 接口。這種實(shí)踐將導(dǎo)致 Web 容器創(chuàng)建多個(gè) servlet 實(shí)例;即為每個(gè)用戶創(chuàng)建一個(gè)實(shí)例。對于任何大小的應(yīng)用程序,這種實(shí)踐都將導(dǎo)致嚴(yán)重的性能問題。?
建議
SingleThreadModel 是一種標(biāo)記接口,servlet 可以通過實(shí)現(xiàn)它來將自己的重入(re-entrancy)問題傳送給 servlet 引擎。javax.servlet.SingleThreadModel 本身就是 J2EE 規(guī)范的一部分。WebSphere servlet 引擎通過為每個(gè)用戶創(chuàng)建單獨(dú)的 servlet 實(shí)例來處理 servlet 的重入問題。因?yàn)檫@種方法導(dǎo)致極大的系統(tǒng)開銷,所以,應(yīng)該避免實(shí)現(xiàn) SingleThreadModel。?
通常,開發(fā)人員在多線程環(huán)境下使用 javax.servlet.SingleThreadModel 來保護(hù)可更新的 servlet 實(shí)例變量。?
最佳方法 -- 不使用 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.}}
}
?
應(yīng)被取代的方法?
通常,開發(fā)人員在多線程環(huán)境下使用 javax.servlet.SingleThreadModel 來保護(hù)可更新的 servlet 實(shí)例。下列代碼片斷舉例說明了什么是要避免的。
避免這種情況!!!-- 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.}}
}
總結(jié)
以上是生活随笔為你收集整理的最佳实践: 勿在 Servlet 中实现 SingleThreadModel的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。