首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在tomcat 10上部署JAX web服务?

如何在tomcat 10上部署JAX web服务?
EN

Stack Overflow用户
提问于 2022-08-14 18:21:15
回答 1查看 224关注 0票数 1

我正在尝试使用java创建我的第一个RESTFull web服务应用程序。我安装了postgres,netbeans 14,jdk-18.0.2和tomcat 10。我已经从数据库创建了一个maven java web应用程序和一些RESTfull web服务(从数据库中选择新的-> RestFull web服务)。

Netbeans为我创建了以下几个类:

代码语言:javascript
复制
@Stateless
@Path("task")
public class TaskFacadeREST extends AbstractFacade<Task> {

    @PersistenceContext(unitName = "com.mycorp_testproject_war_1.0-SNAPSHOTPU")
    private EntityManager em;

    public TaskFacadeREST() {
        super(Task.class);
    }

    @POST
    @Override
    @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public void create(Task entity) {
        super.create(entity);
    }

Entity
@Table(name = "TASK")
@NamedQueries({
    @NamedQuery(name = "Task.findAll", query = "SELECT t FROM Task t"),
    @NamedQuery(name = "Task.findById", query = "SELECT t FROM Task t WHERE t.id = :id"),
    @NamedQuery(name = "Task.findByProjectId", query = "SELECT t FROM Task t WHERE t.projectId = :projectId"),
    @NamedQuery(name = "Task.findByTypeId", query = "SELECT t FROM Task t WHERE t.typeId = :typeId")})
public class Task implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "ID")
    private Long id;

和应用程序控制类:

代码语言:javascript
复制
@javax.ws.rs.ApplicationPath("webresources")
public class ApplicationConfig extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> resources = new java.util.HashSet<>();
        addRestResourceClasses(resources);
        return resources;
    }

    /**
     * Do not modify addRestResourceClasses() method.
     * It is automatically populated with
     * all resources defined in the project.
     * If required, comment out calling this method in getClasses().
     */
    private void addRestResourceClasses(Set<Class<?>> resources) {
        resources.add(com.mycorp.testproject.service.LinkTypeFacadeREST.class);
        resources.add(com.mycorp.testproject.service.ProjectFacadeREST.class);
        resources.add(com.mycorp.testproject.service.TaskFacadeREST.class);
        resources.add(com.mycorp.testproject.service.TaskLinkFacadeREST.class);
        resources.add(com.mycorp.testproject.service.TaskTypeFacadeREST.class);
    }
    
}

然后,在我设法修复的项目路径、依赖关系、构建过程、pom.xml和插件版本中出现了一些错误。现在我的项目可以成功部署,并显示“你好世界”索引页面。但是rest服务端点仍然返回404错误。

我自己想做的事:

project)

  • Configure

  • 将JAX-容器-servlet添加到pom.xml (因为我已经找到了一个类似问题的答案,说明tomcat是web服务器,而不是glassfish那样的应用服务器,它需要JAX-RS库与 web.xml一起部署,以显式地为Tomcat定义端点,以防出现注释方面的问题(显然,我不知道配置RestfullWeb服务的部署描述符的正确方法,所以这显然是空中楼阁,但无论如何都值得一试)

代码语言:javascript
复制
    <servlet>
        <display-name>Task RESTfull web service</display-name>
        <servlet-name>TaskService</servlet-name>
        <servlet-class>com.mycorp.testproject.service.TaskFacadeREST</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.mycorp.testproject.service.ApplicationConfig</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>TaskService</servlet-name>
        <url-pattern>/webresources/task</url-pattern>
    </servlet-mapping>

第一个选项没有帮助,第二个返回的错误是TaskFacadeREST类不是servlet类。

现在我完全被困住了,找不到任何关于将JAX端点部署到Tomcat的教程,也不知道该走哪条路。感谢任何信息,文档或教程链接,下一步做什么,因为netbeans教程是基于玻璃鱼,不包含任何有关此类问题的信息。

EN

回答 1

Stack Overflow用户

发布于 2022-08-17 07:39:28

Tomcat 10实现了从Jakarta 9开始的API。您似乎在使用JavaEE8API。javax 8和Jakarta 9之间有一个重大的包更改(javax.* -> jakarta.*)。

在Tomcat 9上部署,而不是在Tomcat 10上部署,应该会有所改进。

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

https://stackoverflow.com/questions/73354145

复制
相关文章

相似问题

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