apacheFtpServer集成spring由web容器控制启动和关闭

ApacheFtpServer是一个100%纯Java实现的FTP服务器,基于网络框架apache MINA实现,可支撑多并发用户。FtpServer可以独立运行作为一个Windows服务或Unix/Linux守护进程,或嵌入到Java应用程序,提供对内部集成spring应用程序支持。下面介绍apacheFtpServer与spring集成,交由spring控制ApacheFtpServer的启动与关闭。

1.      初始化创建MyFtpServer:

import java.io.File;
import org.apache.ftpserver.FtpServer;
import org.apache.ftpserver.FtpServerFactory;
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.usermanager.ClearTextPasswordEncryptor;
importorg.apache.ftpserver.usermanager.PropertiesUserManagerFactory;
import org.apache.ftpserver.usermanager.SaltedPasswordEncryptor;

public class MyFtpServer {
       FtpServer server =null;
       public void initFtp(){
             FtpServerFactoryserverFactory = new FtpServerFactory();
             ListenerFactorylistenerFactory = new ListenerFactory();
              // replacethedefault listener
             listenerFactory.setPort(21);
             serverFactory.addListener("default",listenerFactory.createListener());
             PropertiesUserManagerFactoryuserManagerFactory = newPropertiesUserManagerFactory();
             userManagerFactory.setFile(newFile(          "D:\\stcaimis\\apache-ftpserver-1.0.3\\res\\conf\\users2.properties"));
              //设置盐化hash加密算法
             //SaltedPasswordEncryptorsalterpassword = new SaltedPasswordEncryptor();
            //userManagerFactory.setPasswordEncryptor(salterpassword);
             //设定了用户输入密码时 直接输入明文
             userManagerFactory.setPasswordEncryptor(new ClearTextPasswordEncryptor());
             serverFactory.setUserManager(userManagerFactory.createUserManager());
              server=serverFactory.createServer();
       }

       public void start(){
              try {
                    server.start();
                    System.out.println("serverstarting");
              }catch(FtpException e) {
                     //TODOAuto-generated catch block
                    e.printStackTrace();
              }
       }
       public void stop() {
              server.stop();
             System.out.println("serveris stopped");
       }
}

spring 监听器在启动Web 容器时,自动装配SpringapplicationContext.xml 的配置信息。在application-context.xml文件中配置myFtpServer javabean

<beanid="StrongFTP"class="com.st.caims.lxj.test.MyFtpServer"></bean>

2. web.xml配置ftpListener,自定义监听器FtpServerListener implements ServletContextListener接口,启动web容器时,自动执行contextInitialized()方法,web容器关闭时调用contextDestroyed()方法。

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.ftpserver.impl.DefaultFtpServer;
import org.springframework.web.context.WebApplicationContext;
importorg.springframework.web.context.support.WebApplicationContextUtils;

public class FtpServerListener implementsServletContextListener{
    //tomcat容器关闭时调用方法stop ftpServer
  public voidcontextDestroyed(ServletContextEvent sce) {
         WebApplicationContextctx=WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext());
        MyFtpServerserver=(MyFtpServer)ctx.getServletContext().getAttribute("FTPSERVER_CONTEXT_NAME");
    server.stop();
  sce.getServletContext().removeAttribute("FTPSERVER_CONTEXT_NAME");
  System.out.println("Stopping FtpServer");
  }

  //spring 容器初始化调用方法startFtpServer
  public voidcontextInitialized(ServletContextEvent sce) {
  System.out.println("Starting FtpServer");
    WebApplicationContextctx=WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext());
    MyFtpServer server=(MyFtpServer) ctx.getBean("StrongFTP");
   sce.getServletContext().setAttribute("FTPSERVER_CONTEXT_NAME",server);
    try {
           server.initFtp();
           server.start();
    System.out.println("FtpServer started");
    } catch (Exceptione){
      thrownewRuntimeException("Failed to start FtpServer", e);
    }
  }
}

ps: Apache FtpServer 官方下载地址:http://mina.apache.org/,API文档。

apacheFtpServer集成spring由web容器控制启动和关闭,布布扣,bubuko.com

时间: 2024-10-14 09:56:35

apacheFtpServer集成spring由web容器控制启动和关闭的相关文章

Java Web容器的启动过程

