10.3. 사용자 정의 핸들러 생성
사용자 지정 핸들러를 정의하는 방법은 다음 두 가지가 있습니다.
WEB-INF/jboss-web.xml 파일을 사용하여 사용자 지정 핸들러 정의
사용자 지정 핸들러는 WEB-INF/jboss-web.xml 파일에 정의할 수 있습니다.
예제: WEB-INF/jboss-web.xml에서 사용자 지정 핸들러 정의
<jboss-web>
<http-handler>
<class-name>org.jboss.example.MyHttpHandler</class-name>
</http-handler>
</jboss-web>
예제: HttpHandler Class
package org.jboss.example;
import io.undertow.server.HttpHandler;
import io.undertow.server.HttpServerExchange;
public class MyHttpHandler implements HttpHandler {
private HttpHandler next;
public MyHttpHandler(HttpHandler next) {
this.next = next;
}
public void handleRequest(HttpServerExchange exchange) throws Exception {
// do something
next.handleRequest(exchange);
}
}
WEB-INF/jboss-web.xml 파일을 사용하여 사용자 지정 핸들러에 대한 매개 변수를 설정할 수도 있습니다.
예제: WEB-INF/jboss-web.xml에서 매개 변수 정의
<jboss-web>
<http-handler>
<class-name>org.jboss.example.MyHttpHandler</class-name>
<param>
<param-name>myParam</param-name>
<param-value>foobar</param-value>
</param>
</http-handler>
</jboss-web>
이러한 매개 변수가 작동하려면 핸들러 클래스에 해당 setter가 있어야 합니다.
예제: 핸들러에서 Setter 방법 정의
package org.jboss.example;
import io.undertow.server.HttpHandler;
import io.undertow.server.HttpServerExchange;
public class MyHttpHandler implements HttpHandler {
private HttpHandler next;
private String myParam;
public MyHttpHandler(HttpHandler next) {
this.next = next;
}
public void setMyParam(String myParam) {
this.myParam = myParam;
}
public void handleRequest(HttpServerExchange exchange) throws Exception {
// do something, use myParam
next.handleRequest(exchange);
}
}
WEB-INF/undertow-handlers.conf 파일에서 사용자 지정 핸들러 정의
핸들러를 정의하는 데 WEB-INF/jboss-web.xml 을 사용하는 대신 WEB-INF/undertow-handlers.conf 파일에 정의할 수도 있습니다.
myHttpHandler(myParam='foobar')
WEB-INF/undertow-handlers.conf 에 정의된 핸들러가 작동하려면 다음 두 가지를 만들어야 합니다.
해당 구문 비트 for
undertow-handlers.conf를 정의하는HandlerBuilder구현으로HandlerWrapper로 래핑된HttpHandler를 생성합니다.예제:
HandlerBuilder클래스package org.jboss.example; import io.undertow.server.HandlerWrapper; import io.undertow.server.HttpHandler; import io.undertow.server.handlers.builder.HandlerBuilder; import java.util.Collections; import java.util.Map; import java.util.Set; public class MyHandlerBuilder implements HandlerBuilder { public String name() { return "myHttpHandler"; } public Map<String, Class<?>> parameters() { return Collections.<String, Class<?>>singletonMap("myParam", String.class); } public Set<String> requiredParameters() { return Collections.emptySet(); } public String defaultParameter() { return null; } public HandlerWrapper build(final Map<String, Object> config) { return new HandlerWrapper() { public HttpHandler wrap(HttpHandler handler) { MyHttpHandler result = new MyHttpHandler(handler); result.setMyParam((String) config.get("myParam")); return result; } }; } }파일의 항목.
META-INF/services/io.undertow.server.handlers.builder.HandlerBuilder. 이 파일은WEB-INF/classes와 같은 클래스 경로에 있어야 합니다.org.jboss.example.MyHandlerBuilder