web.xml:URL映射

时间:2012-06-17 12:01:10

标签: java java-ee servlets web.xml

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>

3 个答案:

答案 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
}

观看此Spring MVC Framework Tutorial