web.xml:URL映射

Dev*_*xit 1 java web.xml servlets java-ee

我在这两条线web.xml

<url-pattern>/</url-pattern> : Index Servlet

<url-pattern>/login</url-pattern> : Login Servlet

但whem我打开http://localhost:8084/login/,它去Index Servlet,当我打开http://localhost:8084/login,它去Login Servlet.和?

有什么区别吗? 我的http://localhost:8084/login/http://localhost:8084/login

web.xml

<servlet>
    <servlet-name>Index</servlet-name>
    <servlet-class>Index</servlet-class>
</servlet>
<servlet>
    <servlet-name>Login</servlet-name>
    <servlet-class>Login</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Index</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Login</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>

Bal*_*usC 8

URL模式/具有特殊含义.它表示"默认Servlet"URL模式.因此,每个请求其不匹配任何其他更具体的网址模式web.xml最终将在这个servlet结束.请注意,这也包括静态文件,如普通的HTML/CSS/JS和图像文件!通常,servlet容器本身已经提供了"Default Servlet"(参见例如Tomcat的DefaultServlet文档).覆盖您自己的webapp中的"Default Servlet"应该非常谨慎,绝对不是这样.

您需要为索引servlet提供不同的URL模式.它应该与你定义的相同<welcome-file>.

所以万一

<welcome-file-list>
    <welcome-file>index</welcome-file>
</welcome-file-list>
Run Code Online (Sandbox Code Playgroud)

您需要按如下方式映射索引servlet

<servlet-mapping>
    <servlet-name>Index</servlet-name>
    <url-pattern>/index</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

对于您的特定目的,使用其他答案建议的URL重写过滤器是不必要的.