flash 궁금하니?

포털 환경에서 Macromedia Flex 사용

deguls 2008. 8. 28. 11:19

출처: http://urassa.tistory.com/24


포털 환경에서 Macromedia Flex 사용


포털은 통합 사용자 인터페이스에서 컨텐츠의 집계가 원활하게 이루어지도록 합니다. 그러나 일반적으로 포틀릿은 HTML로 렌더링되므로 어플리케이션을 구축할 때 HTML의 한계를 이어받게 됩니다. 페이지를 새로 고쳐야 하는 번거로움, 상태 전환이 없는(stateless) 클라이언트, 스마트 클라이언트측 데이터 조작의 부재, 제한적인 사용자 인터페이스 구성 요소 등이 그 한계라고 할 수 있습니다.

더 많은 수의 포털 고객들이 포털과 일반적인 어플리케이션의 사용자 경험을 보다 매력적으로 향상시켜 HTML의 한계를 극복하는 솔루션을 원하고 있습니다.

Macromedia Flex는 이러한 요구를 충족하는 프레젠테이션 서버로서 이 서버를 사용해 개발자는 데스크탑 어플리케이션의 사용성과 일반 웹 어플리케이션의 광범위함을 접목시킨 차세대 어플리케이션인 리치 인터넷 어플리케이션(RIA: Rich Internet Applications)을 구축할 수 있습니다. Flex를 사용하여 포틀릿의 사용자 인터페이스를 렌더링할 수 있으며 포털 내의 사용자 경험을 크게 향상시킬 수 있습니다.

본 백서는 Flex 프레젠테이션 서버를 사용하여 포털 어플리케이션에 풍부한 프런트 엔드를 제공하는 방법에 대해 설명합니다.

정보Macromedia Flex에 대한 자세한 내용

PDF 버전의 기술문서

배경 정보

포털이란?

포털이란 통합 사용자 인터페이스에서 서로 다른 소스의 컨텐츠를 모아주는 웹 어플리케이션을 의미합니다. 또한 포털은 일반적으로 내장된 자체 보안 인프라를 통해서나 Netegrity SiteMinder와 같은 타사 솔루션을 통합하여 SSO(Single Sing-On) 및 개인화된 기능을 제공합니다.

포틀릿이란?

포틀릿이란 Java 기반의 웹 구성 요소로서 포틀릿 컨테이너에서 관리합니다. 한편 포털은 플러그 가능한 사용자 인터페이스 구성 요소로 포틀릿을 사용합니다. 포틀릿의 컨텐츠는 일반적으로 HTML 또는 기타 마크업 언어로 렌더링되며 다른 포틀릿의 컨텐츠와 집계되어 포털 페이지를 형성합니다.

포틀릿 컨테이너란?

포틀릿 컨테이너는 포틀릿에 런타임 환경을 제공합니다. 포털은 포틀릿에서 요청을 실행할지 여부를 포틀릿 컨테이너에게 묻습니다. 포틀릿에서 생성한 컨텐츠를 집계하는 작업은 포틀릿 컨테이너가 하지 않고 포털에서 합니다.

포털 벤더

포털 벤더는 다음과 같습니다.

  • IBM
  • BEA
  • Oracle
  • Sun
  • Vignette
  • SAP
  • Plumtree

JSR-168이란?

과거 각기 다른 벤더들은 자체적으로 제작한 API를 통해 포틀릿을 개발했으며 해당 포틀릿을 실행하기 위해 런타임 환경을 구축했습니다. 이렇게 개발된 각양각색의 API는 서로 호환되지 않았으므로 ISV와 포털 고객들에게는 새로운 문제로 부각되었습니다. 이러한 문제를 해소하기 위해 고안된 것이 바로 JSR-186(Java Standardization Request 168)으로 그 취지는 포틀릿을 개발하고 실행할 때 필요한 표준을 확립하기 위한 것이었습니다. JSR-168의 등장에 힘입어 개발자들은 JSR-186 표준 준수 컨테이너에서 배포할 수 있는 포틀릿을 개발할 수 있게 되었습니다.

