<servlet-mapping>
<servlet-name>testServlet</servlet-name>
<url-pattern>/test/*</url-pattern>
</servlet-mapping>
/test/pageを押すと、上記が機能します。ただし、/testまたは/test/を押しても機能しません。私は Spring MVC を使用しており、リクエスト マッピングは次のとおりです。
@RequestMapping(value = {"","/"})
編集:
独立したプロジェクトで検証中ですが、Spring の UrlPathHelper のバグのようです。次のメソッドは、コンテキストとサーブレット パスの両方があり、末尾のスラッシュなしでサーブレットをヒットすると、正しくないパスを返します。
public String getPathWithinApplication(HttpServletRequest request) {
String contextPath = getContextPath(request);
String requestUri = getRequestUri(request);
if (StringUtils.startsWithIgnoreCase(requestUri, contextPath)) {
// Normal case: URI contains context path.
String path = requestUri.substring(contextPath.length());
return (StringUtils.hasText(path) ? path : "/");
}
else {
// Special case: rather unusual.
return requestUri;
}
}
例として、「admin」のコンテキストと次のサーブレット マッピングがあるとします。
<servlet-mapping>
<servlet-name>usersServlet</servlet-name>
<url-pattern>/users/*</url-pattern>
</servlet-mapping>
これで、コントローラーの 1 つに次のようなリクエスト マッピングができました。
@RequestMapping(value = {"","/"})
/ admin /usersにアクセスしても機能しません。ただし、/admin/users/を押すと動作します。ここで、リクエスト マッピングを次のように変更すると、両方とも機能します。
@RequestMapping(value = {"/users","/"})
ただし、URL /admin/users/usersも機能するようになりました (これは私が望むものではありません)。