< 이전 | 다음 >

학습 3: EJB에 액세스하는 웹 번들 개발

이전 학습에서 OSGi 서비스로 EJB를 노출했습니다. 이 학습에서 서비스에 액세스하는 웹 번들을 개발합니다. 번들을 작성하고 필수 패키지를 가져오도록 Manifest를 구성하고 OSGi 서비스로 EJB에 액세스하는 서블릿을 개발하며 브라우저를 통해 애플리케이션에 액세스하기 위한 HTML 페이지를 작성합니다.

웹 번들 프로젝트 작성

이 섹션에서 웹 3.0 지원으로 OSGi 번들을 작성하고 ConverterApp OSGi 애플리케이션에 번들을 추가합니다.
  1. OSGi 번들 프로젝트 마법사를 여십시오. 파일 > 새로 작성 > OSGi 번들 프로젝트를 클릭하십시오. 마법사가 열립니다.
  2. 프로젝트를 작성하십시오. 마법사에 다음 값을 입력하거나 선택하십시오.
    프로젝트 이름
    대상 런타임
    WebSphere Application Server v8.5.
    웹 지원 추가(이 선택란 선택 및 다음 값 선택)
    웹 3.0.
    애플리케이션에 번들 추가(이 선택란 선택 및 다음 애플리케이션 선택)
    ConverterApp
    웹 번들 프로젝트 작성
  3. 완료를 클릭하십시오. 프로젝트가 작성됩니다.

EJBClient 프로젝트에서 패키지를 가져오도록 웹 프로젝트에서 번들 Manifest 구성

이 섹션에서 EJBClient 프로젝트의 com.ibm.example 패키지에 대한 항목을 Manifest의 Import-Package 헤더에 추가합니다. com.ibm.example 패키지에는 EJB에 대해 개발한 인터페이스가 포함됩니다.
  1. manifest를 여십시오. 웹 프로젝트에서 Manifest: Web을 두 번 클릭하십시오. Manifest 편집기가 열립니다.
  2. com.ibm.example 패키지에 종속성을 추가하십시오. 종속 항목 탭을 클릭하십시오. 가져온 패키지 섹션에서 추가를 클릭하십시오. 패키지 선택사항 대화 상자가 열립니다. 내보낸 패키지 필드에서 com.ibm.example을 입력하십시오. 패키지 목록에서 com.ibm.example을 선택하고 확인을 클릭하십시오.
    종속성 추가

    com.ibm.example에 대한 종속성은 가져온 패키지에 추가됩니다. 번들 프로젝트가 웹 3.0 지원으로 구성되므로 서블릿 패키지(예: javax.servlet)의 추가 가져오기 항목이 추가됩니다.

    가져온 패키지

  3. 변경사항을 저장하십시오.

서블릿 작성

이 섹션에서 서블릿 마법사로 초기 서블릿을 작성합니다.
  1. 서블릿 마법사를 여십시오. 웹 프로젝트를 마우스 오른쪽 단추로 클릭하고 새로 작성 > 서블릿을 선택하십시오. 서블릿 마법사가 열립니다.
  2. 서블릿을 작성하십시오. 마법사에 다음 값을 입력하거나 선택하십시오.
    프로젝트
    Java™ 패키지
    com.ibm.example.servlets
    클래스 이름
    ConverterServlet

    완료를 클릭하십시오. ConverterServlet이 웹 프로젝트에서 작성됩니다.

서블릿 개발