JSR-168에 대한 자세한 내용은 Java Community Process 웹 사이트인 www.jcp.org/en/jsr/detail?id=168*을 참조하십시오.

JSR-168 표준 채택

대부분의 포털 벤더는 JSR-168 스펙을 구현했거나 현재 구현하고 있습니다. 역호환의 경우 포털 벤더는 여전히 자신의 "pre-JSR 168" API를 지원하고 있습니다. IBM의 예를 들면 WSAD Portal Toolkit와 WebSphere Portal Server를 사용해 IBM의 API 기반 포틀릿과 JSR 168 기반 포틀릿을 모두 개발하고 실행할 수 있습니다.

JSR-168과 IBM API의 차이점에 대한 자세한 내용은 IBM의 Stefan Hepper가 쓴 www-106.ibm.com/developerworks/websphere/library/techarticles/0312_hepper/hepper.html* 기술문서를 참조하십시오.

본 기술문서에서 설명한 Flex/포털 통합은 JSR-168 준수 포털 서버, IBM API 기반 포틀릿이 포함된 WebSphere Portal Server, 일부 코드가 수정된 "pre-JSR 168" 벤더의 API 등에 모두 적용할 수 있습니다.


포털 환경에서 Macromedia Flex 사용하기

포털은 통합 사용자 인터페이스에서 컨텐츠의 집계가 원활하게 이루어지도록 합니다. 그러나 일반적으로 포틀릿은 HTML로 렌더링되므로 어플리케이션을 구축할 때 HTML의 한계를 이어받게 됩니다. Flex를 사용하여 포틀릿의 사용자 인터페이스를 렌더링하면 HTML의 한계를 극복할 수 있고 포털 내의 사용자 경험을 크게 향상시킬 수 있습니다.

예제

5개의 Flex 기반 포틀릿을 보여주는 Websphere 포털 페이지

그림 1. 5개의 Flex 기반 포틀릿을 보여주는 Websphere 포털 페이지

위에서 표시된 포털 페이지는 5개의 Flex 기반 포틀릿을 보여줍니다. 아래 통합 시나리오의 설명과 같이 Flex 기반 포틀릿도 HTML 기반의 포틀릿과 함께 존재합니다.

  • Mutual Fund Selector 포틀릿: 풍부한 사용자 상호 작용에 대한 예입니다. 이 포틀릿에서 사용자는 슬라이더와 다른 컨트롤을 사용하여 선택 기준을 지정할 수 있습니다. 지정한 기준에 부합하지 않는 뮤추얼 펀드는 자동으로 희미하게 표시됩니다. 사용자가 포인터를 심볼 위에 올려 놓으면 해당 뮤추얼 펀드에 대한 자세한 정보가 표시됩니다.
  • Real-Time Market Data 포틀릿: 실시간 주식시장 데이터 피드와 연결되어 있는 포틀릿의 예입니다. 차트에 표시된 선은 데이터 피드에서 수신된 새로운 데이터를 반영하기 위해 자동으로 조절됩니다.
  • Portfolio 포틀릿: DataGrid(필요에 따라 정렬 및 편집 가능), 아코디언 내비게이션 컨테이너 등 리치 사용자 인터페이스 구성 요소를 보여주는 포틀릿의 또 다른 예입니다. 사용자가 이 포틀릿을 최대화하면 주식 시황을 확인할 수 있고 특정 주식을 관리 대상 목록으로 드래그할 수 있습니다.
  • Video 포틀릿: MediaPlayback 구성 요소를 사용하여 완벽하게 통합된 방식으로 포털 내에서 비디오를 스트리밍할 수 있습니다. 이때 타사 플레이어는 필요하지 않습니다.
  • Chat 포틀릿: 서버에서 클라이언트로 전송된 데이터의 예입니다.

