이 섹션에서는 좀 더 복잡한 라이브러리 구현을 작성하는 데 도움이 되는 몇 가지 팁을 설명합니다.
자체 서블릿 사용
가장 간단한 데이터 소스 구현은 라이브러리의 DataSourceServlet
클래스에서 상속됩니다.
DataSourceServlet
이외의 클래스에서 상속받으려면 다음과 같이 데이터 소스를 구현합니다.
-
DataTableGenerator
인터페이스를 구현하고getCapabilities()
및generateDataTable()
를 재정의합니다. - 데이터 소스 흐름을 실행하려면 서블릿 코드 내에서
DataSourceHelper.executeDataSourceServletFlow()
을 호출합니다.이 메서드는 다음 매개변수를 사용합니다.HttpServletRequest
객체입니다.HttpServletResponse
객체입니다.- 위 1단계의
DataTableGenerator
인터페이스 구현 - 제한 또는 제한되지 않은 액세스 모드를 지정하는 불리언입니다.
예를 들어 인증을 기본 제공하는 AuthServlet
라는 다른 서블릿 클래스에서 서블릿을 상속하려는 경우 다음과 같이 SimpleServletExample
를 다시 작성하여 DataSourceServlet
대신 AuthServlet
를 상속할 수 있습니다.
-
DataTableGenerator
인터페이스를 구현합니다. -
generateDataTable()
를DataSourceServlet
구현에서DataTableGenerator
구현으로 이동합니다. -
Capabilities.None
를 반환하도록DataTableGenerator
구현에서getCapabilities()
를 재정의합니다. - 서블릿 코드 (
doGet()
또는doPost()
) 내에서DataSourceHelper.executeDataSourceServletFlow()
를 호출하고DataTableGenerator
구현을 전달합니다. 이 메서드는 데이터 소스 결과를 서블릿 응답으로 렌더링하는 등 데이터 소스의 전체 흐름을 실행합니다.
일반적으로 프레임워크에서 제공하는 추상 클래스를 상속하는 서블릿 프레임워크를 사용하는 경우 동일한 기법을 사용할 수 있습니다.
예를 들어 WebWork를 사용 중인 경우 ActionSupport
클래스를 상속해야 할 수 있습니다.
기능 정의
데이터 스토어에 많은 양의 데이터가 포함되어 있고 데이터 소스의 효율성을 높이려면 데이터 스토어의 쿼리 기능을 사용할 수 있습니다. 예를 들어 데이터 스토어가 데이터베이스이고 데이터베이스에 열이 많다고 가정해 보겠습니다. 시각화에서 이러한 열 중 일부만 요청하는 경우 데이터베이스 내에서 SELECT
작업을 실행하는 것이 모든 열을 검색하고 라이브러리의 쿼리 기능을 사용하여 SELECT
를 수행하는 것보다 더 효율적입니다.
SELECT
기능을 구현하려면 데이터베이스 내에서 SELECT
작업을 실행하고 데이터 테이블을 반환하는 코드를 작성합니다.
Capabilities
enum을 사용하여 코드에서 제공하는 쿼리 기능을 정의합니다. 사용 가능한 옵션은 다음과 같습니다.
NONE
: 기본값은 쿼리 작업을 제공하지 않습니다.SQL
: 코드에서 SQL 쿼리 작업을 제공합니다.SORT_AND_PAGINATION
: 코드가 정렬 및 페이지로 나누기 쿼리 작업을 모두 제공합니다.SELECT
: 코드에서 선택 작업을 제공합니다.ALL
: 코드에서SQL
,SORT_AND_PAGINATION
,SELECT
작업을 제공합니다.
참고: 모든 경우에 라이브러리는 코드에서 제공하지 않는 쿼리 작업을 처리합니다.
NONE
이외의 기능을 구현하려면 Capabilities.getCapabilities()
를 재정의하고 DataTable.generateDataTable()
를 구현하여 데이터 저장소를 쿼리하고 데이터 테이블을 반환합니다.
다음 세 가지 예(AdvancedExampleServlet
, AdvancedExampleServlet2
, SqlDataSourceServlet
)는 기능을 구현하는 방법을 보여줍니다.
모두 example
패키지에 포함됩니다. AdvancedExampleServlet2
은 기능 및 이벤트 흐름 정의에서 설명합니다.
이벤트 흐름 맞춤설정
이벤트의 기본 흐름은 DataSourceHelper.executeDataSourceServletFlow
에 정의되어 있습니다.
기본 흐름은 다음과 같습니다.
- 쿼리 매개변수 추출 및 파싱
- 제한된 액세스 모드에 한해 요청의 출처가 서블릿과 동일한지 확인합니다.
- 요청을 파싱하여 데이터 소스 쿼리와 완료 쿼리라는 두 가지 쿼리 객체를 만듭니다. 데이터 소스 쿼리를
generateDataTable()
구현에 전달합니다. generateDataTable()
를 구현하면 데이터 테이블이 생성됩니다.- 5단계에서 생성된 데이터 테이블에서 완료 쿼리를 실행합니다.
- 데이터 테이블을 시각화에서 지정한 형식으로 렌더링하고 서블릿 응답을 설정합니다.
자체 이벤트 흐름을 지정하려면 datasource.DataSourceHelper
에서 도우미 함수를 호출합니다. 구현 예는
기능 및 이벤트 흐름 정의를
참고하세요.
DataTableGenerator.generateDataTable
에 매개변수 전달
HttpServletRequest.setAttribute
를 사용하여 쿼리의 일부가 아닌 데이터 또는 HttpServletRequest
객체를 DataTableGenerator.generateDataTable
에 전달할 수 있습니다. 예제 코드는 아래에 나와 있습니다.
서블릿 코드에서 다음과 같이 HttpServletRequest
에 전달할 객체를 배치합니다.
request.setAttribute("my_object_name", myObject); DataSourceHelper.executeDataSourceServletFlow(request, response, dataTableGenerator);
dataTableGenerator
인터페이스 구현에서 다음과 같이 HttpServletRequest
에서 객체를 가져옵니다.
public DataTable generateDataTable(Query query, HttpServletRequest request){ Object myObject = request.getAttribute("my_object_name"); // Add your code to manipulate myObject here }
서블릿 외 데이터 소스 구현
서블릿을 사용하지 않고 라이브러리를 구현하면 서블릿 환경이 필요하지 않은 클래스와 도우미 함수만 사용할 수 있습니다. 여기에는 Query
및 DataTable
클래스와 parseQuery
, applyQuery
, validateQuery
, splitQuery
와 같은 일부 DataSourceHelper
함수가 포함됩니다.
이러한 클래스와 함수를 사용하여 다음 작업을 할 수 있습니다.
- 시각화 쿼리를 파싱합니다.
- 쿼리를 데이터 소스 쿼리와 완료 쿼리로 분할합니다.
- 완료 쿼리를 실행하여 데이터 테이블을 생성합니다.
- 데이터 표를
HTML
,CSV
또는JSON
형식으로 시각화로 반환합니다.