[英]RepositoryRestMvcConfiguration cannot be cast to javax.servlet.Servlet
[英]How to fix 'cannot be cast to javax.servlet.Servlet' error while trying to package REST App with Servlet
我正在嘗試使用基於 maven 的后端 java 項目將 Angular 7 設置為單個 war 文件。 目前,我正在嘗試配置當前遇到此問題的web.xml
文件。 我完全不確定我的方法是否有效或“好”,因此我將首先描述我正在嘗試做的事情(如果您在這方面認為更好,請糾正我)。
所以我有幾個JAX-RS
類,我想將它們用作REST API
。 為此,我創建了相應的javax.ws.rs.core.Application
類來提供這些 REST 組件。 然后我將Application
類包含在web.xml
文件中。 以下是文件:
網頁.xml
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>backend.backendservice.StammSolvaraJahrRestApplication</servlet-name>
<servlet-class>backend.backendservice.StammSolvaraJahrRestApplication</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>backend.backendservice.StammSolvaraJahrRestApplication</servlet-name>
<url-pattern>/rmz/*</url-pattern>
</servlet-mapping>
我嘗試過的另一種web.xml
變體
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>backend.backendservice.StammSolvaraJahrRestApplication</servlet-name>
<servlet-class>backend.backendservice.StammSolvaraJahrRestApplication</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>backend.backendservice.StammSolvaraJahrRestApplication</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>backend.backendservice.StammSolvaraJahrRestApplication</servlet-name>
<url-pattern>/rmz/*</url-pattern>
</servlet-mapping>
應用類
public class StammSolvaraJahrRestApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> sets = new HashSet<>();
sets.add(StammSolvaraJahrRest.class);
return sets;
}
}
我得到的錯誤是: java.lang.ClassCastException: backend.backendservice.StammSolvaraJahrRestApplication cannot be cast to javax.servlet.Servlet
如果我刪除<servlet-class>
那么我會得到No servlet class has been specified for servlet
. 我正在關注https://docs.oracle.com/cd/E24329_01/web.1211/e24983/configure.htm#RESTF183以及如何部署 JAX-RS 應用程序? 除其他外,但似乎不起作用。
問題正是它所說的。 web.xml 中的這一行需要一個javax.servlet.Servlet
:
<servlet-class>backend.backendservice.StammSolvaraJahrRestApplication</servlet-class>
由於Application
不是javax.servlet.Servlet
,因此在處理 XML 文件時,您會在運行時收到錯誤消息。
如果可以,我建議您從 Spring Boot 啟動器應用程序開始。 Spring Boot 為您處理所有這些。 它甚至可以在 jar 文件中嵌入一個 Tomcat 服務器,這樣您就可以像運行一個簡單的 Java 應用程序一樣運行您的服務器。 這樣做可以讓您不必擔心在這里處理的事情。
有兩種方法可以定義 JAX-RS servlet。
1) 使用您擁有的應用程序子類,您可以跳過 web.xml 配置並添加應用程序注釋
@ApplicationPath("resources")
public class StammSolvaraJahrRestApplication extends Application
2) 使用 web.xml 配置
<servlet>
<display-name>JAX-RS Servlet</display-name>
<servlet-name>package.hierarchy.StammSolvaraJahrRestApplication</servlet-name>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>package.hierarchy.StammSolvaraJahrRestApplication</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>JaxRSServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
如果您從最后一個跳過 servlet 映射,它將使用您的@ApplicationPath
指定值,或者如果前一個丟失,則使用"/resources"
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.