이점

포털 환경에서 Flex를 사용하여 얻을 수 있는 이점은 다음과 같습니다.

  • 향상된 사용자 경험
    • 데스크탑에서와 같은 사용자 경험을 갖춘 포틀릿을 제공할 수 있습니다.
    • Flex에서 DataGrid, 트리, TabNavigator, 아코디언, 차트 구성 요소, 슬라이드 등과 같은 리치 사용자 인터페이스 구성 요소를 사용할 수 있습니다.
    • Flex에서 드래그 앤 드롭, 필요한 곳에 확장 기능 추가 등과 같은 리치 사용자 인터페이스 메타포를 사용할 수 있습니다.
  • 불필요한 페이지 새로 고침

    참고: 포털 페이지를 새로 고치게 되면 사용자의 집중력은 감소하고 리소스와 대역폭 측면에서도 비용이 많이 소요됩니다. 기존 HTML 기반의 포틀릿과는 달리 Flex 기반의 포틀릿은 페이지를 새로 고치지 않고도 백 엔드 시스템과 통신할 수 있습니다.

  • 스마트 클라이언트측 데이터 조작
    • 일단 서버에서 다운로드된 데이터는 클라이언트측에서 조작할 수 있습니다. 예를 들어 클라이언트에서 검색된 항목들을 클라이언트측에서 정렬하거나 필터링할 수 있습니다. 이는 사용자 인터페이스의 응답성을 향상시키고 네트워크 트래픽을 줄이는 이점으로 이어집니다.
    • XMLSocket API나 Flash Communication Server를 사용해 데이터를 서버에서 클라이언트로 전송할 수도 있습니다.
    • 특정 어플리케이션의 상황에 맞을 경우 데이터를 클라이언트측에 저장할 수도 있습니다.
  • 네트워크 트래픽 감소

    페이지를 새로 고치지 않고도 백 엔드 시스템과 통신할 수 있고 클라이언트측에서 데이터를 조작할 수 있기 때문에 Flex 기반의 포틀릿은 전반적인 네트워크 트래픽을 크게 감소시킬 수 있습니다.

통합 시나리오

포틀릿 스펙은 다음과 같이 3가지 유형의 창 상태를 정의합니다.

  • 일반: 이 상태의 포틀릿은 일반적으로 다른 포틀릿과 페이지를 공유하므로 이 창 상태에서 렌더링되는 출력의 크기를 제한해야 합니다.
  • 최대화: 이 상태의 포틀릿은 일반적으로 포털 페이지에 렌더링되는 유일한 포틀릿입니다. 포틀릿은 창 상태가 최대화되면 보다 풍부한 컨텐츠를 생성할 수 있습니다.
  • 최소화: 포틀릿의 제목 표시줄만 표시됩니다.

일반 창 상태에서 Flex 기반의 포틀릿과 HTML 기반의 포틀릿은 동일한 포털 페이지에 함께 존재할 수 있습니다. 또한 포틀릿이 동일하더라도 현재 창의 상태에 따라 다른 렌더링 기술을 사용할 수 있습니다.

  • 예를 들어 포틀릿의 창 상태가 일반 상태인 경우 포틀릿의 UI는 HTML로 표시되고 최대화 상태인 경우 Flex로 표시될 수 있습니다.
  • 이와 상반되는 경우도 가능합니다. 즉, 일반 상태의 경우에는 Flex로, 최대화 상태의 경우는 HTML로 표시될 수 있습니다. 그러나 사용자는 대개 최대화 상태에서 가장 정교한 사용자 경험을 기대하기 때문에 이런 경우는 의미가 없습니다.
  • 마지막으로 포틀릿의 UI는 일반 및 최대화 상태에서 모두 Flex로 표시될 수 있습니다. 일반 상태에서 실행되는 포틀릿 크기가 아무리 작더라도 Flex를 사용하면 큰 이점을 볼 수 있습니다. 주식 시황 포틀릿을 예로 들어 보겠습니다. 기존의 HTML에서 이 포틀릿을 구현할 경우 사용자가 시세를 요청할 때마다 전체 포털 페이지가 새로 고쳐져야 합니다. 이렇게 단순한 작업에 값비싼 프로세스가 아닐 수 없습니다. 그러나 Flex 기반의 포틀릿을 사용하면 포털 페이지를 새로 고치지 않고도 백 엔드 시스템에서 데이터를 가져올 수 있습니다. 나중에 Flex 기반의 주식 시황 포틀릿의 예를 설명하겠습니다.