이 섹션에서 서블릿을 개발하고 OSGi 서비스로 EJB에 액세스하기 위한 코드를 포함합니다.
  1. Java 편집기에서 서블릿을 여십시오. 서블릿이 편집기에서 열리지 않은 경우, 웹 프로젝트에서 Java 자원 폴더를 펼치십시오. com.ibm.example.servlets 패키지에서 ConverterServlet을 두 번 클릭하십시오.
  2. 새 import 문을 추가하십시오. 소스 파일 처음에 있는 가져오기 섹션에 다음 import 문을 추가하십시오.
    import com.ibm.example.EJBConverterLocal;
    import java.io.PrintWriter;
    import java.text.NumberFormat;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
  3. doGet() 메소드를 개발하십시오. 서블릿에는 기본 doGet() 메소드가 포함됩니다. 자동 생성된 메소드를 다음 메소드로 바꾸십시오.
    protected void doGet(HttpServletRequest request,
          HttpServletResponse response) throws ServletException, IOException {
    
       PrintWriter w = response.getWriter();
    
       NumberFormat nf = NumberFormat.getInstance();
       nf.setMaximumFractionDigits(2);
    
       try {
          InitialContext context = new InitialContext();
          EJBConverterLocal converter = (EJBConverterLocal) context
                .lookup("osgi:service/" + EJBConverterLocal.class.getName());
    
          String temperature = request.getParameter("temperature");
          if (temperature == null) {
             w.println("<p>A temperature value was not specified.</p>");
          } else if (!temperature.matches("[-+]?[0-9]*\\.?[0-9]+")) {
             w.println("Invalid temperature specified.");
          			} else {
             double degrees = Double.parseDouble(temperature);
    
             double celsius = converter.convertToCelsius(degrees);
             w.println("<p>" + temperature + " degrees fahrenheit is "
                   + nf.format(celsius) + " degrees celsius</p>");
    
             double fahrenheit = converter.convertToFahrenheit(degrees);
             w.println("<p>" + temperature + " degrees celsius is "
                   + nf.format(fahrenheit) + " degrees fahrenheit</p>");
          }
    
          w.println("<a href='index.html'>Back</a>");
       } catch (NamingException e) {
          w.println(e.getMessage());
       } catch (NumberFormatException e) {
          w.println("An incorrect temperature was specified");
       }
    }
    참고: 이 코드에 대해 참조하기 위한 항목.
    서블릿은 변환기라고 하는 EJBConverterLocal 오브젝트를 작성합니다. EJBConverterLocal은 두 개의 온도 변환 메소드(convertToCelsius() 및 convertToFahrenheit())를 포함하는 작성한 인터페이스였다는 것을 상기하십시오. 코드의 다음 행은 OSGi 서비스로 EJB에 액세스하는 오브젝트의 작성을 처리합니다.
    EJBConverterLocal converter = (EJBConverterLocal) context.lookup("osgi:service/" + EJBConverterLocal.class.getName());
    변환할 온도 값이 temperature 매개변수에 의해 서블릿에 전달됩니다. 이 값은 degrees라는 이중 실선으로 변환되고, 이는 변환기 오브젝트에서 convertToCelsius() 및 convertToFahrenheit() 메소드로 처리될 수 있습니다.
    참고: 원격 인터페이스를 사용하려는 경우, JNDI 검색 코드를 조정하십시오. 예를 들어, 이전에 설명된 컨텍스트 검색 섹션이 다음 형식으로 작서될 수 있습니다.
    EJBConverterRemote converter = (EJBConverterRemote) context.lookup("osgi:service/" + EJBConverterRemote.class.getName() + "/(service.exported.interfaces=*)");
  4. doPost() 메소드를 개발하십시오. 자동 생성된 doPost() 메소드를 다음 코드로 바꾸십시오. 자동 생성된 doPost() 메소드 바꾸기는 서블릿이 모든 포스트에서 호출될 수 있고 브라우저에서 요처을 가져올 수 있다는 것을 확인합니다. doPost()에 대한 호출은 doGet() 메소드를 자도으로 실행합니다.
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	doGet(request, response);
    }
  5. 작업을 확인하십시오. 다음 코드는 완료된 서블릿 코드입니다.
    package com.ibm.example.servlets;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.text.NumberFormat;
    
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.ibm.example.EJBConverterLocal;
    
    @WebServlet("/ConverterServlet")
    public class ConverterServlet extends HttpServlet {
       private static final long serialVersionUID = 1L;
    
       public ConverterServlet() {
          super();
       }
    
       protected void doGet(HttpServletRequest request,
             HttpServletResponse response) throws ServletException, IOException {
    
          PrintWriter w = response.getWriter();
    
          NumberFormat nf = NumberFormat.getInstance();
          nf.setMaximumFractionDigits(2);
    
          try {
             InitialContext context = new InitialContext();
             EJBConverterLocal converter = (EJBConverterLocal) context
                   .lookup("osgi:service/" + EJBConverterLocal.class.getName());
    
             String temperature = request.getParameter("temperature");
             if (temperature == null) {
                w.println("<p>A temperature value was not specified.</p>");
             } else if (!temperature.matches("[-+]?[0-9]*\\.?[0-9]+")) {
                w.println("Invalid temperature specified.");
             			} else {
                double degrees = Double.parseDouble(temperature);
    
                double celsius = converter.convertToCelsius(degrees);
                w.println("<p>" + temperature + " degrees fahrenheit is "
                      + nf.format(celsius) + " degrees celsius</p>");
    
                double fahrenheit = converter.convertToFahrenheit(degrees);
                w.println("<p>" + temperature + " degrees celsius is "
                      + nf.format(fahrenheit) + " degrees fahrenheit</p>");
             }
    
             w.println("<a href='index.html'>Back</a>");
          } catch (NamingException e) {
             w.println(e.getMessage());
          } catch (NumberFormatException e) {
             w.println("An incorrect temperature was specified");
          }
       }
    
       protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	doGet(request, response);
    		}
    }
  6. 변경사항을 저장하십시오.

