日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java servlet 3_java – Servlet 2.5和3之间有什么区别?

發布時間:2025/3/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java servlet 3_java – Servlet 2.5和3之间有什么区别? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

更新

正如一個更新和更明確,這些是servlet 2.5和3之間的主要區別(我不想窮舉,我只是提到最有趣的部分):

聲明servlet,過濾器和監聽器的注釋(易于開發)

在servlets 2.5中,要聲明具有一個init參數的servlet,您需要將其添加到web.xml:

myServlet

my.server.side.stuff.MyAwesomeServlet

configFile

config.xml

myServlet

/path/to/my/servlet

在servlet 3中,web.xml是可選的,您可以使用注釋而不是XML。同樣的例子:

@WebServlet(name="myServlet",

urlPatterns={"/path/to/my/servlet"},

initParams={@InitParam(name="configFile", value="config.xml")})

public class MyAwesomeServlet extends HttpServlet { ... }

對于過濾器,您需要在servlet 2.5中的web.xml中添加:

myFilter

my.server.side.stuff.MyAwesomeServlet

myFilter

/path/to/my/filter

在servlet中使用注釋的等效方式3:

@ServletFilter(name="myFilter", urlPatterns={"/path/to/my/filter"})

public class MyAwesomeFilter implements Filter { ... }

對于偵聽器(在本例中為ServletContextListener),在servlet 2.5:

my.server.side.stuff.MyAwesomeListener

同樣使用注釋:

@WebServletContextListener

public class MyAwesomeListener implements ServletContextListener { ... }

web.xml的模塊化(可插入性)

>在servlets 2.5中只有一個整體web.xml文件。

>在servlet 3中,每個“可加載”jar在其META-INF目錄中都有一個web-fragment.xml,指定servlet,過濾器等。這是為了允許庫和框架指定自己的servlet或其他對象。

在上下文初始化時動態注冊servlet,過濾器和偵聽器(可插入性)

在Servlet 3中,ServletContextListener可以使用添加到SevletContext的以下方法動態添加servlet,過濾器和偵聽器:addServlet(),addFilter()和addListener()

異步支持

示例:假設某個servlet容器在其線程池中有五個線程,并且每個請求都需要執行一個耗時的進程(如復雜的SQL查詢)。

>使用servlet 2.5,如果servlet容器同時接收到五個請求,并且五個可用線程開始執行該進程,則此servlet容器將用完可用線程,因為線程不會返回直到service()(或doGet(),doPost ()等)從開始到結束執行并返回響應。

>使用servlet 3.0,這個長時間進程可以在發送響應之前委托給另一個線程并完成service()(現在響應將由最新線程發送)。這樣線程可以自由接收新的響應。

異步支持的示例:

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.

// ...

}

}

接口AsyncContext也有方法來獲取請求對象,響應對象和添加監聽器,以便在進程完成時通知它們。

程序化登錄和注銷(安全增強功能)

在servlet 3中,接口HttpServletRequest已經添加了兩個新方法:login(username,password)和logout()。

總結

以上是生活随笔為你收集整理的java servlet 3_java – Servlet 2.5和3之间有什么区别?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。