栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Servlet 2.5和3之间有什么区别?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Servlet 2.5和3之间有什么区别?

更新

正如更新并更明确地说明的那样,这些是Servlet 2.5和3之间的主要区别(我并不想穷尽所有,我只是在提到最有趣的部分):

声明Servlet,过滤器和侦听器的注释(易于开发)

在Servlet 2.5中,要使用一个init参数声明一个Servlet,您需要将此参数添加到 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>

在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 中添加它:

<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>

相当于在Servlet中使用注释3:

@ServletFilter(name="myFilter", urlPatterns={"/path/to/my/filter"})public class MyAwesomeFilter implements Filter { ... }

对于侦听器(在本例中为ServletContextListener),在Servlet 2.5中:

<listener>    <listener-class>my.server.side.stuff.MyAwesomeListener</listener-class></listener>

使用注释也是如此:

@WebServletContextListenerpublic class MyAwesomeListener implements ServletContextListener { ... }

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

  • 在Servlet 2.5中,只有一个整体式的 web.xml 文件。
  • 在servlet 3中,每个“可加载” jar都可以在其 meta-INF* 目录中包含一个 web-fragment.xml ,用于指定servlet,过滤器等。这是为了允许库和框架指定其自己的servlet或其他对象。 *

在上下文初始化时动态注册servlet,过滤器和侦听器(可插入性)

在小服务程序3中,

ServletContextListener
可以动态地添加加入到小服务程序,过滤器和使用以下方法听众
SevletContext
addServlet()
addFilter()
addListener()

异步支持

示例:假设某个Servlet容器的线程池中有五个线程,并且每个请求都要执行一个耗时的过程(例如复杂的SQL查询)。

  • 使用Servlet 2.5这个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 // processingpublic 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 pre:public class MyProcessingObject {    public void doSlowProcess() {        // ...        runSlowProcess();        myAsyncContext.complete(); // request is now completed.        // ...    }}

该接口

AsyncContext
还具有获取请求对象,响应对象以及添加侦听器的方法,以在进程完成时通知它们。

程序化登录和注销(安全性增强)

在Servlet 3中,接口

HttpServletRequest
已添加了两个新方法:
login(username,password)
logout()

有关更多详细信息,请参阅Java EE 6 API。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/595574.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号