<servlet-mapping>
<servlet-name>testServlet</servlet-name>
<url-pattern>/test/*</url-pattern>
</servlet-mapping>
Nếu tôi nhấn /kiểm tra/trang thì ở trên sẽ hoạt động. Tuy nhiên, nhấn /kiểm tra hoặc /test/ sẽ không hoạt động. Tôi đang sử dụng Spring MVC, và lập bản đồ theo yêu cầu của tôi là như sau:Trong một bản đồ servlet trong Spring MVC, làm cách nào để ánh xạ thư mục gốc của một thư mục mẫu url?
@RequestMapping(value = {"","/"})
EDIT:
Tôi đang trong quá trình thẩm tra với một dự án độc lập, nhưng điều này dường như là một lỗi với UrlPathHelper của Spring. Phương thức sau trả về một đường dẫn không chính xác khi có cả ngữ cảnh và đường dẫn servlet, và bạn nhấn servlet mà không có dấu gạch chéo.
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;
}
}
Cũng như một ví dụ giả sử tôi có một bối cảnh của "admin" và servlet-mapping sau:
<servlet-mapping>
<servlet-name>usersServlet</servlet-name>
<url-pattern>/users/*</url-pattern>
</servlet-mapping>
Bây giờ tôi có một ánh xạ theo yêu cầu tại một trong các bộ điều khiển của tôi như thế này:
@RequestMapping(value = {"","/"})
Nếu tôi nhấn /admin/users nó sẽ không hoạt động. Tuy nhiên, nếu tôi nhấn /admin/users/ thì nó sẽ hoạt động. Bây giờ nếu tôi thay đổi bản đồ yêu cầu của tôi như sau sau đó họ sẽ làm việc cả:
@RequestMapping(value = {"/users","/"})
Tuy nhiên, bây giờ URL /admin/người dùng/người dùng cũng sẽ làm việc (mà không phải là những gì tôi muốn).
Sự cố không phải là sử dụng đường dẫn gốc. Nếu tôi sử dụng đường dẫn gốc thì tôi luôn đi với '/ url-pattern>' và '@RequestMapping (giá trị = {" ","/"})'. Tôi đã không bao giờ có một vấn đề với điều đó, và tôi đang sử dụng Gạch 2 và Spring MVC 3. Vấn đề là với xác định một đường dẫn servlet đầu tiên. Bất cứ khi nào bạn chỉ định thông tin đường dẫn servlet, ánh xạ yêu cầu của Spring là mọi thứ sau đó. Vì vậy, về mặt kỹ thuật, cùng một ánh xạ yêu cầu sẽ làm việc vì nó là gốc của đường dẫn servlet. Tuy nhiên, đó không phải là trường hợp. –