我有一个网络应用,我想定义我的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
输入网址。如何以这样的方式定义它以实现我想要的方式?
谢谢
答案 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>