首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Tomcat7 /泽西2.25 / Servlet 2.5升级到Tomcat 10 /泽西3.0.8 / Servlet 5时发生404错误

从Tomcat7 /泽西2.25 / Servlet 2.5升级到Tomcat 10 /泽西3.0.8 / Servlet 5时发生404错误
EN

Stack Overflow用户
提问于 2022-09-12 20:21:42
回答 2查看 49关注 0票数 1

我在Tomcat上运行了一个泽西应用程序,我们已经用了好几年了。我们目前正在升级到Java 11和Tomcat 10,这需要Servlet5.0和Jersey3.0.8

在满足了所有的编译需求,以及任何“未找到类”的运行时错误之后,我遇到了一个问题,我一整天都在对它大发雷霆。无论我尝试什么,我都会得到404错误。

我尝试从ResourceConfig中更改原始应用程序:

代码语言:javascript
复制
public class AppConfig extends ResourceConfig {

    public AppConfig() {
        packages("com.carpart.webservices.rest.oauth");
        property(JspMvcFeature.TEMPLATE_BASE_PATH, "/");
        register(JspMvcFeature.class);
    }
}

到应用程序的子类,重写getClasses:

代码语言:javascript
复制
    public class AppConfig extends Application {
        
        @Override
        public Set<Class<?>> getClasses() {
            Set<Class<?>> s = new HashSet<Class<?>>();
            s.add( Connect.class );
            return s;
        }
        
    }

我尝试过不同的web.xml变体,从最初的过滤器到泽西文档的措辞:

原件:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

<filter>
    <filter-name>Jersey</filter-name>
    <filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.carpart.webservices.rest.oauth.AppConfig</param-value>
    </init-param>
  </filter>

  <filter-mapping>
    <url-pattern>/*</url-pattern>
    <filter-name>Jersey</filter-name>
  </filter-mapping>
</web-app>

新的:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="5.0"
    xmlns="https://jakarta.ee/xml/ns/jakartaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  
    <servlet>
        <servlet-name>com.carpart.webservices.rest.oauth.AppConfig</servlet-name>
    </servlet>
     
    <servlet-mapping>
        <servlet-name>com.carpart.webservices.rest.oauth.AppConfig</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
 
 </web-app>

我尝试将应用程序上的@ApplicationPath设置为从"/“到"/*”到"/api“的各种值,以查看是否可以得到一些不同的反应。

Connect类的定义如下:

代码语言:javascript
复制
@Path("/connect")
public class Connect {

    @GET
    @Path("/authorize")
    @Produces(MediaType.TEXT_HTML)
    public Response authorize(@QueryParam("client_id") String client_app_id ) {
        log.debug("Inside authorize (phase 1) GET method...");
    }
}

Connect资源类没有更改。从我们所拥有的。

在配置和部署方面,我已经多次阅读了Jersey3.0.8文档,但我不知道哪里出了问题。

EN

回答 2

Stack Overflow用户

发布于 2022-09-13 00:11:58

代码语言:javascript
复制
<init-param>
    <param-name>javax.ws.rs.Application</param-name>
    <param-value>com.carpart.webservices.rest.oauth.AppConfig</param-value>
</init-param>

如果您使用的是泽西3,那么需要将javax更改为jakarta。再也没有Javax了。

票数 0
EN

Stack Overflow用户

发布于 2022-09-13 13:26:34

好吧,所以我发现问题了!(谢谢保罗,你在代码下面的评论引发了我今天早上的想法!)

我仍然在我的Connect类中为注释包括javax.*路径类。我删除了它们,并将它们全部导入为jakarta.ws.rs.*,它将Connect类识别为资源。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73694876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档