일반 상태의 Portfolio 포틀릿

그림 2. 일반 상태의 Portfolio 포틀릿

최대화 상태의 Portfolio 포틀릿

그림 3. 최대화 상태의 Portfolio 포틀릿

최대화 창 상태를 사용하여 복잡하고 독립적인 Flex 어플리케이션을 실행할 수 있습니다. 아래 스크린샷은 Flex로 패키징된 FlexStore 샘플 어플리케이션이 최대화된 상태에서 포틀릿으로 실행되고 있는 모습입니다.

Flex로 패키징된 FlexStore 샘플 어플리케이션이 최대화된 상태에서 포틀릿으로 실행되고 있는 모습

그림 4. Flex로 패키징된 FlexStore 샘플 어플리케이션이 최대화된 상태에서 포틀릿으로 실행되고 있는 모습

포틀릿 스펙은 뷰 모드(포틀릿에서 구현되어야 하는 유일한 모드), 편집 모드, 도움말 모드 등 3가지 포틀릿 모드를 정의합니다. 창 상태에서처럼 포틀릿의 사용자 인터페이스를 렌더링할 때 서로 다른 모드에서 Flex와 HTML 기술을 혼용하여 사용할 수 있습니다. 즉, 뷰 모드에서 Flex를, 도움말 모드에서는 HTML을 사용할 수 있습니다.


기술 구현

포틀릿의 사용자 인터페이스 렌더링하기

사용자가 포털 페이지를 요청할 경우 포털은 포틀릿 컨테이너에게 페이지의 각 포틀릿에 대한 사용자 인터페이스를 생성하도록 요구합니다. 포털은 포틀릿이 생성하는 조각들을 모아 페이지를 만든 다음 사용자가 볼 수 있도록 해당 페이지를 클라이언트에게 반환합니다.

특정 포틀릿의 사용자 인터페이스를 생성하려면 포틀릿 컨테이너는 포틀릿의 render() 메서드를 호출합니다. GenericPortlet에서 render() 메서드는 포틀릿 모드에 따라 메서드 호출을 doView(), doEdit() 또는 doHelp() 메서드로 보냅니다. 이러한 메서드는 보통 포틀릿 조각에 대한 마크업을 정의하는 JSP(JavaServer Page)에 요청을 보내기 전에 사용자 인터페이스와 관련된 로직을 실행합니다.

Flex는 이 워크플로에 완벽하게 통합됩니다. Flex를 사용해 포틀릿 사용자 인터페이스를 렌더링할 때 가장 두드러진 특징은 JSP에서 기존의 HTML 마크업을 작성하지 않고 Flex 어플리케이션을 단지 JSP에 임베드하면 된다는 것입니다. Flex 어플리케이션을 JSP에 쉽게 임베드하는 방법은 Flex와 함께 제공하는 JSP 태그 라이브러리의 MXML 태그를 사용하는 것입니다(아래의 helloworld.jsp 참조). 또한 HTML Object 태그를 코딩하여 Flex 어플리케이션을 페이지에 임베드할 수도 있습니다.

참고: Flex JSP 태그 라이브러리를 사용하면 JSP에 Flex 마크업 언어인 MXML을 입력할 수 있습니다. 이는 외부 MXML 파일을 지정하는 것과 전혀 다른 방법입니다.

다음 예제는 Flex 기반의 Hello World 포틀릿을 보여줍니다.

