我正在尝试创建一个简单的REST api,我遵循了Jersey网站上的教程:https://jersey.java.net/nonav/documentation/2.0/deployment.html
以下是错误:
原因:javax.servlet.unavailableException:org.eclipse.jetty.servlet.baseholder.doStart(baseholder.java:88)org.eclipse.jetty.servlet.servlet.servletholder.doStart(servletholder.java:361)org.eclipse.jetty.util.component.abstractlifecycle.start(abstractlifecycle.java:68)org.eclipse.jetty.servlet.servlethandler.initialize(
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<display-name>My JAX-RS Servlet</display-name>
<servlet-name>MyJaxRsApp</servlet-name>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.example.flexible.helloworld.MyApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MyJaxRsApp</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
REST资源类
package com.example.flexible.helloworld;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Application;
public class MyJaxRsApplication {
/**
* Method handling HTTP GET requests. The returned object will be sent
* to the client as "text/plain" media type.
*
* @return String that will be returned as a text/plain response.
*/
@GET
@Path("helloworld")
@Produces(MediaType.TEXT_PLAIN)
public String getIt() {
return "Got it!";
}
}
应用程序“根”
package com.example.flexible.helloworld;
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
public class MyApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> s = new HashSet<Class<?>>();
s.add(MyJaxRsApplication.class);
return s;
}
}
pom.xml
<!-- [START project] -->
<project>
<modelVersion>4.0.0</modelVersion>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<groupId>org.myproject</groupId>
<artifactId>myproject-0.0</artifactId>
<properties>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
<appengine.maven.plugin>0.1.1-beta</appengine.maven.plugin>
<jetty-maven-plugin-version>9.3.7.v20160115</jetty-maven-plugin-version>
<failOnMissingWebXml>false</failOnMissingWebXml>
</properties>
<!-- [START dependencies] -->
<dependencies>
<!-- REST framework -->
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.23.2</version>
</dependency>
</dependencies>
<!-- [END dependencies] -->
<build>
<!-- for hot reload of the web application -->
<outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>${appengine.maven.plugin}</version>
<configuration>
<!-- deploy configuration -->
<deploy.promote>true</deploy.promote>
<deploy.stopPreviousVersion>true</deploy.stopPreviousVersion>
</configuration>
</plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty-maven-plugin-version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</build>
</project>
<!-- [END project] -->
我实际上是在Google AppEngine的helloworld示例上构建了这个示例,它使用了jetty,所以我部署它的方式是'mvn clean jetty:run-breasly'。按照我的理解,jetty是一个Web服务器/servlet容器。但我这里有servlet吗?一个是隐式创建的吗?
此外,我查找了错误,发现需要定义
。泽西岛的文件也提到了这一点。但是当我添加
行时,我在localhost:8080/helloworld得到resource not found
。此外,Servlet3.0不需要定义
(在Jersey的文档中也提到过)。
在没有web.xml的情况下设置JAX-RS应用程序配置
使用ResourceConfig(不需要web.xml)
@javax.ws.rs.ApplicationPath(ResourcePath.API_ROOT)
public class ApplicationConfig extends ResourceConfig {
public ApplicationConfig() {
//register the necessary headers files needed from client
register(CORSConfigurationFilter.class);
//The jackson feature and provider is used for object serialization
register(JacksonFeature.class);
register(JacksonProvider.class);
//inject and registered all resources class using the package
packages("com.example.myapi.package");
}
@Override
public Collection<String> getPropertyNames() {
return super.getPropertyNames();
}
}
问题内容: 在详尽搜索了Web和Stackoverflow之后,我仍然坚持尝试找出如何将Jersey所提供的RESTlet风格界面与Jetty相集成的方法。 我的Jetty服务器已经启动并正在运行,因此Jersey也很容易使用,有人知道如何将两者结合在一起吗?任何具体的链接都会有所帮助- 我对servlet编程也很陌生。 问题答案: 我前一段时间使用Jetty和Jersey创建了一个应用程序。它实
我想使用Java websocket与Repast simphony但它不工作,我得到以下错误: 有人能解释一下如何解决这个错误吗?谢谢 我测试了从互联网上获取的代码,如果我不使用repast simphony运行它,它就能正常工作 我的服务器
webresources定义如下。这个类是由NetBeans自动添加的。
JAX-RS是否可以只使用带有注释的Servlet3.0(特别是Tomcat7)来实现,而不必实现另一个Servlet容器? 如果不是,请解释为什么下面这本书中的引用是不正确的,或者是我对它的解释是错误的。 因为此示例部署在Java EE应用程序服务器或独立的Servlet3.x容器中,所以我们只需要一个空的web.xml文件。服务器将检测到某个应用程序类在您的WAR中,并自动部署它。(带有JAX
JAX-RS (JSR 311) 是一个社区驱动的标准用于使用 Java 构建 RESTful Web 服务。
问题内容: 我只是熟悉使用JAX-RS在Java中实现REST Web服务,因此遇到了以下问题。我的资源类之一要求访问存储后端,该后端在接口后被抽象化。我想将当前实例注入到服务REST请求的资源类中,并且我认为这样做的一种好方法是使用批注和适当的类。这是我到目前为止所拥有的: 在: 在: 我用来自动发现提供程序和资源类,并且根据日志,它很好地拾取了该类(故意遗漏了时间戳和不必要的内容): 但是,资