2012-06-17 74 views
1

我有这两条线在我的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
web.xml文件:URL映射

 
<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

你能提供的一块'web.xml'具有URL映射配置? – nobeh

回答

8

/的网址格式有特殊含义。它表示“默认Servlet”URL模式。因此,每个请求其中不是匹配web.xml中的任何其他更具体的URL模式将最终结束在此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-mapping> 
    <servlet-name>Index</servlet-name> 
    <url-pattern>/index</url-pattern> 
</servlet-mapping> 

使用URL重写过滤图索引的servlet其他答案的建议是不必要的,你在有特定用途心神。

2

是的,是有区别的。无论是使用像UrlRewriteFilter除去斜线,或有你的web.xml同时指定:

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

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

至于映射到登录的servlet。

0

如果你想让它去登录Servlet。 为什么不尝试春天URL映射

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

String something = name; 

// Do manipulation 

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

关注此Spring MVC Framework Tutorial