如何在类注释@controller中获取Spring WebContext

Kau*_*ele 8 spring servlets spring-mvc autowired applicationcontext

在带有注释的Spring MVC中,我们使用@Controller标记任何POJO.在这个控制器中,我们可以使用autowired属性获取WebApplicationContext.

@Controller
public class HomePageController {

@Autowired
ApplicationContext act;

    @RequestMapping("/*.html")
    public String handleBasic(){
        SimpleDomain sd = (SimpleDomain)act.getBean("sd1");
        System.out.println(sd.getFirstProp());
        return "hello";
}
Run Code Online (Sandbox Code Playgroud)

但是在这种方法中,我们没有方便的servletContext.那么我们仍然可以使用较旧的方式获取WebApplicationContext吗?即

WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext)
Run Code Online (Sandbox Code Playgroud)

我们如何在这里获得servletContext?

我没有任何强迫使用旧方式; 所以这个问题只是出于好奇心来检查弹簧的灵活性.它也可以是一个面试问题.

Bij*_*men 16

你可以将它注入你的控制器:

@Autowired private ServletContext servletContext;
Run Code Online (Sandbox Code Playgroud)

或者将HttpServletRequest作为参数并从那里获取:

@RequestMapping(...)
public ModelAndView myMethod(HttpServletRequest request ...){
    ServletContext servletContext = request.getServletContext()
}
Run Code Online (Sandbox Code Playgroud)

  • 请求没有getServletContext(),request.getSession().getServletContext()将工作 (6认同)