이 섹션에서는 AdvancedExampleServlet2
를 소개합니다. AdvancedExampleServlet2
는 기능 및 이벤트 흐름을 정의하는 데이터 소스 구현의 예입니다. 이 섹션에서는 AdvancedExampleServlet2
를 실행하고 테스트하는 방법에 관한 단계별 안내도 제공합니다.
참고: 이 섹션을 시작하기 전에 시작하기 섹션을 완료해야 합니다.
AdvancedExampleServlet2
소개
AdvancedExampleServlet2
클래스는 examples
패키지에 있습니다.
이 클래스는 이벤트 기능과 기능을 정의하는 구현 예를 제공합니다.
AdvancedExampleServlet2
의 가장 중요한 부분은 다음 섹션에 설명되어 있습니다.
이벤트 흐름 정의
AdvancedExampleServlet2
는 HttpServlet.doGet()
메서드를 재정의하고 DataSourceHelper
에서 제공하는 다양한 도우미 함수를 호출하여 이벤트 흐름을 정의합니다.
다음 스니펫은 doGet()
를 재정의합니다. HttpServletRequest
매개변수는 시각화를 통해 생성된 요청을 서블릿에 캡슐화합니다. HttpServletResponse
매개변수는 서블릿의 응답을 쿼리 시각화로 캡슐화합니다.
또한 이 스니펫은 dsRequest
를 null로 설정합니다. dsRequest
코드의 나머지 부분 전반에 걸쳐 다양한 지점에서 사용됩니다.
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { DataSourceRequest dsRequest = null;
다음 스니펫은 HttpServletRequest
에서 요청 매개변수를 추출하여 요청이 실행되는 컨텍스트를 만듭니다.
try { // Extract the request parameters. dsRequest = new DataSourceRequest(req);
다음 스니펫은 dsRequest
객체에서 쿼리를 가져와 두 개의 별도 쿼리로 분할합니다. 한 쿼리는 데이터 소스 쿼리라고 하고, 다른 쿼리는 완료 쿼리입니다. 데이터 소스에서 선언된 기능은 SELECT
이므로 데이터 소스 쿼리는 dsRequest
객체에 SELECT
작업이 포함된 경우 SELECT
작업으로 구성됩니다.
완료 쿼리는 요청에 필요한 다른 모든 작업으로 구성되며 SELECT
작업도 포함될 수 있습니다. 예를 들어 요청된 쿼리가 SELECT a ORDER
BY b
이면 데이터 소스 쿼리는 SELECT a, b
이고 완료 쿼리는 원본 쿼리 SELECT a ORDER BY b
와 동일합니다.
// Split the query. QueryPair query = DataSourceHelper.splitQuery(dsRequest.getQuery(), Capabilities.SELECT);
다음 스니펫은 이전 스니펫과 HttpServletRequest,
에서 만든 데이터 소스 쿼리를 사용하여 데이터 테이블을 만듭니다. 자세한 내용은 기능 사용 섹션을 참고하세요.
// Generate the data table. DataTable data = generateMyDataTable(query.getDataSourceQuery(), req);
다음 코드는 쿼리가 분할될 때 생성된 완료 쿼리, 이전 스니펫에서 생성된 데이터 테이블, 쿼리 시각화의 사용자 언어를 사용합니다. 그러면 코드가 새 데이터 테이블을 만듭니다.
// Apply the completion query to the data table. DataTable newData = DataSourceHelper.applyQuery(query.getCompletionQuery(), data, dsRequest.getUserLocale());
다음 코드는 이전 스니펫에 의해 생성된 데이터 테이블과 HttpServletRequest
의 요청 매개변수입니다. 그런 다음 코드를 사용하여 서블릿 응답을 설정합니다. 서블릿 컨테이너는 쿼리 시각화에 이 응답을 반환합니다.
DataSourceHelper.setServletResponse(newData, dsRequest, resp);
오류 처리
다음 스니펫은 예외를 포착하고, 적절한 메시지를 가져오고, 응답의 형식을 지정하고, 서블릿 응답을 설정합니다. dsRequest
가 null이면 아마도 생성자 실패로 인해 DataSourceRequest
를 사용할 수 없는 것입니다. 이 경우 DataSourceRequest
대신 HttpRequest
이 사용됩니다.
catch (RuntimeException rte) { log.error("A runtime exception has occured", rte); ResponseStatus status = new ResponseStatus(StatusType.ERROR, ReasonType.INTERNAL_ERROR, rte.getMessage()); if (dsRequest == null) { dsRequest = DataSourceRequest.getDefaultDataSourceRequest(req); } DataSourceHelper.setServletErrorResponse(status, dsRequest, resp); } catch (DataSourceException e) { if (dsRequest != null) { DataSourceHelper.setServletErrorResponse(e, dsRequest, resp); } else { DataSourceHelper.setServletErrorResponse(e, req, resp); } }
URL 매개변수 사용
다음 스니펫은 쿼리가 분할될 때 생성된 데이터 소스 쿼리 및 HttpServletRequest
을 사용합니다.
HttpServletRequest
는 URL로 지정된 tableId
매개변수를 선택적으로 포함할 수 있습니다. 이 tableId
매개변수는 다음과 같이 반환될 데이터 테이블을 결정합니다.
-
tableId
매개변수가 생략되었거나planets
이외의 값이면 데이터 소스가 동물 데이터 테이블을 반환합니다. tableId
매개변수가planets
로 지정된 경우 데이터 소스가 행성 데이터 테이블을 반환합니다.
데이터 테이블을 반환하는 코드를 직접 작성할 때는 사용할 매개변수를 결정합니다.
private DataTable generateMyDataTable(Query query, HttpServletRequest req) throws TypeMismatchException { String tableID = req.getParameter("tableId"); if ((tableID != null) && (tableID.equalsIgnoreCase("planets"))) { return generatePlanetsTable(query); } return generateAnimalsTable(query); }
기능 사용하기
다음 스니펫은 쿼리를 사용하고 animals
데이터 테이블을 생성합니다.
private DataTable generateAnimalsTable(Query query) throws TypeMismatchException { DataTable data = new DataTable(); ListrequiredColumns = getRequiredColumns(query, ANIMAL_TABLE_COLUMNS); data.addColumns(requiredColumns); // Populate the data table for (String key : animalLinksByName.keySet()) { TableRow row = new TableRow(); for (ColumnDescription selectionColumn : requiredColumns) { String columnName = selectionColumn.getId(); if (columnName.equals(ANIMAL_COLUMN)) { row.addCell(key); } else if (columnName.equals(ARTICLE_COLUMN)) { row.addCell(animalLinksByName.get(key)); } } data.addRow(row); } return data; }
다음 스니펫은 쿼리를 사용하고 planets
데이터 테이블을 생성합니다.
private DataTable generatePlanetsTable(Query query) throws TypeMismatchException { DataTable data = new DataTable(); ListrequiredColumns = getRequiredColumns( query, planetTableColumns); data.addColumns(requiredColumns); // Populate data table for (Planet planet : Planet.values()) { TableRow row = new TableRow(); for (ColumnDescription selectionColumn : requiredColumns) { String columnName = selectionColumn.getId(); if (columnName.equals(PLANET_COLUMN)) { row.addCell(planet.name()); } else if (columnName.equals(MASS_COLUMN)) { row.addCell(planet.getMass()); } else if (columnName.equals(GRAVITY_COLUMN)) { row.addCell(planet.getSurfaceGravity()); } else if (columnName.equals(MOONS_COLUMN)) { row.addCell(planet.getNumberOfMoons()); } } data.addRow(row); } return data; }
AdvancedExampleServlet2
실행 및 테스트
이 섹션에서는 AdvancedExampleServlet2
를 실행하고 테스트하는 방법을 안내합니다.
AdvancedExampleServlet2
을 실행하고 테스트하려면 웹 애플리케이션을 업데이트하고 다음 섹션에 설명된 대로 데이터 소스를 쿼리하는 시각화를 설정합니다.
Apache Tomcat에서 웹 애플리케이션 업데이트
아래 안내에 따라 Apache Tomcat에서 웹 애플리케이션을 업데이트하세요. 다음 안내는 Windows 시스템의 Apache Tomcat에만 적용됩니다.
- 이전에
WEB-INF
디렉터리에 복사한web.xml
파일에는 이 예시에 필요한 정의와 매핑이 이미 포함되어 있습니다. 이를 정의하는 행은 다음과 같습니다.
<servlet> <servlet-name>AdvancedExampleServlet2</servlet-name> <description> AdvancedExampleServlet2 </description> <servlet-class>AdvancedExampleServlet2</servlet-class> </servlet> <servlet-mapping> <servlet-name>AdvancedExampleServlet2</servlet-name> <url-pattern>/advanced</url-pattern> </servlet-mapping>
- Tomcat을 시작하거나 이미 실행 중인 경우 Tomcat을 다시 시작합니다.
- 다음 링크를 클릭합니다. http://localhost:8080/myWebApp/advanced
화면 너비에 따라 화면에 6~7줄의 텍스트가 표시됩니다. 텍스트는google.visualization.Query.setResponse
로 시작하고{v:'http://en.wikipedia.org/wiki/Tiger'}]}]}});
로 끝납니다.
CSV 데이터 소스가 시각화에 보내는 응답입니다.
시각화를 사용하여 데이터 보기
<data_source_library_install>/examples/src/html
디렉터리의 all_examples.html
파일을 사용하여 데이터 시각화를 볼 수 있습니다.
all_examples
의 다음 스니펫은 advanced
서블릿, planets
테이블, 선택 쿼리, 막대 그래프 시각화를 지정합니다.
query = new google.visualization.Query('advanced?tableId=planets&tq=select planet,mass'); ... var chart = new google.visualization.BarChart(document.getElementById('advanced_div'));
all_examples.html
에 포함된 다른 시각화에 대한 설명은 외부 데이터 저장소 사용 섹션을 참조하세요.
시각화를 지정하고 쿼리 언어를 사용하는 방법에 관한 자세한 내용은 차트 사용과 쿼리 언어 참조를 확인하세요.
고급 데이터 소스에서 제공하는 데이터의 시각화를 보려면 아래 안내를 따르거나 조정합니다.
- 아직 하지 않았다면
all_examples.html
파일을<data_source_library_install>/examples/src/html
디렉터리
에서<tomcat_home>/webapps/myWebApp/
디렉터리로 복사합니다.
- 브라우저에서 http://localhost:8080/myWebApp/all_examples.html 링크를 클릭합니다. 다음과 같이 표시됩니다.
다음 단계
라이브러리와 함께 제공되는 예를 더 살펴보려면 빠른 참조 예를 참고하세요. 복잡한 데이터 소스 구현에 대한 자세한 내용은 구현 팁을 참고하세요.