2013-02-28 89 views
2

在我用SpringMVC的項目,我需要一定的策略來調用類不解析XML文件,它確實擁有我的RMI服務器的IP &端口&的URL必須相對於參數servletContext網址:Spring MVC的初始化對象

HttpServletRequest request;  
request.getServletContext().getRealPath("/WEB-INF/LABLAB/RMI-Config.xml") 

當我在tomcat中啓動我的應用程序時,我不想調用控制器類,因爲我的應用程序依賴於我的RMI,所以我必須解析我的文件&使用IP & PORT字段開始連接到我的RMI &然後調用rmi方法稍後再做一些事...

現在

我該怎麼做?請告訴我如何初始化HttpServletRequest的一個實例,當我不在Controller類上時,我也可以初始化一個初始值。

謝謝

回答

2

您需要實現ServletContextListener接口,並從引用它的web.xml

<listener> 
    <listener-class>InitializingListener</listener-class> 
</listener> 

的接口有一個contextInitialized(ServletContextEvent sce)方法,在其中您可以撥打sce.getServletContext(),讓你不」 t需要HttpServletRequest

如果這個不奏效,因爲你還需要訪問一些你的Spring beans從初始化類,然後忘掉實現ServletContextListener界面,然後執行以下操作來代替:

  1. 實例化通過Spring創建初始化類(創建該類型的bean)。
  2. 讓班級執行ServletContextAware。這將導致Spring將ServletContext注入您的課堂。
  3. 定義上豆(使用init-method豆屬性,或定義@PostConstruct註解的方法)
  4. 讓你的所有控制器豆依賴於初始化豆使用depends-on豆屬性的init方法。因此,在任何Controller bean之前創建初始化bean。

沒有最後一步,無法保證您的控制器在初始化bean完成其工作之前不會開始處理請求。但是,在每個控制器bean上指定depends-on屬性也是有問題的,尤其是它們通常是通過應用@Controller註釋而不是xml配置創建的。在this post中描述了一個很好的解決方法。

+0

請問你可以參考這個問題嗎?我用你的方法,但沒有爲我工作: http://stackoverflow.com/questions/15172521/error-fetching-servletcontext-inside-a-class – Mehdi 2013-03-02 08:47:39

3

您正在使用Spring,那麼您可以創建一個類並實現IntializingBean。如果你想獲得ServletContext,你可以在初始化bean中簡單使用@Autowired註釋。對於例如:每個文檔

@Component 
public class SomeBean implements InitializingBean { 

    @Autowired 
    private ServletContext context; 

    public void afterPropertiesSet() throws Exception { 
     String path = context.getRealPath("/WEB-INF/LABLAB/RMI-Config.xml"); 
     //do something. 
    } 
} 

由於:

IntializingBean的

- 接口被需要 反應一旦所有他們的財產已被一個BeanFactory設置bean實現的。

或者看看here如何使用ServletContextListener來做到這一點。

+0

你可以請參考這個問題?我用你的方法,但這並不適合我: http://stackoverflow.com/questions/15172521/error-fetching-servletcontext-inside-a-class – Mehdi 2013-03-02 08:46:39