Maven2 사용법 메모 2(Tomcat에서 JAX-RS)

16682 단어 JAX-RS자바Maven
Maven에서 Tomcat에서 작동하는 웹 앱을 만드는 방법을 적어 두십시오.
단순한 서블릿만의 녀석과, JAX-RS(Jersey) 를 사용한 녀석의 2개를 작성한다.

환경



오 S



Windows7 64bit

자바



1.7.0_25

Tomcat



7.0.42

Jersey



2.2

간단한 서블릿 전용 웹 앱



프로젝트의 편지지 만들기



명령 프롬프트에서 임의의 폴더에서 다음 명령을 실행합니다.

편지지 만들기
>mvn archetype:create -DgroupId=com.example.servlet -DartifactId=servlet-sample -DarchetypeArtifactId=maven-archetype-webapp

다음과 같은 편지지가 출력됩니다.

만든 편지지의 구성
servlet-sample>tree /f
│  pom.xml
│
└─src
    └─main
        ├─resources
        └─webapp
            │  index.jsp
            │
            └─WEB-INF
                    web.xml

서블릿 구현


src/main/java/com/example/servlet 폴더를 만들고 SampleServlet.java를 만듭니다.

SampleServlet.java
package com.example.servlet;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;

import java.io.IOException;

@WebServlet("/sample")
public class SampleServlet extends HttpServlet {

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {
        ServletOutputStream os = res.getOutputStream();
        os.println("Sample Page");
    }
}

web.xml 삭제



서블릿의 매핑은 @WebServlet 어노테이션으로 지정하고 있으므로, sample-servlet/src/main/webapp/WEB-INF/web.xml 를 삭제한다.

pom.xml 편집


pom.xml 를 다음 내용으로 편집한다.

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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example.servlet</groupId>
  <artifactId>sample-servlet</artifactId>
  <packaging>war</packaging>
  <version>1.0</version>

  <name>Sample Maven Webapp</name>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.0.1</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <build>
    <finalName>sample-servlet</finalName>

    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>

      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-war-plugin</artifactId>
          <version>2.3</version>
          <configuration>
              <failOnMissingWebXml>false</failOnMissingWebXml>
          </configuration>
      </plugin>
    </plugins>
  </build>
</project>

failOnMissingWebXml 정보



이 설정을하지 않으면 war를 만들 때 web.xml가 없어서 오류가 발생합니다.web.xml 는 삭제하고 있으므로 failOnMissingWebXmlfalse 를 지정하고 있다.

war 만들기



다음 명령을 실행합니다.

war 만들기
sample-servlet>mvn package
target 폴더 아래에 sample-servlet.war 라는 war 파일이 출력됩니다.

동작 확인


sample-servlet.war를 Tomcat에 배포하고 Tomcat을 시작합니다.http://localhost:8080/sample-servlet/sample 에 브라우저로부터 액세스한다 (포트 번호는 적절히 읽어들여).



JAX-RS를 사용한 웹 앱



편지지 만들기



명령 프롬프트에서 임의의 폴더에서 다음 명령을 실행합니다.

편지지 만들기
>mvn archetype:create -DgroupId=com.example.jaxrs -DartifactId=jaxrs-sample -DarchetypeArtifactId=maven-archetype-webapp

JAX-RS 서비스 클래스 작성


src/main/java/com/example/jaxrs 폴더를 만들고 SampleResource.java를 만듭니다.

SampleResource.java
package com.example.jaxrs;

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

@Path("sample")
public class SampleResource {

    @GET
    public String sample() {
        return "Sample Resource";
    }
}

web.xml에 Jersey 서블릿 등록



web.xml
<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
  <display-name>JAX-RS Sample Application</display-name>

  <servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>jersey.config.server.provider.packages</param-name>
      <param-value>com.example.jaxrs</param-value>
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>Jersey Web Application</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>

</web-app>

설명


init-param 로 지정하고 있는 jersey.config.server.provider.packages 에는, JAX-RS 의 서비스 클래스를 검색하는 패키지를 지정한다.
서비스 클래스의 검색은 서브 패키지도 재귀 적으로 실행된다.

검색 패키지 지정
    <init-param>
      <param-name>jersey.config.server.provider.packages</param-name>
      <param-value>com.example.jaxrs</param-value>
    </init-param>

여러 패키지를 지정하려면 세미콜론 (;) 구분 기호로 열거 할 수 있습니다.

여러 검색 패키지
    <init-param>
      <param-name>jersey.config.server.provider.packages</param-name>
      <param-value>com.hoge.jaxrs;com.fuga.jaxrs</param-value>
    </init-param>

pom.xml 편집


pom.xml 를 다음과 같이 편집한다.

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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example.jaxrs</groupId>
  <artifactId>jaxrs-sample</artifactId>
  <packaging>war</packaging>
  <version>1.0</version>

  <name>JAX-RS Maven Webapp</name>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <!-- Servlet コンテナのバージョンが 3.0 より古い場合は "jersey-container-servlet-core" を指定する -->
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.2</version>
    </dependency>
  </dependencies>

  <build>
    <finalName>jaxrs-sample</finalName>

    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
    </plugins>

  </build>
</project>

war 만들기



다음 명령을 실행합니다.

war 만들기
jaxrs-servlet>mvn package
target 폴더 아래에 jaxrs-servlet.war 라는 war 파일이 출력됩니다.

동작 확인


jaxrs-servlet.war를 Tomcat에 배포하고 Tomcat을 시작합니다.http://localhost:8080/jaxrs-servlet/rest/sample 에 브라우저로부터 액세스한다 (포트 번호는 적절히 읽어들여).



참고


  • 5. Maven에 의한 실제 어플리케이션 개발 | TECHSCORE(텍스 코어)
  • Chapter 2. Modules and dependencies
  • Chapter 4. Deploying a RESTful Web Service
  • Jersey + Tomcat에서 REST 서비스 at technote
  • 좋은 웹페이지 즐겨찾기