我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> <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>
答案 0 :(得分:8)
/
的网址格式具有特殊含义。它表示“默认Servlet”URL模式。因此 的每个请求都与web.xml
中的任何其他更具体的网址格式相匹配,最终会在此servlet中结束。请注意,这也包括静态文件,如普通的HTML / CSS / JS和图像文件!通常,servlet容器本身已经提供了“Default Servlet”(参见例如Tomcat's DefaultServlet
documentation)。覆盖您自己的webapp中的“Default 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重写过滤器是不必要的。
答案 1 :(得分:2)
是的,有区别。使用UrlRewriteFilter之类的东西删除尾部斜杠,或者让web.xml指定两者:
<url-pattern>/login</url-pattern>
和
<url-pattern>/login/*</url-pattern>
映射到登录servlet。
答案 2 :(得分:0)
如果你想进入Login 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
}