자바 어플리케이션을 서버에서 실행하기 위해서는 기존에 톰캣 서버를 이용했었는데, 이는 상당히 많은 세팅을 요하는 부분들이 있어서 요새 많은 곳에서 사용하고 있는 jetty 내장서버를 이용해서 작업을 시도해 보았습니다.
1. 개발 환경
eclipse Indigo (m2 maven plugin 설치)
jetty 8.1.0
maven 3.0.3
2. eclipse에 maven project 만들기
(아래는 단계가 아니라 둘 중의 하나를 선택할 수 있습니다.)
2.1. 터미널
mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp
2.2. eclipse
3. pom.xml 파일 수정하기
3.1. jetty version
<properties>
<jetty.version>8.1.0.v20120127</jetty.version>
</properties>
3.2. maven repository
<repositories>
<repository>
<id>repo2_maven_org</id>
<url>http://repo2.maven.org/maven2</url>
</repository>
</repositories>
3.3. dependency (필요한 라이브러리)
<!-- 이 부분은 jetty 서버 실행을 위한 라이브러리 -->
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>${jetty.version}</version>
</dependency>
<!-- 이 부분은 서블릿 추가를 위한 라이브러리 -->
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>${jetty.version}</version>
</dependency>
3.4. embedded jetty가 아닌 war 형태로 만들어서 jetty 서버에서 실행할 때 필요
<plugins>
<plugin>
<!-- This plugin is needed for the servlet example -->
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty.version}</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution><goals><goal>java</goal></goals></execution>
</executions>
<configuration>
<mainClass>com.example.web.HelloWorld</mainClass>
</configuration>
</plugin>
</plugins>
4. jetty 서버 실행 소스 코드
아래의 코드를 main 함수에 등록해 주면 됩니다.
4.1. 서버 등록
Server server = new Server(8080);
4.2. Context 등록
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
4.3. 핸들러 등록
server.setHandler(context);
4.4. 서블릿 등록
context.addServlet(new ServletHolder(new HelloServlet()),"/en/*");
context.addServlet(new ServletHolder(new HelloServlet("Buongiorno Mondo")),"/it/*");
context.addServlet(new ServletHolder(new HelloServlet("Bonjour le Monde")),"/fr/*");
4.5. 서버 시작
server.start();
server.join();
4.6. 전체 코드
public static void main(String[] args) throws Exception
{
Server server = new Server(8080);
//server.setHandler(new HelloWorld());
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
server.setHandler(context);
context.addServlet(new ServletHolder(new HelloServlet()),"/en/*");
context.addServlet(new ServletHolder(new HelloServlet("Buongiorno Mondo")),"/it/*");
context.addServlet(new ServletHolder(new HelloServlet("Bonjour le Monde")),"/fr/*");
server.start();
server.join();
}
4.7. 위에서 참조한 서블릿 코드
public class HelloServlet extends HttpServlet
{
private String greeting="Hello World";
public HelloServlet(){}
public HelloServlet(String greeting)
{
this.greeting=greeting;
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/html");
response.setStatus(HttpServletResponse.SC_OK);
response.getWriter().println("<h1>"+greeting+"</h1>");
response.getWriter().println("session=" + request.getSession(true).getId());
}
}
5. 실행
5.1. 이클립스에서 그냥 자바 어플리케이션으로 실행해도 실행됨
5.2. 혹은 mvn clean compile exec:java
[참고]
1. http://wiki.eclipse.org/Jetty.
'코드 이야기' 카테고리의 다른 글
[LeetCode] Letter Combinations of a Phone Number - medium level (0) | 2019.07.22 |
---|---|
[LeetCode] String to Integer (atoi) - medium level (0) | 2019.07.18 |
[LeetCode] Add Two Numbers - medium level (0) | 2019.07.15 |
facebook 메신저 봇 사용하기 (0) | 2016.06.18 |
Thrift Server를 이용하여 PHP로 자바 어플리케이션 사용하기 (0) | 2012.02.17 |