JAva Web起動時にコードを自動的に実行するいくつかの方法

10282 ワード

1.サーブレットリスナーインタフェースを実現するサーブレットContextListener 2、サーブレットを実現するフィルタFilter 3、ウェブ上にサーブレットを1つ作成する.xmlにコンテナを配置して起動して実行すればいい4、Spring IOCをBean管理コンテナとして使用する場合はinit-methodを指定できます.init-methodはbeanロードに成功したことを示しているので、すぐに方法を実行します5、Spring IOCをBean管理コンテナとして使用する場合は、SpringのBeanバックグラウンドプロセッサインタフェースを実装することもできます:BeanFactoryPostProcessorは、このBeanのロードが完了すると、Springは開発者にいくつかのイベントをカスタマイズすることができます
Webコンテナ起動後のコードの実行順序は、4===>5==>1==>2=>3
以下、上記のいくつかの方法について、一つ一つ説明します.
1、サーブレットリスナーインタフェースを実現するサーブレットContextListener
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class myListener implements ServletContextListener{
    public void contextDestroyed(ServletContextEvent arg0) {
        System.out.println("       ");
    }
    public void contextInitialized(ServletContextEvent arg0) {
        System.out.println("       ");
    }
}

   web.xml    

    com.primeton.eos2.myListener.


2、サーブレットを実現するフィルタFilter
Filterはフィルタとも呼ばれ、サーブレット技術の中で最も実用的な技術であり、Web開発者はFilter技術を通じて、Jsp、サーブレット、静的ピクチャファイル、静的htmlファイルなど、Webサーバが管理するすべてのウェブリソースをブロックし、いくつかの特殊な機能を実現する.例えば、URLレベルのアクセス制御、機密語彙のフィルタリング、応答情報の圧縮などの高度な機能を実現します.Filter機能:HttpServeretRequestがServeretに到着する前に、お客様のHttpServeretRequestをブロックします.必要に応じてHttpServertRequestをチェックし、HttpServertRequestヘッダとデータを変更することもできます.HttpServertResponseがクライアントに到着する前に、HttpServertResponseをブロックします.必要に応じてHttpServertResponseをチェックしたり、HttpServertResponseヘッダとデータを変更したりすることができます.
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class MyFilter implements Filter{
    public void destroy() {
        //Filter           , web              。 Web     Filter        。
        //    Filter           。      ,            。
    }
    public void doFilter(ServletRequest arg0, ServletResponse arg1,
            FilterChain arg2) throws IOException, ServletException {
        //             。              URL   ,Servlet       doFilter  。FilterChain           。
    }
    public void init(FilterConfig arg0) throws ServletException {
        //      Servlet    ,Filter       WEB     。 web        ,web       Filter      ,
        //    init  ,  web.xml  ,          ,                   (filter        ,
        //init         )。      init     ,       filter     FilterConfig  。
    }
}

   web.xml    
        
        MyFiltercom.primeton.eos2.MyFilter                 
                         
                        redirectPath
                        /index.jsp
                
    
    
        MyFilter       filter     。                   
        /*   filter         (      URL  )
                FORWARD             Servlet        ,   REQUEST,INCLUDE,FORWARD ERROR  ,  REQUEST。                Filter               
        REQUEST
        INCLUDE
    

             
REQUEST:          ,Web         。         RequestDispatcher include() forward()     ,            。
INCLUDE:         RequestDispatcher include()     ,          。    ,         。
FORWARD:         RequestDispatcher forward()     ,          ,    ,         。
ERROR:                     ,          。    ,        。

  :      Filter,          web.xml          ,         ;            doFilter()          ,            ,      ,  ServletResponse           ,        (  HttpServletResponseWrapper),          

        :
     filter ,     filter         , web     Filter  ,   init   ,     filter  
    filterConfig      。         filter ,  filterConfig     ,        :
String getFilterName();//  filter   。 
String getInitParameter(String name);//                    。       null. 
Enumeration getInitParameterNames();//                     。 
public ServletContext getServletContext();//  Servlet        。

       :
/**
 *            ,        
 */
public class SessionFilter implements Filter {