Java web容器的启动与处理请求的过程 1.启动一个web项目的时候,web容器回去读取它的配置文件web.xml,读取<Context-param>结点. 2.容器创建一个servletContext(Servlet上下文),这个web项目的所有部分都将共享这个上下文. 3.容器将<context-param>转换为键值对,并交个ServletContext.因为listener,filter等组件在初始化时会用到这些上下文的信息,所以要先加载. 4.容器创建<list

spring在web容器启动时执行初始化方法

需求:在tomcat启动时开启一个定时任务. 想法:容器启动时执行方法,最容易想到的就是servlet中可以配置load-on-startup,设置一个正整数也就可以随容器一起启动. 问题:上面的方法很好,但是由于定时任务需要去操作数据库,而项目采用了spring的依赖注入来管理对象,而servlet并不受Spring的管理.若此时在servlet中注入Spring管理的对象,则会报错:javax.naming.NameNotFoundException: Name com.test.InitS

Spring 在web 容器中的启动过程

1.对于一个web 应用,其部署在web 容器中,web 容器提供其一个全局的上下文环境,这个上下文就是 ServletContext ,其后面的spring IoC 容器提供宿主环境 2.在web.xml 中会提供有 contextLoaderListener.在web 容器启动时,会触发容器初始化事件,此时 contextLoaderListener 会监听到这个事件,其 contextInitialized 方法会被调用,在这个方法中,spring 会初始化一个启动上下文,这个上下文就被称

Spring学习(十九)----- Spring与WEB容器整合

首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关.即不会因为 filter 写在 listener 的前面而会先加载 filter.最终得出的结论是:listener -> filter -> servlet 同时还存在着这样一种配置节:context-param,它用于向 ServletContext 提供键值对,即应用程序上下文信息.我们的 listener, filter 等在初始化时会用到这些上下文中的信息,那么 context-param 配置节是不是应该写在

三、spring boot web容器定制(端口号等修改)

spring boot 默认采用tomcat作为嵌入的web容器 定制方式有三种 1. 2.如下 @Component public class CustomizationBean implements EmbeddedServletContainerCustomizer{ /** * 定制方法一:实现EmbeddedServletContainerCustomizer * @param container */ @Override public void customize(Configura

Spring Boot web容器启动

一.启动前的准备: 1.SpringApplication构造方法,赋值webApplicationType Debug启动项目后,进入SpringApplication构造函数,里面有个webApplicationType 2.根据classpath下是否存在特定类来决定哪种类型,分别为SERVLET, REACTIVE, NONE deduceFromClasspath方法返回webApplicationType为Servlet 3.然后进入run方法,进入创建应用程序上下文方法create

redhat/centos使用service控制启动与关闭

原文地址: http://guodong810.blog.51cto.com/4046313/1285353 有时,我们自己安装了某个软件时,想让对这个服务更加容易的控制,在redhat/centos中我们会首先想到使用service xxx start|stop来进行实现,但可惜的是,这需要我们自己来编写启动关闭脚本,并且加入到启动列表中.如果你会点shell脚本的话,就会简单许多 以nginx来讲解一下它的过程,只是过程,就不粘贴shell脚本了 1.在/etc/init.d/目录下创建启动

深入Spring之web.xml

针对web.xml我打算从以下几点进行解析: 1.ContextLoaderListener: 启动Web容器时,自动装配ApplicationContext的配置信息. 2.RequestContextListener:基于LocalThread将HTTP request对象绑定到为该请求提供服务的线程上.这使得具有request和session作用域的bean能够在后面的调用链中被访问到. 3.DispatchServlet:初始化webMVC上下文.负责职责的分派. 详细分析: 1.针对C

spring源码研究之IoC容器在web容器中初始化过程

前段时间在公司做了一个项目,项目用了spring框架实现,WEB容器是Tomct 5,虽然说把项目做完了,但是一直对spring的IoC容器在web容器如何启动和起作用的并不清楚.所以就抽时间看一下spring的源代码,借此了解它的原理. 我们知道,对于使用Spring的web应用,无须手动创建Spring容器,而是通过配置文件,声明式的创建Spring容器.因此在Web应用中创建Spring容器有如下两种方式: 1. 直接在web.xml文件中配置创建Spring容器. 2. 利用第三方MVC