一尘不染

javax.servlet.jsp-api的用途是什么

jsp

我正在学习如何制作可在JBoss wildfly 10上运行的servlet
3.1兼容的webapp。我将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容器提供,因此我可以<scope>provided</scope>在Maven中添加。但是,为什么我需要包括这个jar?删除哪些类或文件会有错误?
  • 我不确定javax.servlet.jsp-api做什么。如果不包含我的hello world示例,则该示例运行良好。这是做什么的?我是否需要添加<scope>provided</scope>
  • Servlet容器不提供JSTL,因此必须显式添加。这个jar可以确保<c:xxx>在我的jsp中正确处理了和其他基本标签。

阅读 3224

收藏
2020-06-08

共1个答案

一尘不染

将提供的依赖项标记为将提供给编译时和测试类路径,而不是运行时类路径-就像您说的那样,容器将在运行时提供这些API的实现。

  1. 如果您正在开发Web应用程序,那么不使用Servlet API中的类(HttpServletRequest,HttpServletResponse,Filter等)的可能性就很小。尽管许多框架抽象了许多Servlet API,但仍可能需要您使用这些底层API。

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

  3. 是的,是的。

2020-06-08