이 섹션에서는 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
객체에서 쿼리를 가져와서 이를 별도의 쿼리 2개로 분할합니다. 하나는 데이터 소스 쿼리이고 다른 하나는 완료 쿼리입니다. 데이터 소스의 선언된 기능은 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
에 포함된 다른 시각화에 관한 설명은 외부 데이터 저장소 사용 섹션을 참조하세요.
시각화를 지정하고 쿼리 언어를 사용하는 방법에 대한 자세한 내용은 차트 사용과 쿼리 언어 참조를 참조하세요.
고급 데이터 소스에서 제공하는 데이터의 시각화를 보려면 아래 안내를 따르거나 조정하세요.
- 아직 복사하지 않았다면
<data_source_library_install>/examples/src/html
디렉터리
에서<tomcat_home>/webapps/myWebApp/
디렉터리로all_examples.html
파일을 복사합니다.
- 브라우저에서 http://localhost:8080/myWebApp/all_examples.html 링크를 클릭합니다. 다음과 같이 표시됩니다.
다음 단계
라이브러리와 함께 제공되는 예를 더 자세히 알아보려면 빠른 참조 예시를 참고하세요. 복잡한 데이터 소스 구현에 관한 자세한 내용은 구현 팁을 참고하세요.