GÜNCELLEME
Bir güncelleme olarak ve daha açık olmak gerekirse, bunlar, sunucu uygulamaları 2.5 ve 3 arasındaki temel farklardır (kapsamlı olmaya çalışmıyorum, sadece en ilginç kısımlardan bahsediyorum):
Sunucu uygulamaları, filtreler ve dinleyiciler bildirmek için ek açıklamalar (geliştirme kolaylığı)
Servlet 2.5'te, bir init parametresine sahip bir sunucu uygulaması bildirmek için bunu web.xml'ye eklemeniz gerekir :
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>my.server.side.stuff.MyAwesomeServlet</servlet-class>
<init-param>
<param-name>configFile</param-name>
<param-value>config.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>/path/to/my/servlet</url-pattern>
</servlet-mapping>
Sunucu uygulamaları 3'te web.xml isteğe bağlıdır ve XML yerine ek açıklamaları kullanabilirsiniz. Aynı örnek:
@WebServlet(name="myServlet",
urlPatterns={"/path/to/my/servlet"},
initParams={@InitParam(name="configFile", value="config.xml")})
public class MyAwesomeServlet extends HttpServlet { ... }
Filtreler için, bunu web.xml'de servlet 2.5'e eklemeniz gerekir :
<filter>
<filter-name>myFilter</filter-name>
<filter-class>my.server.side.stuff.MyAwesomeServlet</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/path/to/my/filter</url-pattern>
</filter-mapping>
Sunucu uygulamaları 3'te ek açıklamalar kullanılarak eşdeğer:
@ServletFilter(name="myFilter", urlPatterns={"/path/to/my/filter"})
public class MyAwesomeFilter implements Filter { ... }
Bir dinleyici için (bu durumda bir ServletContextListener), 2.5 sunucu uygulamalarında:
<listener>
<listener-class>my.server.side.stuff.MyAwesomeListener</listener-class>
</listener>
Ek açıklamaları kullanarak aynı:
@WebServletContextListener
public class MyAwesomeListener implements ServletContextListener { ... }
Web.xml'nin modülerleştirilmesi (Eklenebilirlik)
- Servlet 2.5'te yalnızca bir monolitik web.xml dosyası vardır.
- Sunucu uygulamalarında 3, her "yüklenebilir" kavanoz , META-INF dizininde sunucuları, filtreleri vb. Belirten bir web-fragment.xml'ye sahip olabilir . Bu, kitaplıkların ve çerçevelerin kendi sunucu uygulamalarını veya diğer nesnelerini belirtmelerine izin vermek içindir.
Bağlam başlatma zamanında sunucu uygulamalarının, filtrelerin ve dinleyicilerin dinamik kaydı (Takılabilirlik)
Servlet 3'te, bir ServletContextListener
dinamik ilave servlet'ler, filtre ve şu yöntemleri kullanarak dinleyici ekleyebilir SevletContext
: addServlet()
, addFilter()
veaddListener()
Eşzamansız destek
Örnek: bazı sunucu uygulamacığı konteynerinin iş parçacığı havuzunda beş iş parçacığı olduğunu ve istek başına yürütülecek zaman alan bir işlem olduğunu (karmaşık bir SQL sorgusu gibi) söyleyin.
Aynı anda beş talep ve beş mevcut konuları sürecini yapmaya başlamak alırsa ipler kadar dönmek olmaz çünkü servlet 2.5 ile bu servlet konteyner, mevcut iş parçacığı dışarı aday olacağını service()
(ya doGet()
, doPost()
vs.) baştan yürütülür biter ve bir yanıt döndürür.
Sunucu uygulamaları 3.0 ile, bu uzun süreli işlem başka bir iş parçacığına devredilebilir ve service()
yanıtı göndermeden önce tamamlanabilir (yanıt şimdi en son iş parçacığı tarafından gönderilecektir). Bu şekilde ileti dizisi yeni yanıtlar almakta serbesttir.
Eşzamansız destek örneği:
Servletler 2.5:
public class MyAwesomeServlet extends HttpSerlvet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) {
runSlowProcess();
}
}
Servletler 3:
@WebServlet(name="myServlet",
urlPatterns={"/mySlowProcess"},
asyncSupported=true)
public class MyAwesomeServlet extends HttpSerlvet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) {
AsyncContext myAsyncContext = request.startAsync(request, response);
delegateExecutionToProcessingThread(myAsyncContext);
}
}
public class MyProcessingObject {
public void doSlowProcess() {
runSlowProcess();
myAsyncContext.complete();
}
}
Arabirim AsyncContext
ayrıca istek nesnesini, yanıt nesnesini almak ve bir işlem bittiğinde bunları bildirmek için dinleyiciler eklemek için yöntemler içerir.
Programlı oturum açma ve kapatma (güvenlik geliştirmeleri)
Sunucu uygulamalarında 3, arabirime HttpServletRequest
iki yeni yöntem eklenmiştir: login(username, password)
ve logout()
.
Daha fazla ayrıntı için Java EE 6 API'ye bakın .