Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring MVC初始化对象_Java_Spring_Jsp_Spring Mvc_Servlet 3.0 - Fatal编程技术网

Java Spring MVC初始化对象

Java Spring MVC初始化对象,java,spring,jsp,spring-mvc,servlet-3.0,Java,Spring,Jsp,Spring Mvc,Servlet 3.0,在我的SpringMVC项目中,我需要某种策略来调用一个类,该类解析拥有我的RMI服务器ip和端口的xml文件&url必须与servletContext url相对: HttpServletRequest request; request.getServletContext().getRealPath("/WEB-INF/LABLAB/RMI-Config.xml") 我想在tomcat中启动应用程序时加载这些类,而不是在调用控制器类时加载,因为我的应用程序依赖于我的RMI,所以在做任

在我的SpringMVC项目中,我需要某种策略来调用一个类,该类解析拥有我的RMI服务器ip和端口的xml文件&url必须与servletContext url相对:

HttpServletRequest request;    
request.getServletContext().getRealPath("/WEB-INF/LABLAB/RMI-Config.xml")
我想在tomcat中启动应用程序时加载这些类,而不是在调用控制器类时加载,因为我的应用程序依赖于我的RMI,所以在做任何其他事情之前,我必须解析我的文件&使用IP和端口字段开始连接到我的RMI,然后调用RMI方法来稍后执行一些操作

现在

我该怎么做?请告诉我如何初始化HttpServletRequest的实例,并在我不在控制器类上时给出初始值


谢谢

您需要实现
ServletContextListener
接口,并从
web.xml
中引用它:

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

初始化侦听器
该接口有一个
contextInitialized(ServletContextEvent sce)
方法,在该方法中可以调用
sce.getServletContext()
,因此不需要
HttpServletRequest

如果这不起作用,因为您还需要从初始化类访问一些SpringBean,那么请忘记实现
ServletContextListener
接口,改为执行以下操作:

  • 通过Spring实例化初始化类(创建该类型的bean)
  • 使类实现
    ServletContextAware
    。这将导致Spring将
    ServletContext
    注入到您的类中
  • 在该bean上定义一个init方法(使用
    init-method
    bean属性,或者定义一个
    @PostConstruct
    带注释的方法)
  • 通过使用
    depends-on
    bean属性,使所有控制器bean依赖于初始化bean。因此,初始化bean将在任何控制器bean之前创建

  • 如果没有最后一步,就不能保证控制器在初始化bean完成其工作之前不会开始处理请求。但是,在每个控制器bean上指定
    依赖于
    属性也是有问题的,特别是它们通常是通过应用
    @controller
    注释而不是xml配置创建的。中描述了一个很好的解决方法。

    如果您正在使用Spring,那么您可以创建一个类并实现它。如果您想获得
    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.
        }
    }
    
    根据文件:

    InitializingBean—由需要 一旦BeanFactory设置了它们的所有属性,就进行反应


    或者看一下如何使用
    ServletContextListener

    执行此操作。您可以参考此问题吗?我用了你的方法,但那对我不起作用:你能参考这个问题吗?我使用了你的方法,但那对我不起作用: