我希望我的一个 servlet (test2) 处理“/”请求(即 http://localhost/ ),而另一个 servlet (test1) 处理所有其他请求 (“/*”)。
我在下面设置了我的 web.xml,但问题是所有请求都转到 test1.jsp(甚至是“/”请求)
有人可以告诉我如何完成这个吗?
<servlet>
<servlet-name>test1</servlet-name>
<jsp-file>/test1.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>test1</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>test2</servlet-name>
<jsp-file>/test2.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>test2</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
----编辑-----
我意识到我的问题有点不清楚和不完整。这是我想要完成的确切示例..
- http://mytestsite.com/ -> 映射到 http://mytestsite.com/index.html
- http://mytestsite.com/servlet1 -> 运行 com.mytestsite.servlet1
- http://mytestsite.com/ * -> 映射到 http://mytestsite.com/catchall.jsp (我希望所有其他未映射到 web.xml 中的请求映射到 catchall.jsp)
所以我的 web.xml 如下所示:
<servlet>
<servlet-name>servlet1</servlet-name>
<servlet-class>com.mytestsite.servlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet1</servlet-name>
<url-pattern>/servlet1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>catchall</servlet-name>
<jsp-file>/catchall.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>catchall</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
所以我注意到一个奇怪的问题。当我请求 http://mytestsite.com/ ,它会在重定向到 index.html 之前转到 catchall.jsp。然而,它发生得太快了,我什至没有注意到它命中了 catchall.jsp(但我在这个文件中放了一个 System.out.println,它确实命中了)。
最佳答案
我认为您的目标有点困惑和脆弱。但是,要回答您的问题,请尝试使用 http://your-domain.com/ 的欢迎文件条目请求。
<welcome-file-list>
<welcome-file>/test2.jsp</welcome-file>
</welcome-file-list>
最常见的做法是让 test2.jsp 执行重定向或转发到应用程序中的其他“ Controller ”。这样你的 MVC 即使在 http://your-domain.com/ 上也总是被触发。请求。
如果您同意我的观点,那么您的欢迎文件应该是 index.jsp(以遵循通用约定)。 index.jsp 中的代码然后是单行重定向到“欢迎”servlet。
关于java - 用于通配符请求的 web.xml servlet 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1484854/