모범 사례: 서브렛에서 SingleThreadModel을 구현하지 마십시오.

3590 단어
참조 <<>
Each request runs in a sepatate thread!
THe container runs multiple threads to process multiple request to a single servlet
요약
SingleThreadModel 인터페이스를 구현하지 마십시오.이러한 실천은 웹 용기에 여러 개의 servlet 실례를 만들 것이다.각 사용자에 대한 인스턴스가 생성됩니다.모든 크기의 응용 프로그램에 대해 이러한 실천은 심각한 성능 문제를 초래할 것이다.권장 사항
SingleThreadModel은 servlet을 통해 자신의 리셋 (re-entrancy) 문제를 servlet 엔진에 전송할 수 있는 태그 인터페이스입니다.javax.servlet.SingleThread 모델 자체가 J2EE 규범의 일부분이다.WebSphere servlet 엔진은 각 사용자에 대해 별도의 servlet 인스턴스를 생성하여 servlet의 재입력 문제를 처리합니다.이런 방법은 매우 큰 시스템 비용을 초래하기 때문에, SingleThread 모델을 실현하는 것을 피해야 한다.보통 개발자는 다중 스레드 환경에서javax를 사용합니다.servlet.SingleThreadModel은 업데이트 가능한 서브렛 인스턴스 변수를 보호합니다.최상의 방법 - 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은 업데이트 가능한 서브렛 인스턴스를 보호합니다.다음 코드 단편은 예를 들어 피해야 할 것이 무엇인지 설명한다.이런 상황을 피하라!!--javax.servlet.SingleThreadModel
public class BpAllBadThingsServletsV1c extends HttpServlet
                                       implements 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.
                        }
             }
}


좋은 웹페이지 즐겨찾기