<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年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    留言簿(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 閱讀(351) 評論(0)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 久久精品国产亚洲AV蜜臀色欲| 日韩在线免费视频| 亚洲国产中文字幕在线观看| 亚洲熟妇无码AV| 在线免费观看视频你懂的| 亚洲欧美中文日韩视频| 毛片网站免费在线观看| 亚洲成年网站在线观看| 精品国产免费观看久久久| 亚洲精品乱码久久久久久蜜桃图片| 国内自产少妇自拍区免费| 精品无码专区亚洲| 国产精品亚洲产品一区二区三区 | 成年人网站免费视频| 亚洲日韩一区精品射精| 国产在线19禁免费观看| 国产精品美女久久久免费 | 成人毛片免费在线观看| 久久亚洲精品无码网站| 狠狠亚洲婷婷综合色香五月排名| 人妻免费一区二区三区最新| 亚洲国语精品自产拍在线观看| 69xx免费观看视频| 亚洲AV噜噜一区二区三区| 久久久精品国产亚洲成人满18免费网站 | 中国一级特黄的片子免费| 亚洲成年人在线观看| 免费无码精品黄AV电影| 黄色网页免费观看| 亚洲AV无码精品色午夜在线观看| 日本在线高清免费爱做网站| 国产AV无码专区亚洲AV蜜芽 | 亚洲精品日韩中文字幕久久久| 成人毛片免费网站| 嫩草在线视频www免费看| 亚洲欧洲国产成人精品| 国产免费观看网站| 最近最新高清免费中文字幕| 亚洲xxxx视频| 亚洲国产精品不卡在线电影| 国产国产人免费人成免费视频 |