    public FilterConfig config;

    public void destroy() {
        this.config = null;
    }

    public static boolean isContains(String container, String[] regx) {
        boolean result = false;

        for (int i = 0; i < regx.length; i++) {
            if (container.indexOf(regx[i]) != -1) {
                return true;
            }
        }
        return result;
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest hrequest = (HttpServletRequest)request;
        HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper((HttpServletResponse) response);

        String logonStrings = config.getInitParameter("logonStrings");        //       
        String includeStrings = config.getInitParameter("includeStrings");    //         
        String redirectPath = hrequest.getContextPath() + config.getInitParameter("redirectPath");//         
        String disabletestfilter = config.getInitParameter("disabletestfilter");//        

        if (disabletestfilter.toUpperCase().equals("Y")) {    //     
            chain.doFilter(request, response);
            return;
        }
        String[] logonList = logonStrings.split(";");
        String[] includeList = includeStrings.split(";");

        if (!this.isContains(hrequest.getRequestURI(), includeList)) {//               
            chain.doFilter(request, response);
            return;
        }

        if (this.isContains(hrequest.getRequestURI(), logonList)) {//           
            chain.doFilter(request, response);
            return;
        }

        String user = ( String ) hrequest.getSession().getAttribute("useronly");//        
        if (user == null) {
            wrapper.sendRedirect(redirectPath);
            return;
        }else {
            chain.doFilter(request, response);
            return;
        }
    }

    public void init(FilterConfig filterConfig) throws ServletException {
        config = filterConfig;
    }
}

//               ,        ,               
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException { 
    HttpServletRequest hrequest =(HttpServletRequest)request;
    HttpServletResponse hresponse = (HttpServletResponse)response;
    HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper(hresponse);
    chain.doFilter(request,response);
    hresponse.setCharacterEncoding(“UTF-8”);
    hresponse.setHeader("Access-Control-Allow-Origin","*");
    hresponse.setHeader("Access-Control-Allow-Methods","OPTIONS,GET,POST");
    hresponse.setHeader("Access-Control-Allow-Headers","x-requested-with,content-type");
    hresponse.setHeader("Access-Control-Max-Age","86400");
    response=hresponse;
}

3、Web上でサーブレットを作成する.xmlの中で容器を配置して起動した後に実行すればいいです
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet extends HttpServlet{
    public void init(ServletConfig config) {
        //      ,      
                String username = config.getInitParameter("username");
        System.out.println(username);
    }
    protected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException
    {
        resp.getWriter().println("I am httpServlet doGet()");
    }
 
    protected void doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,java.io.IOException
    {
        resp.getWriter().println("I am httpServlet doPost()");
    }
    public void destory(ServletConfig config){
        
    }
}

    web.xml   :
        
        MyServlet  
        com.primeton.eos2.MyServlet
        
            username
            test
        
                
        2
    
    
        MyServlet  (  selvet      )
        /abc
    
        , load-on-startup  :
(1)   0    0 ,               servlet。   ,       ;
(2)              ,   servlet       。

4、Spring IOCをBean管理コンテナとして使用する場合は、init-methodを指定し、init-methodがbeanロードに成功したことを示すと、すぐにメソッドを実行することができます.実行するメソッド名としてstartを設定します.

    


5、Spring IOCをBean管理コンテナとして使用する場合、SpringのBeanバックグラウンドプロセッサインタフェースを実現することもできます.BeanFactoryPostProcessorは、Beanのロードが完了した後、Springは開発者にいくつかのイベントをカスタマイズすることができます.
public class KeyWordInit implements BeanFactoryPostProcessor {
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory factory) throws BeansException {
        System.out.println("================>[BeanFactoryPostProcessor]        .");
        ShopService shopService = factory.getBean("shopService", ShopService.class);
        List> shopList = shopService.findAllShop();
        System.out.println("================>" + shopList);
        System.out.println("================>[BeanFactoryPostProcessor]        .");
    }
}

本文は以下のことを参考にする.https://blog.csdn.net/fcly2013/article/details/19984061あ、もし興味があれば、原文を見てください.