java servlet 3_java – Servlet 2.5和3之间有什么区别?
更新
正如一個(gè)更新和更明確,這些是servlet 2.5和3之間的主要區(qū)別(我不想窮舉,我只是提到最有趣的部分):
聲明servlet,過濾器和監(jiān)聽器的注釋(易于開發(fā))
在servlets 2.5中,要聲明具有一個(gè)init參數(shù)的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 { ... }
對(duì)于過濾器,您需要在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 { ... }
對(duì)于偵聽器(在本例中為ServletContextListener),在servlet 2.5:
my.server.side.stuff.MyAwesomeListener
同樣使用注釋:
@WebServletContextListener
public class MyAwesomeListener implements ServletContextListener { ... }
web.xml的模塊化(可插入性)
>在servlets 2.5中只有一個(gè)整體web.xml文件。
>在servlet 3中,每個(gè)“可加載”jar在其META-INF目錄中都有一個(gè)web-fragment.xml,指定servlet,過濾器等。這是為了允許庫和框架指定自己的servlet或其他對(duì)象。
在上下文初始化時(shí)動(dòng)態(tài)注冊(cè)servlet,過濾器和偵聽器(可插入性)
在Servlet 3中,ServletContextListener可以使用添加到SevletContext的以下方法動(dòng)態(tài)添加servlet,過濾器和偵聽器:addServlet(),addFilter()和addListener()
異步支持
示例:假設(shè)某個(gè)servlet容器在其線程池中有五個(gè)線程,并且每個(gè)請(qǐng)求都需要執(zhí)行一個(gè)耗時(shí)的進(jìn)程(如復(fù)雜的SQL查詢)。
>使用servlet 2.5,如果servlet容器同時(shí)接收到五個(gè)請(qǐng)求,并且五個(gè)可用線程開始執(zhí)行該進(jìn)程,則此servlet容器將用完可用線程,因?yàn)榫€程不會(huì)返回直到service()(或doGet(),doPost ()等)從開始到結(jié)束執(zhí)行并返回響應(yīng)。
>使用servlet 3.0,這個(gè)長(zhǎng)時(shí)間進(jìn)程可以在發(fā)送響應(yīng)之前委托給另一個(gè)線程并完成service()(現(xiàn)在響應(yīng)將由最新線程發(fā)送)。這樣線程可以自由接收新的響應(yīng)。
異步支持的示例:
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也有方法來獲取請(qǐng)求對(duì)象,響應(yīng)對(duì)象和添加監(jiān)聽器,以便在進(jìn)程完成時(shí)通知它們。
程序化登錄和注銷(安全增強(qiáng)功能)
在servlet 3中,接口HttpServletRequest已經(jīng)添加了兩個(gè)新方法:login(username,password)和logout()。
總結(jié)
以上是生活随笔為你收集整理的java servlet 3_java – Servlet 2.5和3之间有什么区别?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java根据pdf模板生成pdf_PDF
- 下一篇: stm32cubemx adc_STM3