리스팅 1: HelloWorldPortlet.java

package samples.portlet;

import javax.portlet.*;
import java.io.IOException;

public class HelloWorldPortlet extends GenericPortlet {

    public void doView (RenderRequest request, RenderResponse response)
            throws PortletException, IOException {

        response.setContentType("text/html");
        PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher("/jsp/helloworld.jsp");
        rd.include(request,response);

    }

}

리스팅 2: helloworld.jsp

<%@ taglib uri="FlexTagLib" prefix="mm" %>
<mm:mxml source="/jsp/helloworld.mxml"/>

리스팅 3: helloworld.mxml

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml" width="200" height="100">

    <mx:Label text="Hello World!"/>

</mx:Application>

물론 "Hello World!"를 표시하기 위해 Flex가 반드시 필요한 것은 아닙니다. 그러나 리치 사용자 인터페이스를 제작하기 위해서는 Flex가 있어야 한다는 얘기입니다. 이제 helloworld.mxml을 수정하여 포털 어플리케이션에서 포틀릿으로 렌더링되는 완벽한 리치 인터넷 어플리케이션(DataGrid, 트리, 차트 구성 요소, 드래그 앤 드롭 비헤이비어 등을 사용함)을 제작할 수 있습니다.

데이터 액세스하기: 프런트 컨트롤러 모델

기존의 포틀릿 워크플로에서 포틀릿은 작은 프런트 컨트롤러 역할을 담당합니다. 즉, 프로세싱 동작과 사용자 인터페이스 렌더링에 대한 모든 요청은 포틀릿 URL을 사용하는 portlet 클래스를 통해 라우팅됩니다. 그런 다음 portlet은 해당 요청을 Model(예: JavaBean, EJB 또는 웹 서비스)과 View 구성 요소(예: JSP 또는 서블릿)로 위임합니다. 포틀릿 URL은 해당 포틀릿 컨테이너가 생성하는 불투명한 URL입니다. 포틀릿 URL에는 액션 URL과 렌더 URL, 두 가지 유형의 URL이 있습니다.

  • 클라이언트에서 액션 URL을 요청하는 경우 컨테이너는 대상 포틀릿에서 processAction() 메서드를 호출합니다. processAction() 메서드가 실행된 다음 컨테이너는 페이지의 모든 포틀릿에 대한 render() 메서드를 트리거하게 됩니다.
  • 한편, 클라이언트에서 렌더 URL을 요청하는 경우 컨테이너는 해당 페이지의 모든 포틀릿에서 render() 메서드를 호출합니다.

Flex가 포털의 백 엔드와 통신하기 위해 사용자 경험이나 광대역 측면에서 보다 효율적인 방법을 제공하고 있지만 Flex 기반의 포틀릿은 이러한 프런트 컨트롤러 워크플로를 지원하고 있습니다. 사용자는 액션 URL과 렌더 URL을 매개 변수로 Flex 어플리케이션으로 전달할 수 있습니다. 그러면 Flex 어플리케이션은 이러한 URL을 사용하여 기존 HTML 기반의 포틀릿 조각이 하는 방식과 같이 요청을 포털로 전송합니다.

다음 예제(리스팅 4)는 액션 URL과 렌더 URL을 사용하는 Flex 기반의 포틀릿을 보여줍니다.

리스팅 4: URLDemoPortlet.java

package samples.portlet;

import javax.portlet.*;
import java.io.IOException;

public class URLDemoPortlet extends GenericPortlet {

    public void doView (RenderRequest request, RenderResponse response)
            throws PortletException, IOException {

        response.setContentType("text/html");
        PortletURL actionURL = response.createActionURL();
        actionURL.setPortletMode(PortletMode.VIEW);
        request.setAttribute("actionURL", actionURL.toString());

        PortletURL renderURL = response.createRenderURL();
        renderURL.setPortletMode(PortletMode.VIEW);
        request.setAttribute("renderURL", renderURL.toString());
        PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher("/jsp/urldemo.jsp");
        rd.include(request,response);

    }

}

