0

我目前正在开发一个 Spring MVC 应用程序,当我在 web.xml 文件中将所有传入 URL 映射到单个 DispatcherServlet 时,我想知道是否可以检索已有效映射的 URI。这是一个例子来说明我的担忧:

import static org.springframework.web.bind.annotation.RequestMethod.*;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HomeController {


    @RequestMapping(method={GET})
    public String processAllRequest(){
        return "viewName";
    }
}

由于我在 web.xml 中将 URL-MAPPING 定义为“/*”,所有传入的请求都将在我的控制器类中结束,如上所示。例如,以下两个请求都将由我的控制器中的 processAllRequest() 方法处理。

  • 我的应用程序上下文/主页
  • myApplicationContext/注销

是否有可能以某种方式检索映射的 URI?也就是说,一旦我进入 processAllRequest(),我怎么知道它是被调用为 .../home 还是 .../logout?是否可以通过注入 HttpServletRequest 或另一个对象作为方法的参数来检索这种信息?

4

2 回答 2

2

如果你把它放在你的处理程序参数中, Spring 确实会注入HttpServletRequest,所以如果你愿意,你可以这样做。

但是如果你需要区分不同的 URL,只需将它们放在不同的处理程序中:

@Controller
public class HomeController {

    @RequestMapping(value="/home", method={GET})
    public String processHome(){
        return "viewName";
    }

    @RequestMapping(value="/login", method={GET})
    public String processLogin(){
        return "viewName";
    }
}

web.xml 中的映射将所有请求转发到 spring servlet。您仍然可以编写任意数量@Controller的 s,并使用类级别和方法级别@RequestMapping将应用程序拆分为逻辑组件。

于 2012-05-11T08:27:59.523 回答
0

我可能以一种模棱两可的方式提出了我的问题,但我正在寻找的是路径变量。所以我的问题就这样解决了:

@Controller 公共类 HomeController {

@RequestMapping(value="/{uri}", method={GET})
public String processMappedUri(@PathVariable uri){
    return uri;
}

}

使用此解决方案,每当我请求以下请求时,我的 processMappedUri() 方法中的 uri 参数将保存变量值:

  • myApplicationContext/home --> uri = home
  • myApplicationContext/logout --> uri = logout
于 2012-05-13T20:26:17.220 回答