有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在SpringMVC中,java将控制器映射到绝对路径

我有一个简单的webapp,在所有JSP页面上都可以看到一个搜索框

我的控制器如下所示:

@RequestMapping(value = "/search", method = RequestMethod.GET)
public String search(Map<String, Object> map, HttpServletRequest request) {
    /*...*/
    return "searchresult";
}

在我的JSP中,我使用:<form action="search" method="GET">来发出请求。因此,例如,如果我从/myproject/index发出一个请求,这将非常有效,结果URL是/myproject/search。但是现在,如果我从另一个级别执行相同的操作,例如/myproject/index/level2,结果URL是/myproject/index/search,并且不起作用,因为它找不到具有该映射的控制器

我想做的是将控制器映射到一个绝对路径,这样,在第二种情况下,生成的URL将是/myproject/search,而不是/myproject/index/search/

在我的web.xml中,我有以下几点:

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

共 (1) 个答案

  1. # 1 楼答案

    使用EL

    <form action="${pageContext.request.contextPath}/search" method="GET" />
    

    EL表达式将解析为应用程序的上下文路径。然后将完整路径附加到它

    或者,^{}标记库提供url标记

    <form action="<c:url value="/search" />" method="GET" />
    

    这或多或少也是一样的

    Spring还提供了自己的url标记,您可以查看它