Вам ничего не нужно изменять в web.xml
. Только соответствующая настройка определяется есть <filter-mapping>
элемент
<filter-mapping>
<filter-name>HelloWorldApplication</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
, который отображает все запросы (/*
), сделанные в приложении (контекст его корня) к калитке фильтра (думать об этом как сервлет), который будет обрабатывать все запросы Wicket и направляют их к соответствующему методу (конструктор компонента, метод обработчика событий и т. д.).
В примере, вы видите HelloWorld
страницу при запросе http://localhost:8080/helloworld/
потому что HelloWorld
является домашняя страница определяется в WebApplication
. helloworld
является корневым контекстом для веба-приложения, так Калитка автоматически переходит на страницу, определенной в WebApplication#getHomePage()
:
@Override
public Class getHomePage() {
return HelloWorld.class;
}
Обратите внимание, что helloworld
здесь является корневым контекстом приложения. Поэтому, если вы не хотите определять какую-либо логику в getHomePage()
, чтобы вернуть класс или другой в зависимости от некоторых критериев (на самом деле не думайте, что это то, что вам нужно), он эффективно будет обслуживать HelloWorld
.
Теперь, обращаясь на ваш вопрос, с калиткой вы можете монтировать (bookmarkable) страницы в URL, используя WebApplication#mountPage()
:
public class HelloWorldApplication extends WebApplication {
@Override
protected void init() {
mountPage("/helloworld", HelloWorld.class);
mountPage("/helloworld2", HelloWorld2.class);
}
@Override
public Class getHomePage() {
return HelloWorld.class;
}
}
Это сделало бы http://localhost:8080/helloworld/
служить HelloWorld
класс, являющийся домашней страницей. Но также будет служить для запроса http://localhost:8080/helloworld/helloworld
. Запрос http://localhost:8080/helloworld/helloworld2
будет эффективно служить HelloWorld2
.
Или, если вы действительно хотели http://localhost:8080/helloworld2/
служить HelloWorld2
, вы должны развернуть другой веб-приложение, конечно же со своим собственным web.xml
и контекстно-корень helloworld2
.
это отлично работает, когда я устанавливаю mountPage() в метод init(). Я не знаю, почему это не работает, если moutPage() в конструкторе. Спасибо за помощь –
Да, действительно, 'mountPage' должен быть на' init() ', а не на конструкторе. Я изменил ответ. В качестве примечания к ответу, посмотрите эту запись [Wicket in Action на странице установки] (http://wicketinaction.com/2011/07/wicket-1-5-mounting-pages/), вы можете найти ее полезной , –