如何构建两个Wicket应用程序

时间:2012-12-17 12:29:04

标签: java web-applications wicket web.xml

关于以下链接的helloworld示例:

http://wicket.apache.org/learn/examples/helloworld.html

helloworld工作正常,我可以使用url调用应用程序:http://localhost:8080/helloworld/。现在我想扩展第二个应用程序hellowolrd2的示例,当我用浏览器调用http://localhost:8080/helloworld2/时,第二页helloworld2来了(类似于helloworld)。假设我有文件HelloWorld2.javaHelloWorld2.html。我在web.xml文件中应该更改什么?

2 个答案:

答案 0 :(得分:3)

您并非真的需要修改web.xml中的任何内容。这里定义的唯一相关设置是<filter-mapping>元素

<filter-mapping>
    <filter-name>HelloWorldApplication</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

,它将对应用程序(其上下文根)所做的所有请求(/*)映射到Wicket过滤器(将其视为servlet),它将处理所有Wicket请求并将它们引导到适当的方法(组件构造函数,事件处理程序方法等)。

在示例中,您在请求HelloWorld时看到http://localhost:8080/helloworld/页面,因为HelloWorldWebApplication中定义的主页。 helloworld是webapp的上下文根,因此Wicket会自动转到WebApplication#getHomePage()中定义的页面:

@Override
public Class getHomePage() {
    return HelloWorld.class;
}

请注意,helloworld这里是应用程序的上下文根。因此,除非你想在getHomePage()中定义一些逻辑以根据某些标准返回一个或另一个类别(不要认为这是你之后的事情),它将有效地服务{{1 }}。

现在,通过Wicket解决您的问题,您可以使用WebApplication#mountPage()将(可收藏的)页面装入网址:

HelloWorld

这将使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

答案 1 :(得分:1)

您没有两个应用程序,实际上您有两个页面。 第一个(helloworld)被映射为响应主页,它在HelloWorldApplication中定义:

@Override
public Class getHomePage() {
    return HelloWorld.class;
}

如果你想localhost:8080 / helloworld2 /只需在HelloWorldApplication的init()方法中创建一个映射

@Override
public void init() {
super.init();
this.mountPage("/helloworld2", Helloworld2.class);
}