首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tomcat 9和Servlet 2.5

Tomcat 9和Servlet 2.5
EN

Stack Overflow用户
提问于 2020-07-23 16:53:14
回答 1查看 1.4K关注 0票数 0

我的spring应用程序使用servlet 2.5和spring框架4,它部署在tomcat 9中,工作正常。我不知道为什么tomcat没有抱怨它,因为它需要servlet 4,如文档所示。它是向后兼容的,还是spring在做一些魔术?为了清楚起见,我们在代码中使用servlet 2.5中的接口,它不应该用servlet 4编译,因为我们用2.5编译,但我们希望它在tomcat运行时失败。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-23 18:10:59

您是否在使用servlet规范4中不再存在的方法/类?没有魔法-它向下兼容。例如,如果您试图运行Tomcat5.5 (servlet规范2.4)中的AsyncEvent代码,则会遇到问题。但是,在新服务器上运行旧代码--而不使用已经完全更改或消失的东西--很少是一个问题。

编辑

你说“旧”代码有:

代码语言:javascript
复制
Map parameterMap = request.getParameterMap();

这即使不是最佳做法,也仍然有效。对于较新的编译器,您可能会收到编译器的警告,表示您不使用泛型,但它仍然有效。从那时起爪哇人就说:

返回:一个不变的java.util.Map,包含参数名作为键,参数值作为映射值。参数映射中的键为String类型。参数映射中的值为String数组类型。

因此,旧代码必须将键转换为字符串,将值转换为String[] --就像较新的代码那样:

代码语言:javascript
复制
Map<String, String[]> parameterMap = request.getParameterMap();

这两个版本都将在编译器的最近版本中编译,不过,您可能会收到不利用泛型的代码的警告。

关键是泛型的使用-- <String, String[]>部件。使用泛型时代码更清晰,编译器可以帮助解决问题。使用非泛型版本,您可以尝试将映射中的键转换为任何对象。它可以编译,但在运行时您可能会得到一个ClassCastException

从Tomcat的角度来看,它仍然在返回相同的东西。

这样更清楚吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63059349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档