Java EE 7中的Servlet,JSP和JSTL需要哪些maven依赖项?

Ale*_* Ya 6 java jsp jstl java-ee maven

我想使用SDK Java EE 7,Glassfish 4和Maven.
这是对的吗?请注意范围.

1.对于servlet:

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
    <scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

2.没有标准标签且没有JSTL的JSP:

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>jsp-api</artifactId>
  <version>2.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

3.对于带有标准标签的JSP"c:"

<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

4.对于带有JSTL的JSP

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
    <scope>runtime</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

您知道此信息包含的规范吗?

Jul*_*les 9

有多种选择.正如问题中所建议的,一种方法是导入整个Java EE API.但你也可以更有选择性.您可以只包含servlet API(这适用于servlet API 3.0.1;更新版本可用于相同的工件数据,但旧版本使用工件ID servlet-api代替):

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
        <scope>provided</scope>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

问题意味着JSTL包还引入了相关的JSP依赖关系; 情况并非如此:如果您需要使用JSP API,则需要依赖它(但值得注意的是,您不一定需要它,如本问题所述).您应该使用与您正在使用的Servlet API版本匹配的正确版本的JSP API,因此对于上面显示的servlet API 3.0.1,您应该使用2.2:

    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.2</version>
        <scope>provided</scope>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

与Servlet API一样,JSP API的依赖数据也发生了变化.在这种情况下,对于早于2.0的版本,组ID是正确的javax.servlet,而对于低于2.2的版本,工件ID已更改为javax.servlet.jsp-api.

对于JSTL,您几乎肯定会使用1.2版本.此版本的新标准位置为:

    <dependency>
        <groupId>javax.servlet.jsp.jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

虽然问题中显示的旧位置继续正常工作.据推测,如果将来对此库进行任何更新,它们将包含在此组/工件ID中,因为它似乎旨在适合所有其他最新工件.与其他工件不同,容器不提供JSTL,因此范围不应设置为"提供",而不是其他工件.


Kev*_*sox 7

您不应该将这些依赖项添加到项目中.J2EE规范的实例化(例如servlet)应由应用程序服务器的运行时提供.

在Eclipse中,为应用程序服务器添加服务器运行时.右键单击项目,然后选择"属性".然后构建路径>添加库>服务器运行时.

  • 这个答案是完全错误的.Maven构建Web应用程序而不参考服务器运行时,因此无论您运行哪种服务器,都确实需要有关哪些API可用的信息. (5认同)