리스팅 5: urldemo.jsp

<%@ taglib uri="FlexTagLib" prefix="mm" %>

<mm:mxml source="/jsp/urldemo.mxml">
    <mm:param name="actionURL" value="<%= request.getAttribute("actionURL") %>" />
    <mm:param name="renderURL" value="<%= request.getAttribute("renderURL") %>" />
</mm:mxml>

참고: 기타 상황 정보를 Flex 어플리케이션으로 전달할 때 동일한 매개 변수 전달 기법, 즉 포틀릿 초기화 매개 변수, 환경 설정 등을 사용할 수 있습니다.

리스팅 6: urldemo.mxml

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml" xmlns="*"
    height="300" width="800" backgroundColor="#FFFFFF">

    <mx:Script>
        var actionURL: String;
        var renderURL: String;
    </mx:Script>

    <mx:Label text="{actionURL}"/>
    <mx:Label text="{renderURL}"/>

    <mx:Button label="Request Action URL" click="getUrl(actionURL)"/>
    <mx:Button label="Request Render URL" click="getUrl(renderURL)"/>

</mx:Application>

이 예제에서 보여준 포틀릿 URL 워크플로는 주로 일반적인 요청/응답 모델에서 구동하는 HTML 클라이언트를 기반으로 합니다. 이 모델의 취약점은 페이지 중심의 모델이므로 사용자 인터페이스(이 경우 포털 페이지를 가리킴)는 각 클라이언트 요청에 대한 응답 때마다 페이지를 새로 고쳐야 하는 번거로움이 있다는 점입니다. 이러한 경우 사용자의 집중력은 저하될 뿐만 아니라 대역폭의 사용량도 최적화될 수 없습니다. 리치 클라이언트 기술을 사용하면 이러한 한계를 극복할 수 있습니다. 즉, HTTP를 통한 XML 또는 SOAP를 사용하면 사용자 인터페이스 페이지를 새로 고칠 필요 없이 SOA(서비스 지향 아키텍처)에서 백 엔드 서비스와 통신할 수 있습니다. SOA 방식에 대해서는 다음 섹션에서 다루도록 하겠습니다.

그러나 Flex 어플리케이션이 액션 URL과 렌더 URL을 사용할 수 있는 점은 유용할 때가 있습니다. 예를 들어 Flex 어플리케이션에서 렌더 URL을 사용하여 포틀릿 컨테이너에게 창 상태를 변경하도록 요청할 수도 있습니다.

데이터 액세스하기: SOA 모델

Flex 클라이언트는 서비스 지향 아키텍처에서 백 엔드 서비스와 통신할 수 있습니다. Flex는 어플리케이션의 특정 데이터 액세스 요구 사항을 충족시키기 위해 3가지 데이터 서비스를 제공합니다.

  • WebService 서비스: 이 서비스를 통해 클라이언트 어플리케이션은 SOAP 기반의 웹 서비스를 호출할 수 있습니다.
  • RemoteObject 서비스: 이 서비스를 통해 클라이언트 어플리케이션은 해당 객체를 웹 서비스로 공개하지 않고도 미들티어에 배포되어 있는 Java 객체의 매서드를 호출할 수 있습니다. 그러면 Flex RemoteObject 서비스는 나머지 작업을 하게 됩니다. 클라이언트와 서버 간의 통신 프로토콜로 SOAP와 AMF(HTTP를 통한 바이너리 프로토콜) 중에서 선택할 수 있습니다.
  • HTTPService 서비스: 이 서비스를 통해 클라이언트 어플리케이션은 HTTP를 통한 XML을 사용하여 서버와 통신할 수 있습니다.

다음 예제는 웹 서비스를 사용하는 Flex 기반의 주식 시황 포틀릿을 보여줍니다.

리스팅 7: StockQuotePortlet.java

