2010-06-12 57 views
2

我有一个web应用程序,我想我的定义index.jsp文件中显示当输入的网址是这样的:如何在web.xml中定义一个url未找到servlet映射?

www.mysite.com 
www.mysite.com/ 
www.mysite.com/index.jsp 

但是如果输入任何其他网址,如:

wwww.mysite.com/g 

我想要一个特定的servlet来处理请求。在我的web.xml文件中,我这样做:

<servlet> 
    <servlet-name>ServletCore</servlet-name> 
    <servlet-class>com.me.test.ServletCore</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>ServletCore</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

从而让ServletCore的servlet拿起任何URL,但预计它接管了连:

www.mysite.com/index.jsp 

类型的网址。我怎样才能以这种方式来定义它的工作方式?

谢谢

回答

4

url-pattern/*上侦听,每请求URL。相反,<error-page>条目web.xmlHTTP status code 404(未找到)上侦听。

<error-page> 
    <error-code>404</error-code> 
    <location>/error</location> 
</error-page> 

再明显地图上/errorurl-pattern或任何你喜欢,只要<location>匹配这个servlet的。

0

问题是,servlet会占用整个根名称空间。为了阻止它,把它移到子文件夹中,然后你就可以得到你想要的东西,例如

<servlet-mapping> 
    <servlet-name>ServletCore</servlet-name> 
    <url-pattern>/core/*</url-pattern> 
</servlet-mapping> 

然后,您可以使用apache重写规则统一两个命名空间(root和core/subdir)。或者使用重定向filter,使用映射表将请求分派到适当的URL。这将映射

index.jsp -> index.jsp 
    everything else -> core/$1 

因此,请求index.jsp去那里,所有其他请求去做servlet。

0

只要确保您的webapp作为ROOT运行,将您的应用程序目录命名为webapps/ROOT或使用ROOT.war。

然后将它添加到你的web.xml,

<welcome-file-list> 
<welcome-file>index.jsp</welcome-file> 
</welcome-file-list> 
相关问题