1

我有这两行,web.xml

<url-pattern>/</url-pattern> : Index Servlet
但是
<url-pattern>/login</url-pattern> : Login Servlet

当我打开时,它http://localhost:8084/login/会转到Index Servlet,当我打开时http://localhost:8084/login,它会转到Login Servlet。和

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

web.xml

<小服务程序>
    <servlet-name>索引</servlet-name>
    <servlet-class>索引</servlet-class>
</servlet>
<小服务程序>
    <servlet-name>登录</servlet-name>
    <servlet-class>登录</servlet-class>
</servlet>

<servlet 映射>
    <servlet-name>索引</servlet-name>
    <url-模式>/</url-模式>
</servlet-mapping>
<servlet 映射>
    <servlet-name>登录</servlet-name>
    <url-pattern>/登录</url-pattern>
</servlet-mapping>
4

3 回答 3

8

的 URL 模式/具有特殊含义。它即表示“Default Servlet” URL 模式。因此,每个不匹配任何其他更具体的 URL 模式的web.xml请求最终都会出现在这个 servlet 中。请注意,这也涵盖了静态文件,例如普通的 HTML/CSS/JS 和图像文件!通常,“默认 Servlet”已经由 servlet 容器本身提供(参见例如Tomcat 的DefaultServlet文档)。在您自己的 web 应用程序中覆盖“默认 Servlet”应该非常小心,绝对不能这样。

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

所以万一

<welcome-file-list>
    <welcome-file>index</welcome-file>
</welcome-file-list>

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

<servlet-mapping>
    <servlet-name>Index</servlet-name>
    <url-pattern>/index</url-pattern>
</servlet-mapping>

对于您所考虑的特定目的,不需要按照其他答案的建议使用 URL 重写过滤器。

于 2012-06-17T15:13:08.027 回答
2

是,有一点不同。要么使用UrlRewriteFilter之类的东西来删除尾部斜杠,要么让你的 web.xml 指定两者:

<url-pattern>/login</url-pattern>

<url-pattern>/login/*</url-pattern>    

作为到登录 servlet 的映射。

于 2012-06-17T12:07:01.350 回答
0

如果你想让它去登录 Servlet。为什么不试试 Spring URL Mapping

@RequestMapping(value="/login", method=RequestMethod.GET)
public String demo(ModelMap map) {

String something = name;

// Do manipulation

return "login"; // Forward to login.jsp
}

观看此Spring MVC 框架教程

于 2013-06-08T03:45:19.363 回答