javax.servlet.jsp-api的目的是什么?

时间:2016-04-28 14:12:05

标签: java maven jsp servlets wildfly

我正在学习如何制作符合servlet 3.1的webapp,它将在JBoss wildfly 10上运行。我使用maven作为依赖项,我不确定以下依赖项的确切做法,以及它们是否包含/不包括在内在servlet容器中:

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${servlet.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.1</version>
        </dependency>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>${jstl.version}</version>
        </dependency>

我已经进行了一些谷歌搜索,希望验证或完成以下信息:

  • servlet api由servlet容器提供,因此我可以在Maven中添加<scope>provided</scope>。但是,为什么我需要包含这个罐子?删除后哪些类或文件会出错?
  • 我不确定javax.servlet.jsp-api是做什么的。如果我不包含它,我的hello world示例似乎运行得很好。这是做什么的?我是否需要添加<scope>provided</scope>
  • 任何servlet容器都不提供JSTL,因此必须明确添加它。这个jar确保在我的jsp中正确处理<c:xxx>和其他基本标记。

1 个答案:

答案 0 :(得分:3)

标记提供的依赖项将使其可用于编译时和测试类路径,但不能用于运行时类路径 - 正如您所说,容器将在运行时提供这些API的实现。

  1. 如果您正在开发Web应用程序,则不可能不使用Servlet API(HttpServletRequest,HttpServletResponse,Filter等)中的类。虽然许多框架抽象掉了大部分Servlet API,但仍然可能需要使用这些底层API。

  2. 是的,添加范围。但是,如果您通过扩展say,javax.servlet.jsp.tagext.TagSupport创建自定义JSP标记,那么您只需要在编译时类路径中使用它(尽管标记文件提供了一种更现代的方法来创建自定义标记)

  3. 是的,是的。