아파치 위켓

아파치 위켓(Apache Wicket)은 보통 위켓이라고 불리며, 자바 프로그래밍 언어를 위한 컴포넌트 기반 웹 프레임워크로, 개념적으로 자카르타 페이스 및 태피스트리와 유사하다. 이 프레임워크는 조너선 로크가 2004년 4월에 처음 작성했다. 버전 1.0은 2005년 6월에 출시되었다. 2007년 6월에는 아파치 최상위 프로젝트로 승격되었다.

원리
기존의 모델-뷰-컨트롤러 (MVC) 프레임워크는 전체 요청과 전체 페이지 단위로 작동한다. 각 요청 주기에서 들어오는 요청은 컨트롤러 객체의 메서드에 매핑되며, 이 메서드는 일반적으로 모델에서 데이터를 가져와 특수 템플릿 마크업으로 작성된 뷰를 채움으로써 나가는 응답 전체를 생성한다. 이는 애플리케이션의 흐름을 단순하고 명확하게 유지하지만, 컨트롤러에서의 코드 재사용을 어렵게 만들 수 있다.

반면, 위켓은 상태 유지 GUI 프레임워크(예: 스윙)를 면밀히 본떠 만들어졌다. 위켓 애플리케이션은 컴포넌트 트리로 구성되어 있으며, 스윙 컴포넌트가 마우스 및 키 입력 이벤트에 반응하는 것과 동일한 방식으로 리스너 델리게이트를 사용하여 링크 및 폼에 대한 HTTP 요청에 반응한다. 위켓은 컴포넌트 기반 프레임워크로 분류된다.

설계
위켓은 템플릿을 위해 순수 XHTML을 사용한다(이는 프레젠테이션과 비즈니스 로직의 명확한 분리를 강제하며, 템플릿을 일반적인 위지위그 디자인 도구로 편집할 수 있게 한다). 각 컴포넌트는 XHTML의 이름 지정된 요소에 바인딩되며, 최종 출력에서 해당 요소를 렌더링하는 역할을 담당한다. 페이지는 단순히 최상위 컨테이너 컴포넌트이며, 정확히 하나의 XHTML 템플릿과 짝을 이룬다. 특별한 태그를 사용하여 개별 컴포넌트 그룹을 패널이라는 단일 컴포넌트로 추상화할 수 있으며, 이 패널은 해당 페이지, 다른 페이지 또는 다른 패널에서도 통째로 재사용할 수 있다.

각 컴포넌트는 자체 모델에 의해 지원되며, 이는 컴포넌트의 상태를 나타낸다. 프레임워크는 컴포넌트가 모델과 어떻게 상호 작용하는지 알지 못하며, 모델은 요청 간에 자동으로 직렬화되고 지속되는 불투명한 객체로 처리된다. 그러나 더 복잡한 모델은 분리 가능하게 만들어져 각 요청 주기 시작 및 끝에서 자체 저장 및 복원을 처리하는 훅을 제공할 수 있다. 위켓은 특정 객체 지속성 또는 ORM 계층을 강제하지 않으므로, 애플리케이션은 종종 하이버네이트 객체, EJB 또는 POJO의 조합을 모델로 사용한다.

위켓에서는 모든 서버 측 상태가 자동으로 관리된다. HttpSession 객체나 유사한 래퍼를 직접 사용하여 상태를 저장해서는 안 된다. 대신 상태는 컴포넌트와 연결된다. 각 서버 측 페이지 컴포넌트는 상태 유지 컴포넌트의 중첩된 계층 구조를 가지며, 각 컴포넌트의 모델은 결국 POJO(Plain Old Java Object)이다.

위켓은 단순함을 지향한다. 위켓에는 배워야 할 설정 파일이 없다. 위켓은 컴포넌트 구조에 대한 일관된 접근 방식을 가진 단순한 클래스 라이브러리이다.

예시
네 개의 파일로 구성된 헬로 월드 위켓 애플리케이션:
 HelloWorld.html
 XHTML 템플릿.
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"
      xml:lang="en" lang="en">

<body>
    <span wicket:id="message" id="message">Message goes here</span>
</body>
</html>

 HelloWorld.java
 템플릿에 바인딩될 페이지 컴포넌트. 이 컴포넌트는 다시 자식 컴포넌트(이름이 "message"인 Label 컴포넌트)를 바인딩한다.
package org.wikipedia.wicket;

