Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.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 如何在Struts 2中使用DispatcherListener_Java_Struts2_Initialization_Startup_Dispatcher - Fatal编程技术网

Java 如何在Struts 2中使用DispatcherListener

Java 如何在Struts 2中使用DispatcherListener,java,struts2,initialization,startup,dispatcher,Java,Struts2,Initialization,Startup,Dispatcher,Struts2中有一个接口DispatcherListener。医生说 “一个接口,用于标记那些希望在init上执行代码的人,以及 销毁调度程序的 但是如何使用这个接口。如果我创建了一个实现这个接口的类,我应该如何将它配置为Struts2?当一个分派器被实例化时,它可以在初始化或销毁时向侦听器发送通知。参考和代码示例来自 简单的用法是通过bean标记由容器实例化一个bean,并将其自身添加到init方法中,并在销毁时将其自身删除,就像 代码是原始的,只是为了向您展示想法 struts.xml:

Struts2中有一个接口
DispatcherListener
。医生说

“一个接口,用于标记那些希望在
init
上执行代码的人,以及
销毁
调度程序的


但是如何使用这个接口。如果我创建了一个实现这个接口的类,我应该如何将它配置为Struts2?

当一个
分派器被实例化时,它可以在初始化或销毁时向侦听器发送通知。参考和代码示例来自

简单的用法是通过
bean
标记由容器实例化一个bean,并将其自身添加到
init
方法中,并在销毁时将其自身删除,就像

代码是原始的,只是为了向您展示想法

struts.xml

<bean type="com.opensymphony.xwork2.config.PackageProvider" name="myBean" class="jspbean.struts.MyBean" />
public class MyBean implements ConfigurationProvider, DispatcherListener {
  public MyBean() {
    System.out.println("!!! MyBean !!!");
  }

  @Override
  public void dispatcherInitialized(Dispatcher du) {
    System.out.println("!!! dispatcherInitialized !!!");
  }

  @Override
  public void dispatcherDestroyed(Dispatcher du) {
    System.out.println("!!! dispatcherDestroyed !!!");
  }

  @Override
  public void destroy() {
    System.out.println("!!! destroy !!!");
    Dispatcher.removeDispatcherListener(this);
  }

  @Override
  public void init(Configuration configuration) throws ConfigurationException {
    System.out.println("!!! init !!!");
    Dispatcher.addDispatcherListener(this);
  }

  @Override
  public boolean needsReload() {
    return false;
  }

  @Override
  public void loadPackages() throws ConfigurationException {

  }

  @Override
  public void register(ContainerBuilder builder, LocatableProperties props) throws ConfigurationException {

  }
}
15:27:50  INFO (org.apache.struts2.spring.StrutsSpringObjectFactory:42) - ... initialized Struts-Spring integration successfully
!!! MyBean !!!
!!! init !!!
jul 18, 2013 3:27:51 PM org.apache.catalina.startup.HostConfig deployDirectory
!!! dispatcherInitialized !!!
[2013-07-18 06:28:11,102] Artifact jspbean:war exploded: Artifact is deployed successfully
INFO: A valid shutdown command was received via the shutdown port. Stopping the Server instance.
INFO: Stopping service Catalina
!!! dispatcherDestroyed !!!
输出:

<bean type="com.opensymphony.xwork2.config.PackageProvider" name="myBean" class="jspbean.struts.MyBean" />
public class MyBean implements ConfigurationProvider, DispatcherListener {
  public MyBean() {
    System.out.println("!!! MyBean !!!");
  }

  @Override
  public void dispatcherInitialized(Dispatcher du) {
    System.out.println("!!! dispatcherInitialized !!!");
  }

  @Override
  public void dispatcherDestroyed(Dispatcher du) {
    System.out.println("!!! dispatcherDestroyed !!!");
  }

  @Override
  public void destroy() {
    System.out.println("!!! destroy !!!");
    Dispatcher.removeDispatcherListener(this);
  }

  @Override
  public void init(Configuration configuration) throws ConfigurationException {
    System.out.println("!!! init !!!");
    Dispatcher.addDispatcherListener(this);
  }

  @Override
  public boolean needsReload() {
    return false;
  }

  @Override
  public void loadPackages() throws ConfigurationException {

  }

  @Override
  public void register(ContainerBuilder builder, LocatableProperties props) throws ConfigurationException {

  }
}
15:27:50  INFO (org.apache.struts2.spring.StrutsSpringObjectFactory:42) - ... initialized Struts-Spring integration successfully
!!! MyBean !!!
!!! init !!!
jul 18, 2013 3:27:51 PM org.apache.catalina.startup.HostConfig deployDirectory
!!! dispatcherInitialized !!!
[2013-07-18 06:28:11,102] Artifact jspbean:war exploded: Artifact is deployed successfully
INFO: A valid shutdown command was received via the shutdown port. Stopping the Server instance.
INFO: Stopping service Catalina
!!! dispatcherDestroyed !!!

如果您使用的是Spring,那么您可以创建侦听器的bean,并在构造函数中将其添加到
dispatcherListeners
列表中

public YourDispatcherListener () {
  Dispatcher.addDispatcherListener(this);
}

另一个解决方案是创建
ServletContextListener
,它创建您的dispatcher listener并将其添加到列表中。

感谢您的帮助。因此,使用DispatcherListener的唯一方法是创建我自己的类来扩展StrutsPrepareAndExecuteFilter,并将代码示例添加到我的子类中,然后在web.xml上配置它,而不是StrutsPrepareAndExecuteFilter。不,不应该这样做,你可以用容器管理的任何bean来实现。你是说我应该用代码示例创建自己的bean,并将其设置为容器管理的bean?如果你通过配置创建它,那么它已经被管理了,在代码示例中,bean实现了本例中可能不需要的
ConfigurationProvider
。我可以这样使用:struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter configProviders org.apache.struts2.convention.ClasspathConfigurationProvider,但如果我这样使用,它将抛出“java.lang.InstanceionException:”