1

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

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

3 回答 3

3

url-patternof/*监听每个请求URL。而是放置一个监听HTTP 状态代码 404(未找到)的<error-page>条目。web.xml

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

然后显然将 servlet 映射到一个url-patternof/error或任何你喜欢的东西,只要<location>匹配这个。

于 2010-06-12T16:27:36.497 回答
0

问题是 servlet 将占用整个根名称空间。要停止它,请将其移动到子文件夹中,然后您可以获得所需的内容,例如

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

然后,您可以使用 apache 重写规则统一两个命名空间(根目录和核心/子目录)。或者使用重定向过滤器,使用映射表将请求分派到适当的 url。这将映射

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

这样对 index.jsp 的请求就会到那里,而所有其他请求都会执行 servlet。

于 2010-06-12T16:24:24.627 回答
0

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

然后将此添加到您的 web.xml,

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
于 2010-06-12T16:30:18.970 回答