Saya memutar kode J2EE yang mengikuti Servlet 2.5 dan saya bertanya-tanya apa perbedaan utama antara 2.5 dan 3. Pointer ke dokumen resmi Sun dan pengalaman pribadi paling dihargai.
Jika saya tidak harus memikirkan diri saya sendiri dengan 3 untuk saat ini, katakan saja. Terima kasih!
java
servlets
jakarta-ee
Max A.
sumber
sumber
Jawaban:
MEMPERBARUI
Hanya sebagai pembaruan dan untuk lebih eksplisit, ini adalah perbedaan utama antara servlet 2.5 dan 3 (saya tidak mencoba untuk menjadi lengkap, saya hanya menyebutkan bagian yang paling menarik):
Anotasi untuk mendeklarasikan servlet, filter, dan listener (kemudahan pengembangan)
Di servlet 2.5, untuk mendeklarasikan servlet dengan satu parameter init Anda perlu menambahkan ini ke web.xml :
<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>
Di servlet 3, web.xml bersifat opsional dan Anda dapat menggunakan anotasi sebagai pengganti XML. Contoh yang sama:
@WebServlet(name="myServlet", urlPatterns={"/path/to/my/servlet"}, initParams={@InitParam(name="configFile", value="config.xml")}) public class MyAwesomeServlet extends HttpServlet { ... }
Untuk filter, Anda perlu menambahkan ini di web.xml di servlets 2.5:
<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>
Setara dengan menggunakan anotasi di servlet 3:
@ServletFilter(name="myFilter", urlPatterns={"/path/to/my/filter"}) public class MyAwesomeFilter implements Filter { ... }
Untuk pendengar (dalam hal ini ServletContextListener), di servlet 2.5:
<listener> <listener-class>my.server.side.stuff.MyAwesomeListener</listener-class> </listener>
Hal yang sama menggunakan anotasi:
@WebServletContextListener public class MyAwesomeListener implements ServletContextListener { ... }
Modularisasi web.xml (Pluggability)
Pendaftaran dinamis servlet, filter, dan pendengar pada waktu inisialisasi konteks (Pluggability)
Dalam servlets 3, sebuah
ServletContextListener
dapat menambahkan dinamis servlets, filter dan pendengar menggunakan metode berikut ditambahkan keSevletContext
:addServlet()
,addFilter()
danaddListener()
Dukungan asynchronous
Contoh: katakanlah bahwa beberapa wadah servlet memiliki lima utas di kumpulan utasnya, dan ada proses yang memakan waktu untuk dieksekusi per permintaan (seperti kueri SQL yang kompleks).
Dengan servlets 2,5 kontainer servlet ini akan kehabisan benang tersedia jika menerima lima permintaan pada waktu yang sama dan lima benang tersedia mulai melakukan proses, karena benang tidak akan kembali sampai
service()
(ataudoGet()
,doPost()
, dll) dijalankan dari awal untuk mengakhiri dan mengembalikan tanggapan.Dengan servlet 3.0, proses lama ini dapat didelegasikan ke utas lain dan selesai
service()
sebelum mengirim respons (respons sekarang akan dikirim oleh utas terbaru). Dengan cara ini utas bebas menerima tanggapan baru.Contoh dukungan asynchronous:
Servlet 2.5:
public class MyAwesomeServlet extends HttpSerlvet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) { // ... runSlowProcess(); // no async support, thread will be free when runSlowProcess() and // doGet finish // ... } }
Servlet 3:
@WebServlet(name="myServlet", urlPatterns={"/mySlowProcess"}, asyncSupported=true) // asyncSupported MUST be specified for // servlets that support asynchronous // processing public class MyAwesomeServlet extends HttpSerlvet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) { // an AsyncContext is created, now the response will be completed // not when doGet finalizes its execution, but when // myAsyncContext.complete() is called. AsyncContext myAsyncContext = request.startAsync(request, response); // ... // myAsyncContext is passed to another thread delegateExecutionToProcessingThread(myAsyncContext); // done, now this thread is free to serve another request } } // ... and somewhere in another part of the code: public class MyProcessingObject { public void doSlowProcess() { // ... runSlowProcess(); myAsyncContext.complete(); // request is now completed. // ... } }
Antarmuka
AsyncContext
juga memiliki metode untuk mendapatkan objek permintaan, objek respons dan menambahkan pendengar untuk memberi tahu mereka ketika suatu proses telah selesai.Login dan logout terprogram (peningkatan keamanan)
Dalam servlet 3, antarmuka
HttpServletRequest
telah ditambahkan dua metode baru:login(username, password)
danlogout()
.Untuk lebih jelasnya, lihat Java EE 6 API .
sumber
@ServletFilter
→@WebFilter
dan@WebServletContextListener
→@WebListener
dalam spesifikasi resmi AFAICT.Servlet 3.0 belum dirilis, tapi sepertinya sudah sangat dekat. Perubahan terpenting dalam 3.0 adalah: Pluggability, Kemudahan pengembangan, Async Servlet, Keamanan. Apakah ini penting atau tidak bagi Anda, tidak mungkin saya katakan.
Yang paling signifikan dari ini mungkin adalah dukungan untuk Servlet asinkron. Berikut artikel yang menjelaskan ini secara rinci. Spesifikasi lengkapnya bisa diunduh disini .
sumber
Seperti yang disebutkan Don, area utama perbaikan dan penambahan adalah:
Lihat presentasi Javaone 2008 " Java Servlet 3.0 API: What's new and exciting " untuk detailnya.
sumber
Tautan ini akan memberikan info yang cukup tentang Servlet 3
Servlet 3 mendukung anotasi untuk dihilangkan
web.xml
@WebServlet @WebServletContextListener @ServletFilter @InitParam
sumber