<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    1. 按照以下代碼改寫你自己的Activator (或者將代碼中的"/pages"改成你的jsf網(wǎng)頁(yè)路徑):
    注意加粗的那段代碼(使用當(dāng)前的class loader來加載jsf的FacesServlet)

    package net.andyluo.singlife.jsf.demo;

    import java.io.IOException;
    import java.util.Dictionary;
    import java.util.Hashtable;

    import javax.faces.webapp.FacesServlet;
    import javax.servlet.Servlet;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;

    import org.eclipse.equinox.http.helper.BundleEntryHttpContext;
    import org.eclipse.equinox.http.helper.ContextPathServletAdaptor;
    import org.eclipse.equinox.jsp.jasper.JspServlet;
    import org.osgi.framework.BundleActivator;
    import org.osgi.framework.BundleContext;
    import org.osgi.framework.ServiceReference;
    import org.osgi.service.http.HttpContext;
    import org.osgi.service.http.HttpService;
    import org.osgi.util.tracker.ServiceTracker;

    import com.sun.faces.config.ConfigureListener;

    public class Activator implements BundleActivator 
    {

        
    private ServiceTracker httpServiceTracker;

        
    public void start(BundleContext context) throws Exception 
        
    {
            httpServiceTracker 
    = new HttpServiceTracker(context);
            httpServiceTracker.open();
        }


        
    public void stop(BundleContext context) throws Exception 
        
    {
            httpServiceTracker.close();
        }


        
    private class HttpServiceTracker extends ServiceTracker 
        
    {

            
    private static final String PATH = "/jsf";

            
    public HttpServiceTracker(BundleContext context) 
            
    {
                
    super(context, HttpService.class.getName(), null);
            }


            
    public Object addingService(ServiceReference reference) 
            
    {
                
    final HttpService httpService = (HttpService) context
                        .getService(reference);
                
    try 
                
    {
                    HttpContext commonContext 
    = new BundleEntryHttpContext(context
                            .getBundle(), 
    "/pages");
                    httpService.registerResources(PATH, 
    "/", commonContext);

                    JspServlet jspServlet 
    = new JspServlet(context.getBundle(),
                            
    "/pages");
                    Servlet adaptedJspServlet 
    = new ContextPathServletAdaptor(
                            jspServlet, PATH);
                    httpService.registerServlet(PATH 
    + "/*.jsp", adaptedJspServlet,
                            
    null, commonContext);

                    Dictionary initparams 
    = new Hashtable();
                    initparams.put(
    "servlet-name""Faces Servlet");
                    Servlet adaptedFacesServlet 
    = new ServletContextListenerServletAdaptor(
                            
    new ConfigureListener(), new
     FacesServlet(), jspServlet
                                    .getJspLoader());

                    adaptedFacesServlet 
    = new ContextPathServletAdaptor(
                            adaptedFacesServlet, PATH);
                    httpService.registerServlet(PATH 
    + "/*.jsf",
                            adaptedFacesServlet, initparams, commonContext);

                }
     catch (Exception e) 
                
    {
                    e.printStackTrace();
                }

                
    return httpService;
            }


            
    public void removedService(ServiceReference reference, Object service) 
            
    {
                
    final HttpService httpService = (HttpService) service;
                httpService.unregister(PATH); 
    //$NON-NLS-1$
                httpService.unregister(PATH + "/*.jsp"); //$NON-NLS-1$
                httpService.unregister(PATH + "/*.jsf"); //$NON-NLS-1$            
                super.removedService(reference, service);
            }

        }


        
    public class ServletContextListenerServletAdaptor implements Servlet 
        
    {
            
    private ServletConfig config;

            
    private ServletContextListener listener;

            
    private Servlet delegate;

            
    private ClassLoader jspLoader;

            
    public ServletContextListenerServletAdaptor(
                    ServletContextListener listener, Servlet delegate,
                    ClassLoader jspLoader) 
            
    {
                
    this.listener = listener;
                
    this.delegate = delegate;
                
    this.jspLoader = jspLoader;
            }


            
    public void init(ServletConfig config) throws ServletException 
            
    {
                
    this.config = config;
                ClassLoader original 
    = Thread.currentThread()
                        .getContextClassLoader();
                
    try 
                
    {
                    Thread.currentThread().setContextClassLoader(jspLoader);
                    listener.contextInitialized(
    new ServletContextEvent(config
                            .getServletContext()));
                    delegate.init(config);
                }
     finally 
                
    {
                    Thread.currentThread().setContextClassLoader(original);
                }

            }


            
    public void service(ServletRequest req, ServletResponse resp)
                    
    throws ServletException, IOException 
            
    {
                ClassLoader original 
    = Thread.currentThread()
                        .getContextClassLoader();
                
    try 
                
    {
                    Thread.currentThread().setContextClassLoader(jspLoader);
                    delegate.service(req, resp);
                }
     finally 
                
    {
                    Thread.currentThread().setContextClassLoader(original);
                }

            }


            
    public void destroy() 
            
    {
                ClassLoader original 
    = Thread.currentThread()
                        .getContextClassLoader();
                
    try 
                
    {
                    Thread.currentThread().setContextClassLoader(jspLoader);
                    delegate.destroy();
                    listener.contextDestroyed(
    new ServletContextEvent(config
                            .getServletContext()));
                    config 
    = null;
                }
     finally 
                
    {
                    Thread.currentThread().setContextClassLoader(original);
                }

            }


            
    public ServletConfig getServletConfig() 
            
    {
                
    return config;
            }


            
    public String getServletInfo() 
            
    {
                
    return "";
            }

        }


    }


    2. 因?yàn)镴spServlet中沒有返回class loader的方法,所以我們要更改一下JspServlet的實(shí)現(xiàn)代碼(hack一下):更改equinox的org.eclipse.equinox.jsp.jasper_*.jar中的org.eclipse.equinox.jsp.jasper.JspServlet類:(可以下載JspServlet的源代碼,在本地更改編譯成功后將class文件覆蓋到org.eclipse.equinox.jsp.jasper_*.jar中)

    添加以下方法:
        public ClassLoader getJspLoader()
        {
            return this.jspLoader;
        }

    如此即可^_^, 其實(shí)就是讓FacesServlet使用JspServlet的ClassLoader,這樣就不會(huì)出現(xiàn)"Can't find FacesContext"錯(cuò)誤了。

    參考: [news.eclipse.technology.equinox] JSF, Equinox & FactoryFinder



    版權(quán)所有 羅明
    posted on 2007-10-08 15:05 羅明 閱讀(4059) 評(píng)論(25)  編輯  收藏 所屬分類: JavaOSGiJSF
    Comments
     
    主站蜘蛛池模板: 免费高清av一区二区三区| 国产亚洲精品免费视频播放 | 亚洲人成电影网站色| 亚洲午夜免费视频| 成人免费视频试看120秒| 一级毛片大全免费播放| 爱爱帝国亚洲一区二区三区| 亚洲H在线播放在线观看H| 亚洲国产综合精品| 亚洲香蕉久久一区二区三区四区| 亚洲第一页中文字幕| 亚洲一级高清在线中文字幕| 亚洲一区二区免费视频| 亚洲第一街区偷拍街拍| 在线观看亚洲视频| 永久免费无码网站在线观看个| 欧洲乱码伦视频免费国产| 国产人成网在线播放VA免费| a在线观看免费网址大全| 免费国产99久久久香蕉| 1000部啪啪毛片免费看| 免费A级毛片无码无遮挡内射| 男男AV纯肉无码免费播放无码| 亚洲午夜精品一区二区麻豆| 亚洲乱码中文字幕在线| www亚洲精品久久久乳| 新最免费影视大全在线播放| 99在线热播精品免费99热| 一级毛片免费视频| 99在线视频免费观看视频| 国产成人精品免费视频软件| 亚洲精品456播放| 亚洲国产精品va在线播放| 亚洲精品美女久久久久| 亚洲欧洲AV无码专区| 免费无遮挡无码视频在线观看| a级片在线免费看| 99久久久精品免费观看国产| 日韩毛片无码永久免费看| 亚洲色偷偷综合亚洲AV伊人| 精品日韩亚洲AV无码一区二区三区|