java - 用于通配符请求的 web.xml servlet 映射

标签 java jsp jakarta-ee

我希望我的一个 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>

----编辑-----

我意识到我的问题有点不清楚和不完整。这是我想要完成的确切示例..

  1. http://mytestsite.com/ -> 映射到 http://mytestsite.com/index.html
  2. http://mytestsite.com/servlet1 -> 运行 com.mytestsite.servlet1
  3. 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/

相关文章:

在 jsp 中的两个不同表单上使用两个提交按钮时出现 Java 错误

jakarta-ee - 错误 : Need to specify class name in environment or system property

java - 如何声明可以包含另一个元素或仅包含文本的元素

jsp lang参数在struts 1.1中自动存入cookie

java - 根据db中存储的用户服务渲染jsp页面的不同部分

spring - 注入(inject) Autowiring 的依赖项失败

java - 如何检查请求的 URL 是否是 servlet(在过滤器中)?

Visual Studio 2015 基本应用程序中的 Java 版本 1.7(Android、Gradle)

java - 多项式的 toString 方法

java - Ant build.xml 与 junit 测试的布局