为了账号安全,请及时绑定邮箱和手机立即绑定

尝试使用 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 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信