import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;

public class HelloWorld extends WebPage {
    /**
     * Constructor
     */
    public HelloWorld() {
        add(new Label("message", "Hello World!"));
    }
}

 HelloWorldApplication.java
 홈페이지 요청을 HelloWorld 페이지 컴포넌트로 라우팅하는 주 애플리케이션 클래스.
package org.wikipedia.wicket;

import org.apache.wicket.protocol.http.WebApplication;

public class HelloWorldApplication extends WebApplication {
    /**
     * Constructor.
     */
    public HelloWorldApplication() {
    }

    /**
     * @see org.apache.wicket.Application#getHomePage()
     */
    public Class getHomePage() {
        return HelloWorld.class;
    }
}

 web.xml
 서블릿 애플리케이션 배포 기술자, 위켓을 서블릿의 기본 핸들러로 설치하고 시작 시 HelloWorldApplication이 인스턴스화되도록 구성한다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                             http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         id="WebApp_ID" version="2.5">
    <display-name>Wicket Example</display-name>
    <filter>
        <filter-name>HelloWorldApplication</filter-name>
        <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
        <init-param>
            <param-name>applicationClassName</param-name>
            <param-value>org.wikipedia.wicket.HelloWorldApplication</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>HelloWorldApplication</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

구성요소
폼, 링크, 리피터 등과 같은 기본 구성요소가 내장되어 있다.

릴리스
+
아파치 위켓 버전시리즈설명최신 릴리스최신 릴리스 날짜Javax API에서 Jakarta API로 마이그레이션. 스프링 프레임워크 6을 지원하기 위해 의존성을 업그레이드하여 필수 최소 플랫폼으로 자바 17로 이동하고 자바 21과 호환됨. CGLib은 ByteBuddy로 대체됨.Announcing Apache Wicket 10: build modern web applications with Java!. wicket.apache.org. Retrieved on 2024-03-11.10.0.02024-03-11필수 최소 플랫폼으로 자바 11로 이동, JUnit 4에서 5로 마이그레이션, 자바 12 및 13 지원, 페이지 및 데이터 저장소 재작업 및 기타 개선 사항.Announcing Apache Wicket 9: get into the modern Java world!. wicket.apache.org. Retrieved on 2020-10-05.9.16.02023-11-23필수 최소 플랫폼으로 자바 8로 이동. 람다 지원, 필수 서블릿 API 버전 3.1로 이동, 날짜 처리용 새 유형 지원 및 기타 개선 사항.Announcing Apache Wicket 8: Write Less, Achieve More. wicket.apache.org. Retrieved on 2018-05-22. 9.x 버전으로 업그레이드 권장.8.14.02022-01-29필수 최소 플랫폼으로 자바 7로 이동, 크로스 사이트 요청 위조 방지, 인라인 이미지 지원. 릴리스는 약 300개의 기능, 개선 사항 및 수정 사항으로 구성.Apache Wicket v7.0 released. wicket.apache.org. Retrieved on 2018-04-16. 보안 수정만 제공되며, 9.x 버전으로 업그레이드 권장.7.18.02021-04-02필수 최소 플랫폼으로 자바 6로 이동. 즉시 사용 가능한 jQuery 통합, AJAX 요청에 대한 완벽한 제어, 브라우저에서 향상된 이벤트 등록, 대규모 데이터셋 지원, 클라이언트 측 자바스크립트 라이브러리 종속성 관리, 웹소켓 실험적 지원.Apache Wicket v6.0.0 released. wicket.apache.org. Retrieved on 2020-10-05.6.30.02018-12-05위켓 기능 개선.Apache Wicket - Apache Wicket releases Wicket 1.5. Wicket.apache.org. Retrieved on 2013-08-13. 1.5.162016-08-05필수 최소 플랫폼으로 자바 5로 이동.Apache Wicket - Apache Wicket 1.4 takes typesafety to the next level . Wicket.apache.org. Retrieved on 2013-08-13.1.4.232014-02-061.3.72009-07-301.2.72008-03-231.1.1TBD1.0.3TBD 

 같이 보기 

 바딘
 태피스트리
 클릭
 ZK
 리치페이스
 에코

 각주 







내용주

 외부 링크 

분류:아파치 소프트웨어 재단 프로젝트
분류:웹 프레임워크
분류:자바 플랫폼, 엔터프라이즈 에디션
분류:자바로 작성된 자유 소프트웨어