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

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

 javax.servlet javax.servlet-api ${servlet.version} provided   javax.servlet.jsp javax.servlet.jsp-api 2.3.1   jstl jstl ${jstl.version}  

我已经做了一些谷歌搜索,希望validation或完成以下信息:

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

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

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

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

  3. 是的,是的。