2016-06-12 4 views
1

Я новичок в Джерси и пытаюсь настроить базовый webapp, используя Tomcat и eclipse. Я просмотрел множество руководств и примеров, но они все разные, или опустить часть процесса (например, с Spring, с файлом web.xml, развертывание приложения, отличного от Джерси, на Tomcat и т. Д.).Основная полная конфигурация для Джерси на Tomcat в eclipse

Вот где я до сих пор:

Я создал динамический веб-проект под названием TestProject в затмении, и превратил его в проект Maven.

server modules

Вот мой pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>test</groupId> 
<artifactId>test</artifactId> 
<version>0.0.1-SNAPSHOT</version> 

<packaging>war</packaging> 

<build> 
    <sourceDirectory>src</sourceDirectory> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.3</version> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.6</version> 
      <configuration> 
       <warSourceDirectory>WebContent</warSourceDirectory> 
       <failOnMissingWebXml>false</failOnMissingWebXml> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <jersey.version>2.23.1</jersey.version> 
</properties> 

<dependencies> 

    <dependency> 
     <groupId>org.glassfish.jersey.core</groupId> 
     <artifactId>jersey-server</artifactId> 
     <version>${jersey.version}</version> 
     <scope>provided</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.glassfish.jersey.containers</groupId> 
     <artifactId>jersey-container-servlet</artifactId> 
     <version>${jersey.version}</version> 
     <scope>provided</scope> 
    </dependency> 

    <!-- POJO to JSON support --> 
    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-json-jackson</artifactId> 
     <version>${jersey.version}</version> 
    </dependency> 

    <!-- required to run without web.xml on Tomcat --> 
    <dependency> 
     <groupId>org.glassfish.jersey.bundles</groupId> 
     <artifactId>jaxrs-ri</artifactId> 
     <version>${jersey.version}</version> 
    </dependency> 

</dependencies> 

У меня есть пакет com.test который содержит 3 класса:

TestApplication для создания приложения без web.xml :

@ApplicationPath("/*") 
public class TestApplication extends ResourceConfig { 

    public TestApplication(){ 
     packages("com.test"); 
     register(JacksonFeature.class); 
    } 

} 

TestProvider в качестве минимального класса ресурса:

@Path("/test") 
public class TestProvider { 

    @GET 
    @Produces("application/json") 
    public Test getTest(){ 
     return new Test(); 
    } 

} 

Test как минимальный объект, чтобы вернуться в формате JSON:

public class Test { 

    private String field = "test"; 

} 

У меня есть сервер Tomcat работает с проектом добавленным в качестве веб-модуля , Если я запускаю проект (Run As> Run на сервере) и перейдите к http://localhost:8080/test или http://localhost:8080/TestProject/test я получить стандартный 404.

Tomcat

Вот мой Tomcat журнала запуска:

jun 14, 2016 11:29:06 PM org.apache.tomcat.util.digester.SetPropertiesRule begin 
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:TestProject' did not find a matching property. 
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Server version:  Apache Tomcat/8.0.35 
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Server built:   May 11 2016 21:57:08 UTC 
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Server number:   8.0.35.0 
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: OS Name:    Windows 7 
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: OS Version:   6.1 
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Architecture:   amd64 
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Java Home:    C:\Program Files\Java\jre1.8.0_71 
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: JVM Version:   1.8.0_71-b15 
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: JVM Vendor:   Oracle Corporation 
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: CATALINA_BASE:   C:\Users\tim\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0 
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: CATALINA_HOME:   C:\Users\tim\workspace\apache-tomcat-8.0.35 
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Command line argument: -Dcatalina.base=C:\Users\tim\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0 
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Command line argument: -Dcatalina.home=C:\Users\tim\workspace\apache-tomcat-8.0.35 
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Command line argument: -Dwtp.deploy=C:\Users\tim\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps 
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Command line argument: -Djava.endorsed.dirs=C:\Users\tim\workspace\apache-tomcat-8.0.35\endorsed 
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.VersionLoggerListener log 
INFO: Command line argument: -Dfile.encoding=Cp1252 
jun 14, 2016 11:29:06 PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent 
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre1.8.0_71\bin;C:\windows\Sun\Java\bin;C:\windows\system32;C:\windows;C:/Program Files/Java/jre1.8.0_71/bin/server;C:/Program Files/Java/jre1.8.0_71/bin;C:/Program Files/Java/jre1.8.0_71/lib/amd64;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\ImageMagick-6.9.1-Q16;C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\ProgramFiles\apache-maven-3.2.5\bin;C:\Program Files (x86)\Skype\Phone\;C:\Program Files\eclipse;;. 
jun 14, 2016 11:29:06 PM org.apache.coyote.AbstractProtocol init 
INFO: Initializing ProtocolHandler ["http-nio-8080"] 
jun 14, 2016 11:29:06 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector 
INFO: Using a shared selector for servlet write/read 
jun 14, 2016 11:29:06 PM org.apache.coyote.AbstractProtocol init 
INFO: Initializing ProtocolHandler ["ajp-nio-8009"] 
jun 14, 2016 11:29:06 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector 
INFO: Using a shared selector for servlet write/read 
jun 14, 2016 11:29:06 PM org.apache.catalina.startup.Catalina load 
INFO: Initialization processed in 941 ms 
jun 14, 2016 11:29:06 PM org.apache.catalina.core.StandardService startInternal 
INFO: Starting service Catalina 
jun 14, 2016 11:29:06 PM org.apache.catalina.core.StandardEngine startInternal 
INFO: Starting Servlet Engine: Apache Tomcat/8.0.35 
jun 14, 2016 11:29:07 PM org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom 
INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [187] milliseconds. 
jun 14, 2016 11:29:07 PM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["http-nio-8080"] 
jun 14, 2016 11:29:07 PM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["ajp-nio-8009"] 
jun 14, 2016 11:29:07 PM org.apache.catalina.startup.Catalina start 
INFO: Server startup in 668 ms 

