亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

嘗試使用 Servlet 打包 REST 應用程序時如何修復“無法轉換為 javax.servlet

嘗試使用 Servlet 打包 REST 應用程序時如何修復“無法轉換為 javax.servlet

慕田峪4524236 2023-03-17 17:30:57
我正在嘗試將帶有基于 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 應用程序?除其他外,但它似乎沒有用。
查看完整描述

2 回答

?
慕桂英546537

TA貢獻1848條經驗 獲得超10個贊

有兩種定義 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"如果前一個丟失。


查看完整回答
反對 回復 2023-03-17
?
慕的地10843

TA貢獻1785條經驗 獲得超8個贊

問題就是它所說的。web.xml 中的這一行需要javax.servlet.Servlet

<servlet-class>backend.backendservice.StammSolvaraJahrRestApplication</servlet-class>

由于 anApplication不是javax.servlet.Servlet,因此在處理 XML 文件時會在運行時出現錯誤。

如果可以,我建議您從 Spring Boot 啟動應用程序開始。Spring Boot 為您處理所有這些。它甚至可以將 Tomcat 服務器嵌入到 jar 文件中,這樣您就可以像運行簡單的 Java 應用程序一樣運行您的服務器。這樣做可以讓您不必擔心在這里要處理什么。


查看完整回答
反對 回復 2023-03-17
  • 2 回答
  • 0 關注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號