2011-04-07 80 views
-1

我正在开发新的Spring Web应用程序,在一个团队开发了大量的Vanilla HttpServlet Web应用程序。我是新来的春天(请不要跑!),我正在尽我所能找到一个教程,参考文件,书籍,以帮助我利用“Vanilla Servlet”。用于初始化Spring引用数据的Servlet.staticMethod?

我能够通过调用(Flex)客户端浏览器所需的特定Servlet来解决my last issue。现在的麻烦是,我有另一个Servlet(我无法修改它的源代码),当我的应用程序启动时需要调用它。 Servlet参与初始化应用程序参考数据(所以这非常重要)。

在我看来这应该是一个典型的问题...这个必须几年前当其他团队转换为Spring的常见问题,为什么我找不到我需要的教程?我已经尝试过研究大量不同的Spring类,但是我没有在这方面获得任何进展。

这里的一些注意事项是什么我已经试过:

  • ServletWrappingController,但这不是用作控制器,我真的只需要一个Singleton DAO的构造函数中的Servlet。
  • ResourceServlet,这个Class的名字看起来很合适,而且我在搜索中遇到了它,但我不完全确定这是否会有所帮助。
  • ServletForwardingController(mentioned here),但我似乎无法找到一个合适的例子。
  • ServletWrappingController(also from the above question),但-again-我找不到合适的示例。

我在这里狩猎野鹅吗?有没有一种方法可以在Spring应用程序启动期间在Servlet上调用静态方法(这很重要?)?

我不确定代码段会有帮助,但我很乐意发布一个代码段。真的,我唯一的想法是:“Servlet是否需要在web.xml中声明特定的方式”和“是否需要以Spring管理bean的某种方式声明?” (即在app-config.xml中)

我不能编辑Servlet,尽管我可以告诉你它扩展了HttpServlet。我没有调用doGet或doPost,而是在Servlet上有一个静态方法,它使得我需要调用一个RPC调用。如果有人知道一个特殊的@MagicInjectHttpServlet注释,请传递它!

+0

我不会做Spring,但是在普通的Servlet API中,您会使用'ServletContextListener'来实现这一点。一个Servlet可以用来处理单个HTTP请求,而不是进行全局初始化。 – BalusC 2011-04-07 01:34:46

+0

嗯,我不确定这个问题是否具有特定的Spring特性?如果可能的话,我想可能是Servlet容器或Spring会让你“模拟”一个HTTP请求/会话来执行_some_初始化。你有没有遇到过这样的事情? – blong 2011-04-07 01:40:06

+0

你能解释一下“杠杆”是什么意思吗?你希望从现有的servlet中使用什么 - 调用成员方法,它是doGet()等? – 2011-04-07 02:22:14

回答

0

我不知道我完全了解你需要什么,但如果是geniunely只是你需要调用一个静态方法,我本来认为:

<bean id="myLegacyServlet" 
     class="com.legacy.thing.Servlet" 
     init-method="thatStaticMethod" /> 

<bean id="myGoodStuff" 
     class="com.my.stuff.MyStuff" 
     depends-on="myLegacyServlet"> 
    ... 
</bean> 

就足够了。事实上,你的遗留对象是一个servlet应该没有什么区别 - 重要的是确保init-method被调用的很好,并且提前,我能想到的最好的方式是声明其他一些bean需要你的遗留bean。

+0

抱歉,我的延迟响应。这似乎是正确的答案。我花了很多时间去了解我所遇到的错误的根源,并且它们都返回到Classpath。当然,这是春季问题的方式吗? - > WEB-INF/lib? - > Servlet? - > Servlet调用的本地库(dll's)? - >服务器配置? - > Classpath里面/外面的eclipse差异。我相信这是正确答案的原因是因为我在我的配置中列出了这两个相同的bean,然后才开始所有错误!午餐后,我会重新撰写和扩充这篇文章! :) – blong 2011-04-21 16:58:22