【问题标题】:What exactly is the web-app version? What does it affect?网络应用程序版本到底是什么?它有什么影响?
【发布时间】:2023-03-24 14:09:01
【问题描述】:

在 java web 应用程序中,有一个名为 web.xml 的文件,它有一个版本控制。

这究竟是什么?它是干什么用的?

Here 是 web.xml 的 SO wiki。但这并不能真正解释我。

它允许您定义、声明和配置基于 Servlet API Web 应用程序中的实现,例如 servlet、过滤器和 听众。

示例 web.xml 版本控制:

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">

也许有人可以用简单的例子解释一下吗?

【问题讨论】:

    标签: jakarta-ee web.xml


    【解决方案1】:

    Web.xml 是您定义 Web 应用程序配置的中心位置。例如,您可以在此处指定:

    我还建议研究 Servlet 3.0 规范,其中许多参数可以通过注释设置。

    版本控制

    版本控制是指web.xml 文件的语法必须遵守的 XML 模式版本。更重要的是,它还指示您的应用程序实现的 Servlet 规范的版本。 Servlet 3.0 兼容 web.xml 应该如何开始的示例:

    <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    

    大多数 IDE 会自动生成 web.xml 的那部分。如果出于某种原因要手动更改它,请注意匹配 web-app 和 xsd 的版本。

    web.xml的具体例子见:

    【讨论】:

    • 这个文件的版本有多重要?
    • 这就像告诉容器我正在使用什么实现?所以我已经有了 Java Servlet 类来实现版本 3 附带的方法?因此,我可以将我的 webapp 声明为版本 3,但使用 Tomcat 5,并且如果我不使用 Servlet 3.0 API 引入的任何方法,就可以相处得很好?
    • @KorayTugay 是的,你会没事的。但是,如果您在 web.xml 中混合版本(即放入 web-app version="2.5"xsi:schemaLocation="..web-app_3_0.xsd"),您将无法构建应用程序。
    【解决方案2】:

    从 Servlet 3.0 开始,Web.xml 是可选的,你可以使用@WebServlet 注解代替。

    如果您使用的是 Springorg.springframework.web.WebApplicationInitializer 可以或与 web.xml 一起使用。

    WebApplicationInitializer:

    要在 Servlet 3.0+ 中实现的接口 环境,以便以编程方式配置 ServletContext -- 与传统的基于 web.xml 的方法相反(或可能结合)。

    回答您的以下问题。

    它有什么影响? (在 Spring 应用程序中

    web.xml 版本控制:

    但是,如果应用程序中存在WEB-INF/web.xml,则其版本属性必须设置为“3.0”或更高版本,否则ServletContainerInitializer 引导将被 servlet 容器忽略

    您可以阅读 WebApplicationInitializer here 的完整 java 文档。

    【讨论】:

    • 这里似乎有这么多投机取巧的投票者,为什么没有人准备在投票时发表评论?
    【解决方案3】:

    我从 web.xml esp 中了解到web-app version="3.0" 的部分是您的 servlet 的版本。所以,我将我的答案限制在 servlet 版本以及为什么它如此重要。当您使用 Java EE 进行编程时,您可能知道 servlet 的版本控制着大多数其他标准。

    例如,

    JSF 2.0 需要 SERVLET 2.5 附带 JAVA EE5 和 WEBLOGIC 10.3.X 支持所有这些技术,对于其他容器,您应该查看发行说明。其次, JSF 2.1 需要 SERVLET 3.0 附带 JAVA EE6,WEBLOGIC 12c 支持所有这些技术。当然向后兼容是有保证的,但是大多数情况下可能会出现一些问题。

    当我们查看 weblogic 12c 发行说明时,我为 servlet 版本所支持的最重要的技术加注了星标。我希望 Miljen Mikic 的出色回答对您也有用。

    Standard    Version
    Contexts and Dependency Injection for Java EE   1.0
    Dependency Injection for Java EE    1.0
    Expression Language (EL)    2.2, 2.1, 2.0
    Only JSP 2.0 and greater supports Expression Language 2.x.
    JAAS    1.0 Full
    JASPIC  1.0
    Java API for XML-Based Web Services (JAX-WS)    2.2, 2.1, 2.0
    Java API for RESTful Web Services (JAX-RS)  1.1
    Java Authorization Contract for Containers (JACC)   1.4
    **Java EE   6.0**
    Java EE Application Deployment  1.2
    Java EE Bean Validation 1.1
    Jave EE Common Annotations  1.0
    Java EE Connector Architecture  1.6
    Java EE EJB 3.1
    Java EE Enterprise Web Services 1.3, 1.2, 1.1
    Jave EE Interceptors    1.1
    **Java EE JDBC  4.0, 3.0**
    Java EE JMS 1.1, 1.0.2b
    Java EE JNDI    1.2
    **Java EE JSF   2.1, 2.0, 1.2, 1.1**
    Java EE JSP 2.2, 2.1, 2.0, 1.2, and 1.1
    JSP 1.2. and 1.1 include Expression Language (EL), but do not support EL 2.x or greater.
    Java EE Managed Beans   1.0
    **Java EE Servlet   3.0, 2.5, 2.4, 2.3, and 2.2**
    Java RMI    1.0
    JavaMail    1.4
    JAX-B   2.2, 2.1, 2.0
    JAX-P   1.3, 1.2, 1.1
    JAX-R   1.0
    JAX-RPC 1.1
    JCE 1.4
    **JDKs  6.0 (aka 1.6), 5.0 (aka 1.5, clients only)**
    JMX 1.2, 1.0
    JPA 2.0, 1.0
    JSR 77: Java EE Management  1.1
    JSTL    1.2
    Managed Beans   1.0
    OTS/JTA OTS 1.2 and JTA 1.1
    RMI/IIOP    1.0
    SOAP Attachments for Java (SAAJ)    1.3, 1.2
    Streaming API for XML (StAX)    1.0
    Web Services Metadata for the Java Platform 2.0, 1.1
    

    【讨论】:

    • servlet 不是 Java 类吗?我们在 web.xml 中提供的版本是如何确定的?它不取决于我们正在使用的实现吗?你说:其次,JSF 2.1 需要 SERVLET 3.0,但是我已经成功使用了 jsf-impl-2.1.19,我的 web-xml 中的版本是 2.5?
    • 是的,你可能是对的,但我注意到 web.xml 的创建时间取决于你的 servlet 版本。您是否在您的应用中使用了旧版本 jsf 不支持的任何 jsf 2.1 功能?
    猜你喜欢
    • 2019-01-31
    • 2013-06-14
    • 2011-04-18
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 2010-10-29
    • 2012-04-24
    • 2018-01-23
    相关资源
    最近更新 更多