更新

正如一个更新和更明确,这些是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之间有什么区别?相关推荐

  1. java client是什么_“java-server”和“java-client”之间的真正区别?

    慕村9548890 在早期版本的Java中,最明显的直接区别是分配给-client相对于-server申请.例如,在我的Linux系统上,我得到:$ java -XX:+PrintFlagsFinal ...

  2. 教妹学Java(六):JDK,JRE和JVM之间有什么区别?

    大家好,我是沉默王二.本篇文章通过我和三妹的对话来谈一谈"JDK,JRE 和 JVM 之间的区别".本文付费,为表谢意,附送上个人微信(qing_gee),坑位所剩无几,快加,你有 ...

  3. java obervable_RxJava中Observable,Completable和Single之间有什么区别

    Observable 是通用ReactiveX构建块,它是随时间发送值的事件源 . (因此存在ReactiveX扩展到的每种语言) 简而言之,Observable事件是: onNext *(onCom ...

  4. 初学Java Web(4)——Servlet学习总结

    经过一段时间的学习,对于Servlet有了新的不一样的见解,在这里做一下总结,将近来学习到的知识总结一下. Servlet 的请求流程 浏览器发出请求:http://localhost:80/xxx1 ...

  5. JAVA学习篇--Servlet详解

    Servlet由来 做过BS项目的人都知道,浏览器能够根据HTML静态标记语言来显示各式各样的网页.但是如果我们需要在网页上完成一些业务逻辑:比如登陆验证.或者说网页显示的内容在服务器的数据库中.如果 ...

  6. Java网络02 Servlet开胃酒

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在Tomcat初次尝试中,我们搭建了用于测试Servlet和JSP的基本环境.我们 ...

  7. java _web之Servlet简单应用

    Servlet是一种独立于平台和协议的服务器端的Java应用程序,可以生成动态的web页面.它担当Web浏览器或其他http客户程序发出请求.与http服务器上的数据库或应用程序之间交互的中间层. 所 ...

  8. java web之servlet

    readme 课程回顾:Tomcat服务器和HTTP的协议 Tomcat服务器 WEB简介 1.网络的架构 C/S B/S 2.C/S 客户端/服务器 B/S 浏览器/服务器* C/S压力比较小,下载 ...

  9. 用servlet路径访问一个html,java web中servlet、jsp、html 互相访问的路径问题

    在html">java web种经常出现 404找不到网页的错误,究其原因,一般是访问的路径不对. html">java web中的路径使用按我的分法可以分两种情况,当 ...

最新文章

  1. .bak 服务器备份文件,如何从SQL Server Management Studio中的多个备份(bak)文件还原数据库...
  2. List去重为什么要写equals(),hashCode()方法
  3. 原创 通过PEB获得进程路径 (附完整工程)
  4. 万字长文 | 淘宝 10年架构演进
  5. binder-swagger-java v0.5.0,Swagger API 框架
  6. 计算机屏幕总闪烁,教你如何解决电脑屏幕闪烁
  7. 魅族一直显示无服务器,魅族手机用久了卡顿,这三个方法轻松解决
  8. 算法:5、绝对差值和
  9. 【redis源码学习】持久化机制(2):AOF
  10. python写android抢票软件,如何用python写一个简单的12306抢票软件
  11. Win10 如何在系统内用cmd命令查看系统详细信息
  12. ThinkPHP6 excel 导出功能完整实现
  13. asixs 响应慢_大智慧技术指标快捷键一览!转的!|家居理财 - 鱼叉论坛 - powered by php......
  14. Windows畸形文件夹
  15. 支付宝服务窗 开发 验证
  16. 满足条件的整数 - 详解
  17. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 5 Octave Tutorial
  18. 深入了解音视频开发直播协议RTMP
  19. 上线MES系统后,这6大问题必须注意
  20. 2022-2028全球与中国固态继电器市场现状及未来发展趋势

热门文章

  1. java insert方法_【Oracle/Java】以Insert ALL方式向表中插入百万条记录,耗时9分17秒...
  2. helm安装_Helm部署和体验jenkins
  3. css中如何实现帧布局_浅谈web前端中的表格布局与CSS盒子布局
  4. 没有bug队——加贝——Python 练习实例 27,28
  5. Python数模笔记-NetworkX(2)最短路径
  6. wins宝塔安装提示已经有php,centOS安装宝塔提示报错
  7. springboot 集成redis_一文详解Spring Boot 集成 Redis
  8. 两步路轨迹文件位置_最新Uber ATG的轨迹预测方法LiRaNet介绍
  9. 【业务篇】史上最全经验版用例之IOS和Android版APP版本更新、IOS版规避审核?
  10. JMeter 入门脚本以发送百度请求为例