关于以下链接的helloworld示例:
http://wicket.apache.org/learn/examples/helloworld.html
helloworld工作正常,我可以使用url调用应用程序:http://localhost:8080/helloworld/
。现在我想扩展第二个应用程序hellowolrd2
的示例,当我用浏览器调用http://localhost:8080/helloworld2/
时,第二页helloworld2来了(类似于helloworld)。假设我有文件HelloWorld2.java
和HelloWorld2.html
。我在web.xml文件中应该更改什么?
答案 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/
页面,因为HelloWorld
是WebApplication
中定义的主页。 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);
}