저자: Cloves Carneiro
번역자: simmone
저작권 설명: Matrix가 승인한 모든 웹사이트는재인쇄할 때 기사의 원본 출처와 작성자 정보 및 이 설명을 하이퍼링크 형식으로 표시해야 합니다. 저자: Cloves Carneiro;simmone
원래 주소: http://www.javaworld.com/javaworld/jw-06-2005/jw-0620-dwr.html
중국어 주소: http://www.matrix.org.cn/resource/article/43/43926_DWR_AJAX.html
키워드: DWR javascript :void(0);">AJAX
개요
이 기사에서는 웹 애플리케이션의 사용성을 향상시키기 위한오픈 소스 프로젝트 DWR(Direct Web Remoting)과 javascript :void(0);">AJAX(Asynchronous JavaScript and XML )의 개념을 설명합니다. 저자는 단계별로 보여줍니다. DWR이 javascript를 만드는 방법 :void(0);">AJAX 애플리케이션은 간단하고 빠릅니다. (1,600단어; 2005년 6월 20일)
javascript :void(0);">AJAX(Asynchronous JavaScript and XML)는 HTML (또는 XHTML)과 CSS(Cascading Style Sheet)의 혼합을 사용하여 대화형 웹 애플리케이션을 생성하기 위한 정보를 표현하는 개발기술을 설명합니다 . DOM ), JavaScript는 표현된 정보를 동적으로 표시하고 상호 작용하며, XMLHttpRequest 개체는 웹 서버와 비동기적으로 데이터를 교환하고 처리합니다.
인터넷의 많은 예제는 HTML 파일 내에서 XMLHttpRequest를 사용하여 서버와 상호 작용하는 데 필요한 단계를 보여줍니다. XMLHttpRequest 코드를 수동으로 작성하고 유지 관리할 때 개발자는 많은 잠재적인 문제, 특히 브라우저 간 DOM 구현 호환성과 같은 문제를 처리해야 합니다. 이로 인해 Javascript 코드를 코딩하고 디버깅하는 데 셀 수 없이 많은 시간이 소요되며 이는 확실히 개발자에게 친숙하지 않습니다.
DWR(Direct Web Remoting) 프로젝트는 javascript :void(0);">AJAX 및XMLHttpRequest 를 간단한 방법으로 사용하려는 개발자를 위한 Apache 라이센스에 따른 오픈 소스 솔루션입니다. HTML 페이지에서 애플리케이션 서버의 Java 객체를 호출하는방법입니다 . HTML 코드의 가독성을 유지하면서 다양한 유형의 매개변수를 조작합니다.
DWR은 디자인에 삽입되지 않으며 객체가 어떤 종류의 상속 구조를 사용하도록 강요하지도 않습니다. 서블릿 프레임워크 내의 애플리케이션과 잘 작동합니다. DHTML 프로그래밍 경험이 부족한 개발자를 위해 DWR은 테이블 조립, 선택 드롭다운 상자에 항목 채우기, <div> 및 <span과 같은 HTML 요소의 콘텐츠 변경 등 자주 사용되는 DHTML 작업이 포함된 JavaScript 라이브러리도 제공합니다. . >
DWR 웹사이트는 이 기사의 기초가 되는 철저하고 광범위한 문서를 갖추고 있습니다. DWR이 사용되는 방법과 해당 라이브러리를 사용하여 어떤 종류의작업을 수행할 수 있는지 보여주기 위해 몇 가지 예가 제공됩니다.
이 기사를 통해 독자는 DWR을 사용하는 웹 애플리케이션이 단계별로 어떻게 구축되는지 확인할 수 있습니다. 다운로드가 가능하고 환경에 배포하여 DWR이 어떻게 작동하는지 확인할 수 있는 이 간단한 샘플 애플리케이션을 만드는 데 필요한 세부 정보를 보여 드리겠습니다.
참고: javascript :void(0);">AJAX에 대한 정보를 찾는 것은 어렵지 않습니다. 웹에는 이 주제를 다루는 여러 기사와 블로그 항목이 있으며 각각은 개념의 다른 측면을 지적하고 설명하려고 합니다. 리소스 섹션에서는 javascript :void(0);">AJAX에 대해 자세히 알아볼 수 있는 예제와 기사에 대한 흥미로운 링크를 찾을 수 있습니다.
샘플 애플리케이션 <BR>이 기사에 사용된 샘플 애플리케이션은 토론토의 아파트 임대 검색 엔진을 시뮬레이션합니다. 사용자는 검색하기 전에 검색 기준 세트를 선택할 수 있습니다. 상호작용성을 향상시키기 위해 javascript :void(0);">AJAX는 다음 두 가지 상황에서 사용됩니다.
·애플리케이션은 사용자의 선택에 따라 얼마나 많은 검색 결과가 반환될 것인지 사용자에게 알려줍니다. 이 숫자는 javascript :void(0);">AJAX를 사용하여 실시간으로 업데이트됩니다. - 사용자가 선택한 침실 및 욕실 수 또는 가격 범위가 변경될 때 기준에 일치하는 검색 결과가 없거나 너무 많은 경우 , 사용자는 검색 버튼을 클릭할 필요가 없습니다.
· 데이터베이스 쿼리 및 결과 검색은 javascript :void(0);">AJAX에 의해 수행됩니다. 사용자가 결과 표시 버튼을 누르면 데이터베이스가 검색을 수행합니다. 이러한 방식으로 애플리케이션의 반응성이 향상되고 전체 결과를 표시하기 위해 페이지를 오버로드할 필요는 없습니다.
데이터베이스 <BR>우리가 사용하는 데이터베이스는 HSQL로, 리소스를 거의 차지하지 않고설치 및 구성 없이 웹 애플리케이션과 함께 번들로 제공될 수 있는 Java SQL 데이터베이스 엔진입니다. SQL 파일은 인메모리 테이블을 생성하고 웹 애플리케이션 컨텍스트가 시작될 때 일부 레코드를 추가하는 데 사용됩니다.
Java 클래스 <BR> 애플리케이션에는 Apartment와 ApartmentDAO라는 두 개의 주요 클래스가 포함되어 있습니다. Apartment.java 클래스는 속성과 getter/setter 메소드가 있는 간단한 Java 클래스입니다. ApartmentDAO.java는 데이터베이스를 쿼리하고 사용자의 검색 기준에 따라 정보를 반환하는 데 사용되는 데이터 액세스 클래스입니다. ApartmentDAO 클래스의 구현은 간단합니다. Java 데이터베이스 연결 호출을 직접 사용하여 사용자의 요청과 일치하는 총 아파트 수와 사용 가능한 아파트 목록을 가져옵니다.
DWR 구성 및 사용 <BR>DWR 사용 설정은 간단합니다. DWR jar 파일을 웹 애플리케이션의 WEB-INF/lib 디렉토리에 복사하고 web.xml에 서블릿 선언을 추가한 후 DWR 구성 파일을 생성합니다. DWR 배포를 위해서는 별도의 jar 파일이 필요합니다. 애플리케이션의 WEB-INF/web.xml에 있는 배포 설명자 섹션에 DWR 서블릿을 추가해야 합니다.
<서블릿>
<servlet-name>dwr-invoker</servlet-name>
<display-name>DWR 서블릿</display-name>
<description>직접 웹 원격 서블릿</description>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<초기화 매개변수>
<param-name>디버그</param-name>
<param-value>true</param-value>
</init-param>
</서블릿>
<서블릿 매핑>
<servlet-name>dwr-invoker</servlet-name>
<url-패턴>/dwr/*</url-pattern>
</서블릿 매핑>
선택적인 단계는 위의 예와 같이 서블릿 설명 섹션에서 디버그 매개변수를 true로 설정하여 DWR을 디버그 모드로 설정하는 것입니다. DWR이 디버그 모드에 있으면 HTML 페이지에서 액세스 가능한 모든 Java 개체를 볼 수 있습니다. 사용 가능한 개체 목록이 포함된 웹 페이지는 개체의 공개 메서드를 표시하는 URL /WEBAPP/dwr에 나타납니다. 나열된 메소드는 페이지에서 호출할 수 있으며, 이를 통해 처음으로 서버의 객체에 대해 메소드를 실행할 수 있습니다. 다음 이미지는 디버그 페이지의 모습을 보여줍니다.
디버그 페이지
이제 XMLHttpRequest 객체를 통해 어떤 객체가 요청을 받을지 DWR에게 알려야 합니다. 이 작업은 dwr.xml이라는 구성 파일을 통해 수행됩니다. 구성 파일에서는 DWR을 통해 웹 페이지에서 호출할 수 있는 개체를 정의합니다. 설계상 DWR은 게시된 클래스의 모든 공개 메서드에 대한 액세스를 허용하지만 우리의 경우에는 몇 가지 메서드에만 액세스를 허용합니다. 예제의 구성 파일은 다음과 같습니다.
<dwr>
<허용>
<convert 변환기="bean" match="dwr.sample.Apartment"/>
<create creator="new" javascript="ApartmentDAO" class="dwr.sample.ApartmentDAO">
<include 메소드="findApartments"/>
<include 메소드="countApartments"/>
</create>
</allow>
</dwr>
위 파일은 이 예에서 두 가지 목표를 모두 달성합니다. 첫째, <convert> 태그는 DWR에게 dwr.sample.Apartment 객체의 유형을 연관 배열로 변환하도록 지시합니다. 왜냐하면 보안상의 이유로 DWR은 기본적으로 일반 Bean을 변환하지 않기 때문입니다. 둘째, <create> 태그를 사용하면 DWR이 JavaScript 호출을 위한 dwr.sample.ApartmentDAO 클래스를 노출할 수 있으며, 페이지에서 사용하는 JavaScript 파일은 javascript 속성으로 정의됩니다. dwr.sample.ApartmentDAO 클래스의 어떤 메소드를 사용할 수 있는지 지정하는 <include> 태그에 주의를 기울여야 합니다.
HTML/JSP 코드 <BR>가 구성된 후에는 웹 애플리케이션을 시작할 수 있습니다. 이때 DWR은 HTML 또는 Java 서버 측 페이지(JSP)에서 필요한 메소드를 호출할 준비가 됩니다. JavaScript 파일을 만듭니다. search.jsp 파일에서 DWR 엔진뿐만 아니라 DWR에서 제공하는 JavaScript 인터페이스를 추가하고코드 에 다음 세 줄을 추가해야 합니다:
<script src='dwr/interface/ApartmentDAO.js'></ 스크립트>
<script src='dwr/engine.js'></script>
<script src='dwr/util.js'></script>
사용자가 검색 기준을 변경할 때 이것이 샘플 프로그램에서 javascript :void(0);">AJAX를 처음으로 적용한 것임을 알 수 있습니다. 기준이 변경되면 사용 가능한 아파트 수가 업데이트됩니다. 저는 두 가지 JavaScript 함수를 만들었습니다. ApartmentDAO.countApartments() 함수는 가장 흥미로운 부분인 loadTotal() 함수입니다. DWR은 서버로부터 응답을 받을 때 호출됩니다. 그런 다음 대화형 시나리오에 사용되는 JavaScript 함수의 <div>에 결과를 표시하기 위해 loadTotal이 호출됩니다
.
$("resultTable").style.display = '없음';
var 침실 = document.getElementById("침실").value;
var 욕실 = document.getElementById("욕실").value;
var 가격 = document.getElementById("price").value;
ApartmentDAO.countApartments(loadTotal, 침실, 욕실, 가격);
}
함수 loadTotal(데이터) {
document.getElementById("totalRecords").innerHTML = 데이터;
}
분명히 사용자는 자신의 검색 기준과 일치하는 아파트 목록을 보고 싶어합니다. 그런 다음 사용자가 검색 기준에 만족하고 총계가 유효하면 결과를 표시하는 버튼을 누르고 updateResults() JavaScript 메서드를 호출합니다.
함수 업데이트결과() {
DWRUtil.removeAllRows("apartmentsbody");
var 침실 = document.getElementById("침실").value;
var 욕실 = document.getElementById("욕실").value;
var 가격 = document.getElementById("price").value;
ApartmentDAO.findApartments(fillTable, 침실, 욕실, 가격);
$("resultTable").style.display = '';
}
함수 fillTable(아파트) {
DWRUtil.addRows("apartmentsbody", apartment, [ getId, getAddress, getBedrooms, getBathrooms, getPrice ]);
}
updateResults() 메서드는 검색 반환 결과를 저장하는 테이블 필드를 지우고 사용자 인터페이스에서 필수 매개변수를 가져온 다음 이러한 매개변수를 DWR에서 생성된 ApartmentDAO 개체에 전달합니다. 그런 다음 데이터베이스 쿼리가 실행되고 fillTable()이 호출되어 DWR(아파트)에서 반환된 개체를 구문 분석하고 이를 페이지(아파트 본문)에 표시합니다.
보안 요소 <BR>예제를 간략하게 유지하기 위해 ApartmentDAO 클래스는 가능한 한 단순하게 유지되지만 이러한 클래스에는 일반적으로 insert(), update() 및 delete()와 같은 데이터를 조작하기 위한 set 메소드 세트가 있습니다. DWR은 모든 HTML 페이지에서 호출되는 모든 공개 메소드를 노출합니다. 보안상의 이유로 데이터 액세스 레이어를 이와 같이 노출하는 것은 현명하지 않습니다. 개발자는 모든 JavaScript 기능과 기본 비즈니스 구성 요소 간의 통신을 중앙 집중화하여 기능의 과도한 노출을 제한하는 외관을 만들 수 있습니다.
결론 <BR>이 기사는 프로젝트에서 DWR 기반 javascript :void(0);">AJAX를 사용하기 위한 시작일 뿐입니다. DWR을 사용하면 애플리케이션의 상호 작용 모델을 개선하는 방법에 집중할 수 있습니다. JavaScript 코드 작성 및 디버깅의 부담 javascript :void(0);">AJAX는 사용성을 향상시키는 위치와 방법을 정의하는 것입니다. DWR은 웹 페이지와 Java 객체 간의 통신을 담당하므로 애플리케이션의 사용자 인터페이스를 보다 친숙하게 만드는 방법에 전적으로 집중할 수 있도록 도와줍니다.
이 글을 읽고 매우 귀중한 피드백을 주신 Mircea Oancea와 Marcos Pereira에게 감사의 말씀을 전하고 싶습니다.
리소스 ·javaworld.com:javaworld.com
·Matrix-Java 개발자 커뮤니티: http://www.matrix.org.cn/
·onjava.com:onjava.com
·샘플 프로그램의 모든 소스 코드 다운로드: http://www.javaworld.com/javaworld/jw-06-2005/dwr/jw-0620-dwr.war
·DWR: http://www.getahead.ltd.uk/dwr/index.html
·HSQL: http://hsqldb.sourceforge.net/
·javascript :void(0);">AJAX 정의: http://en.wikipedia.org/wiki/javascript :void(0);">AJAX
· "javascript :void(0);">AJAX: 웹 애플리케이션을 향한 새로운 길": Jesse James Garrett(Adaptive Path, 2005.2): http://www.adaptivepath.com/publications/essays/archives/000385.php
· “매우 동적인 웹 인터페이스” Drew McLellan(xml.com, 2005.2): http://www.xml.com/pub/a/2005/02/09/xml-http-request.html
·XMLHttpRequest & javascript :void(0);">AJAX 작업 예: http://www.fiftyfoureleven.com/resources/programming/xmlhttprequest/examples
· “Usable XMLHttpRequest Practices” 백달 토마스(Baekdal.com, 2005.3): http://www.baekdal.com/articles/Usability/usable-XMLHttpRequest/
·"XMLHttpRequest 사용 지침" 백달 토마스(Baekdal.com, 2005.2): http://www.baekdal.com/articles/Usability/XMLHttpRequest-guidelines/