如何在web.xml中定义url not found servlet映射?

时间:2010-06-12 15:42:59

标签: java servlets web.xml

我有一个网络应用,我想定义我的index.jsp文件,以便在输入的网址如下时显示:

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

输入网址。如何以这样的方式定义它以实现我想要的方式?

谢谢

3 个答案:

答案 0 :(得分:4)

url-pattern的{​​{1}}会收听每个请求网址。而是在/*中放置<error-page>条目,该条目监听HTTP status code 404(未找到)。

web.xml

然后,只要<error-page> <error-code>404</error-code> <location>/error</location> </error-page> 与此匹配,就可以将{servlet'映射到url-pattern /error或任何你喜欢的地方。

答案 1 :(得分: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。

答案 2 :(得分:0)

通过将您的app目录命名为webapps / ROOT或使用ROOT.war,确保您的webapp以ROOT身份运行。

然后将其添加到您的web.xml

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>