Если я создаю не- Джерси HttpServlet с аннотацией @WebServlet(name="hello",urlPatterns={"/hello"}), я получаю ответ на http://localhost:8080/TestProject/hello.

Что мне не хватает? Кроме того, является ли какой-либо из вышеперечисленных не «лучшей практикой» для базового веб-приложения? Похоже, эта технология меняется довольно быстро, и трудно понять, какие примеры или методы устарели.

ответ

1

Джерси 2 Tomcat 8, Java-8 & сервлетов 3.0 Базовая минимальная конфигурация

http://localhost: {порт}, чтобы получить доступ к менеджеру TOMCAT. Вы можете войти в систему, чтобы найти свой контекстный путь.

Acces приложение по адресу:

http://localhost: {порт}/{контекста путь}/{URL-шаблон}/{ресурсов путь}

ПОМ.XML

<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
    http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>jersey2</groupId> 
    <artifactId>jersey2</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 
    <build> 
    <sourceDirectory>src</sourceDirectory> 
    <plugins> 
     <plugin> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.3</version> 
     <configuration> 
      <source>1.8</source> 
      <target>1.8</target> 
     </configuration> 
     </plugin> 
     <plugin> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>2.6</version> 
     <configuration> 
      <warSourceDirectory>WebContent</warSourceDirectory> 
      <failOnMissingWebXml>false</failOnMissingWebXml> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <jersey.version>2.23.1</jersey.version> 
</properties> 

<dependencies> 

    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-json-jackson</artifactId> 
     <version>${jersey.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.glassfish.jersey.core</groupId> 
     <artifactId>jersey-server</artifactId> 
     <version>${jersey.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.glassfish.jersey.containers</groupId> 
     <artifactId>jersey-container-servlet</artifactId> 
     <version>${jersey.version}</version> 
    </dependency> 

</dependencies> 

Применение

package com.test; 

import javax.ws.rs.ApplicationPath; 
import org.glassfish.jersey.jackson.JacksonFeature; 
import org.glassfish.jersey.server.ResourceConfig; 

@ApplicationPath("/*") 
public class TestApplication extends ResourceConfig { 

    public TestApplication(){ 
     packages("com.test"); 
     register(JacksonFeature.class); 
    } 

} 

Ресурс

package com.test; 

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 

@Path("/test") 
public class TestResource { 

    @GET 
    @Produces("application/json") 
    public Test getTest(){ 
     Test bean = new Test(); 
     bean.setName("Jersey"); 
     bean.setVersion("2.0"); 
     bean.setServlet("3.0"); 
     return bean; 
    } 

} 

Test Bean

package com.test; 

public class Test { 

    private String name; 
    private String version; 
    private String servlet; 

    public String getName() { 
    return name; 
    } 

    public void setName(String name) { 
    this.name = name; 
    } 

    public String getVersion() { 
    return version; 
    } 

    public void setVersion(String version) { 
    this.version = version; 
    } 

    public String getServlet() { 
    return servlet; 
    } 

    public void setServlet(String servlet) { 
    this.servlet = servlet; 
    } 
} 
+0

Это стиль, кажется, не работает. Какой URL я должен использовать с этими классами? Проект называется «TestProject», но «http: // localhost: 8080/TestProject/test» дает ошибку 404. Кроме того, вы добавили некоторые настройки в объект 'Test' (например,' setName' .Какой класс расшифровывает 'Test' в этом случае? – tb189

+0

, вы должны иметь возможность просмотреть свой контекстный путь в менеджере tomcat. тестовый класс, его просто bean. – Veeram

+0

Мой контекстный путь должен быть TestProject (я добавил скриншот в свой вопрос). Тем не менее, 'http: // localhost: 8080/TestProject/test' дает 404. Какой URL-адрес вы переместиться в ваш пример? – tb189

0

Добавление к ответу, если вы используете Джексон, то зависимость уже упоминаются как джерси-медиа-JSon-Джаксон -

<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-json-jackson</artifactId> 
    <version>${jersey.version}</version> 
</dependency> 

Есть другие поставщики JSON, а также.

Если вы хотите использовать Moxy в качестве реализации JAXB, то вы можете использовать

<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-moxy</artifactId> 
    <version>${jersey.version}</version> 
</dependency> 

Для использования JSON-P в качестве поставщика JSON вам нужно добавить

<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-json-processing</artifactId> 
    <version>${jersey.version}</version> 
</dependency> 

Чтобы использовать отстрелить, как ваш провайдер JSON вам необходимо добавить модуль джерси-медиа-JSON-отстрелить в файл pom.xml:

<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-json-jettison</artifactId> 
    <version>${jersey.version}</version> 
</dependency> 

Для того, чтобы использовать многокомпонентные функции, которые нужно добавить джерси-медиа-многослойную модуль в файл pom.xml:

<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-multipart</artifactId> 
    <version>${jersey.version}</version> 
</dependency> 

Более подробную информацию, пожалуйста, обратитесь к https://jersey.java.net/documentation/latest/media.html

Смежные вопросы