모바일 텍스트 작성기 렌더링 구현 방법
업데이트: 2007년 11월
렌더링 단계에서 모든 ASP.NET 모바일 장치 어댑터는 MobileTextWriter 기본 클래스에서 상속되는 클래스를 사용하여 출력을 작성합니다. 텍스트 작성기의 실제 클래스는 대상 장치에 따라 달라질 수 있으며 페이지 어댑터는 적절한 작성기를 인스턴스화하여 반환합니다. 예를 들어, cHTML 태그가 필요한 장치의 경우 ChtmlPageAdapter는 CreateTextWriter 메서드를 통해 ChtmlMobileTextWriter 개체를 반환합니다.
MobileTextWriter 클래스는 어댑터의 공용 속성 및 메서드를 정의합니다. 컨트롤 어댑터에 대해 해당 어댑터의 작성기 클래스와 관련된 도우미 멤버를 추가로 정의할 수 있습니다. MobileTextWriter 클래스는 HtmlTextWriter 기본 클래스에서 상속되므로 HtmlTextWriter 기본 클래스의 Write, WriteLine 및 WriteBeginTag와 같은 메서드를 사용할 수 있습니다.
강력한 형식의 렌더링 방법
어댑터에는 일반적으로 특정 클래스의 텍스트 작성기가 필요합니다. 예를 들어, WmlPageAdapter는 WmlMobileTextWriter 개체를 사용해야 합니다. IControlAdapter 인터페이스의 Render 메서드에는 HtmlTextWriter 형식의 매개 변수가 들어 있습니다. 따라서 어댑터는 Render 메서드를 재정의하여 원하는 텍스트 작성기 클래스를 사용할 수 있도록 하거나 작성기를 필요한 클래스로 캐스팅해야 합니다.
다음 예제에서는 사용자 지정 CarControl 클래스에 대한 XHTML 어댑터 집합의 새 어댑터에서 Render 메서드를 재정의하는 방법을 보여 줍니다. 이 사용자 지정 어댑터의 이름은 새 어댑터에 대해 설정된 명명 규칙을 따라 XhtmlCarControlAdapter로 지정됩니다.
// Specialized XhtmlCarControlAdapter Render method
public void Render(XhtmlMobileTextWriter writer)
{
... [rendering code]
}
// Generic XhtmlCarControlAdapter Render method
public override void Render(HtmlTextWriter writer)
{
Render((XhtmlMobileTextWriter)writer);
}
응답 시작 및 종료
페이지 어댑터에서는 응답을 작성하기 전에 Render 메서드에서 특정 메서드를 호출해야 합니다. 다음은 페이지 어댑터에 필요한 일반적인 작업 순서입니다.
작성기의 BeginResponse 메서드를 호출합니다.
작성기의 BeginFile 메서드를 호출하고 페이지 URL과 원하는 데이터 콘텐츠 형식(MIME 형식)을 전달합니다. 예를 들어, HTML 페이지 어댑터는 text/html을 콘텐츠 형식으로 전달합니다.
페이지(일반적으로 활성 폼)를 렌더링합니다.
작성기의 EndFile 메서드를 호출합니다.
작성기의 EndResponse 메서드를 호출합니다.
다음 코드 예제에서는 HTML 페이지 어댑터의 간단한 Render 메서드를 보여 줍니다.
public override void Render(MobileTextWriter writer)
{
writer.BeginResponse();
writer.BeginFile(Page.Request.Url.ToString(), "text/html");
Page.ActiveForm.RenderControl(writer);
writer.EndFile();
writer.EndResponse();
}
출력 인코딩
MobileTextWriter 클래스는 렌더링을 인코딩하는 도우미 메서드를 제공합니다. 인코딩은 대상 장치에 따라 다릅니다. 예를 들어, WML 기반 장치를 사용하려면 달러 기호($)를 인코딩해야 합니다. 도우미 메서드는 다음과 같습니다.
대상 장치에 인코딩된 텍스트를 쓰려면 어댑터에서 작성기의 WriteEncodedText 메서드를 호출하면 됩니다.
대상 장치에 매개 변수를 포함하여 URL을 쓰려면 어댑터에서 작성기의 WriteEncodedUrl 메서드를 호출하면 됩니다.
대상 장치에 URL 인수(사용자 에이전트 문자열의 쿼리 기호인 [?] 다음에 나오는 URL 부분)를 쓰려면 어댑터에서 작성기의 WriteEncodedUrlParameter 메서드를 호출하면 됩니다.
출력 캐싱
ASP.NET 웹 페이지에는 페이지 출력 캐싱을 위한 지원 기능이 포함되어 있으며 @ OutputCache 지시문을 통해 페이지를 캐시할 수 있습니다.
모바일 웹 페이지에서는 캐시된 출력을 대상 장치에 따라 다르게 설정해야 합니다. 예를 들어 Pocket PC용 Microsoft Internet Explorer를 실행하는 장치에서 페이지를 요청하는 경우, 결과로 생성된 출력은 Pocket PC용 Internet Explorer를 실행하는 다른 장치에서만 캐시되고 반환되어야 합니다.
기본적으로 HTTP 사용자 에이전트 문자열은 캐시된 모바일 웹 페이지의 변형을 제어합니다. 그러나 다른 장치의 출력은 다른 속성의 영향을 받을 수 있습니다. 예를 들어, 사용자 에이전트 문자열 하나를 사용하는 장치에는 화면 크기 설정이 여러 개 있을 수 있고, 각 설정에 따라 출력이 다를 수 있습니다. 이렇게 다양하게 사용하려면 페이지 어댑터에서 CacheVaryByHeaders 속성을 재정의해야 합니다.
또한 ASP.NET 웹 사용자 정의 컨트롤은 출력을 개별적으로 캐시할 수 있는 @ OutputCache 지시문도 지원합니다. 이러한 작업을 부분 캐싱이라고 합니다. 그러나 모바일 웹 페이지의 사용자 정의 컨트롤은 이러한 지시문을 지원하지 않습니다. 사용자 정의 컨트롤의 출력은 페이지의 나머지 내용에 따라 달라질 수 있으므로 모바일 웹 페이지는 부분 캐싱을 지원하지 않습니다.