【问题标题】:How to generate an HttpServletRequest during Spring startup for a bean initialisation?如何在 Spring 启动期间为 bean 初始化生成 HttpServletRequest?
【发布时间】:2012-02-26 04:09:57
【问题描述】:

我想要一个 bean 运行我们所有的 FreeMarker 模板并为每个模板实例化一个 FreeMarkerView,以便预加载 bean。我想做一些其他类似的优化,需要一个 HttpServletRequest。

所以我的问题是:在 Spring 中是否有任何正常的方法可以在应用程序启动期间在 Spring bean 上运行 init() 方法并为其提供某种 HttpServletRequest?我想避免模拟一个完整的 HttpServletRequest,我知道我总是可以设置一个控制器并打开一个套接字并向它发送请求,但我想知道是否有更好或更正常的方法来做这件事。

肯定有其他人想要设置 HttpServletRequest 而不发出 HTTP 请求,无论是在启动时还是在计划任务中等?

【问题讨论】:

标签: spring servlets spring-mvc


【解决方案1】:

当应用程序启动时,还没有 HTTP servlet 请求。事实上,Tomcat 在启动期间开始侦听和接受 8080 端口上的连接,但只有在所有应用程序都成功启动后才将它们传递给适当的 servlet。这意味着您不能在启动期间调用自己,因为这会导致死锁 - 您正在等待响应,而该响应会被等待您的 Tomcat 阻止。

这也意味着根本不可能(至少以 Tomcat 为例)在启动期间获得任何 HTTP servlet 请求,因为绝对没有请求。是的,模拟是正确的方法,但恐怕如果这些库需要HttpServletRequest 实例,那么简单的模拟可能还不够。

【讨论】:

  • 知道了。并且希望有某种启动后的钩子可以用来启动一个方法是不是太过分了?即使有或者我自己建立了一个,我将如何创建一个 HttpServletRequest 而不打开与自己的连接?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-15
  • 2011-01-23
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
相关资源
最近更新 更多