我目前正在开发Spring MVC应用程序,并且当我在web.xml文件中映射到单个DispatcherServlet的所有传入URL时,我想知道是否可以检索有效的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()方法处理。
是否有可能以某种方式检索映射的URI?也就是说,一旦我进入processAllRequest(),我怎么知道它是否被调用... / home或... / logout? 是否可以通过注入HttpServletRequest或其他对象作为方法的参数来检索此类信息?
答案 0 :(得分: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
,并使用类级别和方法级@RequestMapping
将应用程序拆分为逻辑组件。
答案 1 :(得分:0)
我可能以一种模棱两可的方式提出我的问题,但我所寻找的却是路径变量。所以我的问题就这样解决了:
@Controller 公共课HomeController {
@RequestMapping(value="/{uri}", method={GET})
public String processMappedUri(@PathVariable uri){
return uri;
}
}
每当我请求以下请求时,使用此解决方案,来自processMappedUri()方法的uri参数将保存变量值: