SORU
2 ŞUBAT 2010, Salı


Sunucu her örneği ve sunucu uygulamalarını içinde sunucu her iş parçacığı arasındaki fark?

Sunucu uygulaması sınıfın birden çok örneği vardır? "Sunucu uygulaması her örneği", duyduğuma göre Kimse bunun hakkında biraz bilgi verebilir mi?

CEVAP
2 ŞUBAT 2010, Salı


Sunucu uygulaması konteyner başladığında,:

  1. web.xml; okur
  2. sınıf içinde bildirilen sunucu uygulamalarına bulur; ve
  3. yükler ve başlatır her Sunucu uygulamasısadece bir kez.

Kabaca, bu gibi:

String urlPattern = parseWebXmlAndRetrieveServletUrlPattern();
String servletClass = parseWebXmlAndRetrieveServletClass();
HttpServlet servlet = (HttpServlet) Class.forName(servletClass).newInstance();
servlet.init();
servlets.put(urlPattern, servlet); // Similar to a map interface.

Bu sunucu uygulamalarına hafızada saklanır ve istek URL Sunucu uygulaması url-pattern ilişkili maçları her zaman yeniden. Sunucu uygulaması konteyner kodu benzer yürütür:

for (Entry<String, HttpServlet> entry : servlets.entrySet()) {
    String urlPattern = entry.getKey();
    HttpServlet servlet = entry.getValue();
    if (request.getRequestURL().matches(urlPattern)) {
        servlet.service(request, response);
        break;
    }
}

Onun aç GenericServlet#service() çağırmak HttpServletRequest#getMethod() ile karar verir.

Sen servletcontainer, yeniden kullanıraynı sunucu uygulaması örneğiher istek için. Diğer bir deyişle: sunucu uygulamalarına arasında paylaştırılırher istek. Bu son derece önemli uygulamasında kod aslında basit olan iş parçacığı için güvenli şekilde yazmaya yüzden: yapdeğilistek veya Oturum örnek veri sunucu değişkenleri, yöntem yerel değişkenler kapsamlı atayın. E. g.

public class MyServlet extends HttpServlet {

    private Object thisIsNOTThreadSafe;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Object thisIsThreadSafe;

        thisIsNOTThreadSafe = request.getParameter("foo"); // BAD!! Shared among all requests!
        thisIsThreadSafe = request.getParameter("foo"); // OK, this is thread safe.
    } 
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • engineerguy

    engineerguy

    10 Ocak 2010
  • movies95

    movies95

    27 Kasım 2006
  • Richard Laxa

    Richard Laxa

    30 AĞUSTOS 2012