애플리케이션에 액세스하도록 HTML 파일 작성

이 섹션에서 변환에 대해 서블릿에 제출할 값을 입력하기 위한 양식을 포함하는 HTML 파일(index.html)을 작성합니다.
  1. 새 웹 페이지 마법사를 여십시오. 웹 프로젝트를 마우스 오른쪽 단추로 클릭하고 새로 작성 > 웹 페이지를 선택하십시오. 웹 페이지 마법사가 열립니다.
  2. 웹 페이지를 작성하십시오. 파일 이름 필드의 마법사에서 index.html을 입력하십시오. 템플리트 섹션에서 HTML을 선택하십시오. 완료를 클릭하십시오. 페이지가 작성되고 편집기에서 열립니다.
    새 웹 페이지
  3. 웹 페이지 편집기의 소스 탭을 선택하십시오.
  4. 소스를 업데이트하십시오. 기본 소스 코드를 다음 코드로 바꾸십시오.
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>OSGi EJB Temperature Converter</title>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <script type="text/javascript">
    
    function validate(form) {
    	var temperature = new Number(form.temperature.value);
    	if (isNaN(temperature)) {
    		alert("Please enter a valid number.");
    return false;
    	}
    return true;
    }
    
    </script>
    </head>
    <body>
    <form action="ConverterServlet" method="post" onsubmit="return validate(this);">
    	Enter a temperature value:
    	<br/>
    	<input type="text" id="temperature" name="temperature"/>
    	<br/>
    	<br/>
    	<input type="submit" value="Submit"/>
    </form>
    </body>
    </html>

    이 HTML에는 ConverterServlet에 temperature 매개변수 값을 제출하는 양식이 포함됩니다. 서블릿으로 전송되기 전에 제출되는 값은 숫자 값이 입력되는지 확인하기 위해 validate() 기능에 의해 유효성 검증됩니다.

< 이전 | 다음 >
주제 유형을 표시하는 아이콘 학습서 학습 주제
Information Center의 이용 약관 | 피드백

시간소인 아이콘 마지막 업데이트 날짜: 2014-05-22

파일 이름: osgi_ejb_3.html