在带有注释的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";
}
但是在这种方法中,我们没有方便的servletContext。那么我们是否仍然可以使用较旧的方式获取WebApplicationContext?即。
WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext)
我们如何在这里获得servletContext?
我没有任何强迫使用旧方法;所以这个问题只是出于好奇心来检查弹簧的灵活性。 它也可以是一个面试问题。
答案 0 :(得分:16)
您可以将其注入控制器:
@Autowired private ServletContext servletContext;
或者将HttpServletRequest作为参数并从那里获取:
@RequestMapping(...)
public ModelAndView myMethod(HttpServletRequest request ...){
ServletContext servletContext = request.getServletContext()
}
答案 1 :(得分:2)
以下是正确的方法:
@Autowired
ServletContext context;
否则不是自动连接ServletContext,而是可以实现ServletContextAware。当在Web应用程序上下文中运行并注入ServletContext时,Spring会注意到这一点。阅读this。
答案 2 :(得分:2)
您也可以内联:
FileReader
答案 3 :(得分:2)
您可以从Spring实现名为org.springframework.web.context.ServletContextAware
public class MyController implements ServletContextAware {
private ServletContext servletContext;
@Override
public void setServletContext(ServletContext servletContext) {
this.servletContext=servletContext;
}
}
然后你可以在课堂上的任何地方使用servletContext
。
答案 4 :(得分:1)
通过访问会话,您可以获取servlet上下文,示例代码:
@Controller
public class MyController{
....
@RequestMapping(...)
public ModelAndView myMethod(HttpSession session ...){
WebApplicationContextUtils.getRequiredWebApplicationContext(session.getServletContext())
}
}
您也可以从HttpServletRequest获取HttpSession。