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

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

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

    隨筆 - 1  文章 - 37  trackbacks - 0
    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    留言簿(16)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    test

    搜索

    •  

    最新評論


    現象:

    啟動Tomcat
    刪除 CATALINA_HOME/work/ 目錄下的Catalina目錄
    訪問任何一個jsp文件,將發生錯誤

    org.apache.jasper.JasperException: org.apache.jasper.JasperException: Unable to load class for JSP
        org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:
    156)
        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:
    329)
        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:
    342)
        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:
    267)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:
    717)

     

    原因:

    Tomcat對jsp的處理是由一個JspServlet來完成的,當tomcat啟動時,會為每一個context創建jsp工作目錄(work dir),存放地為 CATALINA_HOME/work/Catalina/HOST_NAME/CONTEXT_NAME,context編譯jsp所需要的參數也隨之初始化,加載jsp class的base path也已經潛在初始化,是一個File對象,它將在隨后URLClassLoader加載jsp class時作為一個resource url,下面是部分代碼:

    org.apache.jasper.JspCompilationContext.java

    初始化 JspLoader

    public ClassLoader getJspLoader() {
            
    if( jspLoader == null ) {
                jspLoader 
    = new JasperLoader
                (
    new URL[] {baseUrl},
                        getClassLoader(),
                        rctxt.getPermissionCollection(),
                        rctxt.getCodeSource());
            }

            
    return jspLoader;
        }


    其中baseUrl是這樣得到的

    protected void createOutputDir() {
            String path 
    = null;
            
    if (isTagFile()) {
                String tagName 
    = tagInfo.getTagClassName();
                path 
    = tagName.replace('.', File.separatorChar);
                path 
    = path.substring(0, path.lastIndexOf(File.separatorChar));
            }
     else {
                path 
    = getServletPackageName().replace('.',File.separatorChar);
            }


                
    // Append servlet or tag handler path to scratch dir
                try {
                    File base 
    = options.getScratchDir();
                    baseUrl 
    = base.toURI().toURL();
                    outputDir 
    = base.getAbsolutePath() + File.separator + path + 
                        File.separator;
                    
    if (!makeOutputDir()) {
                        
    throw new IllegalStateException(Localizer.getMessage("jsp.error.outputfolder"));
                    }

                }
     catch (MalformedURLException e) {
                    
    throw new IllegalStateException(Localizer.getMessage("jsp.error.outputfolder"), e);
                }

        }

    options.getScratchDir() 是在tomcat啟動時初始化的,于是,啟動tomcat后,刪除work目錄,訪問jsp時,盡管work目錄被重新創建并且jsp被成功編譯,但是由于ClassLoader中原目錄對象與當前目錄對象不同,而無法加載到jsp的class

    posted on 2009-07-05 17:22 Phrancol Yang 閱讀(357) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 免费人成在线观看视频播放| 永久亚洲成a人片777777| 亚洲国产精品无码久久一线| 国产亚洲高清不卡在线观看| g0g0人体全免费高清大胆视频| 亚洲第一区精品日韩在线播放| 怡红院亚洲红怡院在线观看| 国产精品二区三区免费播放心| 亚洲高清毛片一区二区| 国产大片91精品免费看3| 精品久久久久久亚洲中文字幕| 国产免费牲交视频| 一级毛片免费不卡| 在线视频精品免费| 亚洲av永久综合在线观看尤物| 男女啪啪免费体验区| 亚洲视频在线一区二区| 亚洲国产乱码最新视频| 青青草原1769久久免费播放| 亚洲日本一区二区| 四虎国产精品成人免费久久| 可以免费看的卡一卡二| 国产成人麻豆亚洲综合无码精品| 中文字幕免费观看全部电影| 亚洲AV无码专区在线播放中文| 91成人在线免费视频| 中文字幕乱码亚洲无线三区| 免费观看亚洲人成网站| 日本免费中文字幕| 亚洲av永久无码精品天堂久久 | 97热久久免费频精品99| 久久WWW免费人成—看片| 亚洲乱色熟女一区二区三区丝袜 | 100部毛片免费全部播放完整| 亚洲性色高清完整版在线观看| 成人免费777777被爆出| 久久狠狠高潮亚洲精品| 日本一卡精品视频免费| 亚洲精品无码专区久久久| 亚洲精品免费在线| 国产精品亚洲а∨无码播放不卡|