2016-04-28 32 views
1

我正在學習如何製作一個符合servlet 3.1的webapp,它將在JBoss wildfly 10上運行。我使用maven進行依賴關係,並且我不確定以下內容依賴做的正是,如果它們包含/不包含在servlet容器:javax.servlet.jsp-api的目的是什麼

 <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>。但是,爲什麼我需要包含這個jar?當我刪除它時,哪些類或文件會有錯誤?
  • 我不確定javax.servlet.jsp-api的作用。如果我不包含它,我的Hello World例子似乎運行得很好。這是做什麼的?我需要添加<scope>provided</scope>還是不?
  • JSTL不是由任何servlet容器提供的,所以它必須明確添加。這個jar確保和其他基本標記在我的jsp中正確處理。

回答

1

標記所提供的依賴關係將使其可用於編譯時和測試類路徑,但不會提供給運行時類路徑 - 正如您所說容器將在運行時提供這些API的實現。

  1. 如果你正在開發一個Web應用程序是不可能的,你將能夠在不使用和Servlet API類(HttpServletRequest的,HttpServletResponse的,過濾器等)做。雖然許多框架抽象了大部分Servlet API,但仍然有可能需要使用這些底層API。

  2. 是的,增加提供的範圍。但是,如果您正在通過擴展say,javax.servlet.jsp.tagext.TagSupport(儘管標記文件提供了一種更現代的方式來創建自定義標記)來創建自定義JSP標記,那麼您只需要在編譯時類路徑中使用它。 。

  3. 是的,是的。

+0

在依賴關係中擁有JSP API的另一個原因是,如果您使用的是Eclipse; Eclipse喜歡它,因爲它執行JSP文件的測試編譯以掃描它們以查找錯誤,所以如果不存在,則會出現諸如「PageContext」和其他基本JSP類型不可用的標識符錯誤。 – Jules