package samples.portlet;

import javax.portlet.*;
import java.io.IOException;

public class StockQuotePortlet extends GenericPortlet {

    public void doView (RenderRequest request, RenderResponse response)
            throws PortletException, IOException {

        response.setContentType("text/html");
        PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher("/jsp/stockquote.jsp");
        rd.include(request,response);

    }

}

리스팅 8: stockquote.jsp

<%@ taglib uri="FlexTagLib" prefix="mm" %>
<mm:mxml source="/jsp/stockquote.mxml"/>

리스팅 9: stockquote.mxml

<?xml version="1.0" encoding="UTF-8"?>

<mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml"
    width="300" height="200"
    backgroundColor="#FFFFFF">

    <mx:WebService id="ws"
        wsdl="http://services.xmethods.net/soap/urn:xmethods-delayed-quotes.wsdl">
        <mx:operation name="getQuote">
            <mx:request>
                <symbol>{symbol.text}</symbol>
            </mx:request>
        </mx:operation>
    </mx:WebService>

    <mx:TextInput id="symbol"/>
    <mx:Button label="Get Quote" click="ws.getQuote.send()"/>

    <mx:Label text="{ws.getQuote.result}"/>

</mx:Application>

보안

Flex 어플리케이션은 Macromedia Flash 플레이어 샌드박스 환경을 활용합니다. 이 모델에서 클라이언트 어플리케이션은 어플리케이션을 수행하는 서버와 통신만 할 수 있습니다. 해당 서버에 있는 프록시 서블릿을 통해 위에서 설명한 데이터 액세스 서비스(WebService, RemoteObject 및 HTTPService)에 액세스합니다. 이 프록시 서블릿은 WebServices, HTTPServices 및 RemoteObjects에 대한 요청을 차단하여 해당 요청을 적절하게 리디렉션한 다음 클라이언트로 응답을 반환합니다. 기존의 J2EE 보안 API 또는 Netegrity SiteMinder와 같은 타사 보안 인프라를 통해 프록시 서블릿 URL에 안전하게 액세스할 수 있습니다.

포틀릿 세션에 액세스하기

Flex는 Flex 클라이언트 어플리케이션이 포틀릿 세션 객체의 속성에 액세스(설정 및 수신)할 때 사용할 수 있는 세션 API를 제공합니다.

리스팅 10: 다음 예제는 세션 속성값을 가져오고 설정하는 Flex 기반의 포틀릿을 보여줍니다.

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml"/>

    <mx:RemoteObject id="sessionObj" source="servlet" showBusyCursor="true"/>

    <mx:HBox>
        <mx:TextInput id="fromSession" text="{sessionObj.session.result}"/>
        <mx:Button label="Get userName Session Attribute" click="sessionObj.session('get', 'userName')"/>
    </mx:HBox>

    <mx:HBox>
        <mx:TextInput id="toSession"/>
        <mx:Button label="Set userName Session Attribute"
                   click="sessionObj.session('set', 'userName', toSession.text)"/>
    </mx:HBox>

</mx:Application>

배포 옵션

Flex 프레젠테이션 서버는 웹 어플리케이션으로 어플리케이션 서버 내에 배포할 수 있습니다. Flex를 포틀릿 웹 어플리케이션의 일부로 패키징하거나 별도의 웹 어플리케이션으로 배포할 수 있습니다. 본 기술문서에서 나열된 예제는 이러한 두 가지 구성 측면에서 테스트되었습니다.


요약

포털은 통합 사용자 인터페이스에서 컨텐츠의 집계가 원활하게 이루어지도록 합니다. 그러나 일반적으로 포털 어플리케이션에서의 사용자 경험은 HTML의 한계로 인해 제한을 받게 됩니다. Flex를 사용하여 포틀릿의 사용자 인터페이스를 렌더링하면 포털에서의 사용자 경험을 크게 향상시킬 수 있습니다.

관련 리소스