![](/img/trans.png)
[英]The ultimate Java version table (J2EE, Java EE, Servlet, JSP, JSTL)
[英]What maven dependencies needs for Servlet, JSP and JSTL in Java EE 7?
我想使用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>
2.沒有標准標簽且沒有JSTL的JSP:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
</dependency>
3.對於帶有標准標簽的JSP“c:”
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
4.對於帶有JSTL的JSP
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>runtime</scope>
</dependency>
您知道此信息包含的規范嗎?
有多種選擇。 正如問題中所建議的,一種方法是導入整個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>
問題意味着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>
與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>
雖然問題中顯示的舊位置繼續正常工作。 據推測,如果將來對此庫進行任何更新,它們將包含在此組/工件ID中,因為它似乎旨在適合所有其他最新工件。 與其他工件不同,容器不提供JSTL,因此范圍不應設置為“提供”,而不是其他工件。
您不應該將這些依賴項添加到項目中。 J2EE規范的實例化(例如servlet)應由應用程序服務器的運行時提供。
在Eclipse中,為應用程序服務器添加服務器運行時。 右鍵單擊項目,然后選擇“屬性”。 然后構建路徑>添加庫>服務器運行時。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.