首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

tomcat 停软连接 freemark 模板文件不能访问

2013-10-19 
tomcat 下软连接 freemark 模板文件不能访问?请注意templateLoaderPath。而在FreeMarkerConfigurer的父类Fr

tomcat 下软连接 freemark 模板文件不能访问
?请注意templateLoaderPath。而在FreeMarkerConfigurer的父类FreeMarkerConfigurationFactory 的createConfiguration 方法中有这样一段? ? ? ??

??查看freemarker的 FileTemplateLoader原来做了检查,就是下面的红色部分?
?解决方法:1.修改源码------哈哈2.忽然发现有一个构造方法是允许软连接的public?FileTemplateLoader(final?File?baseDir,?final?boolean?allowLinking) 所以想到用spring注入一个allowLinking =true的FileTemplateLoader。当我看到上面getTemplateLoaderForPath这个方法中的new?FileTemplateLoader(file);这句话时.我尿了。这尼玛真是个坑13.不过springmvc提供了一个preferFileSystemAccess 意思是你是否喜欢FileTemplateLoader。不喜欢的用我的SpringTemplateLoader 吧。经测试这条路走不通,spring 也判断了真实路径。3.看源码时看到支持templateLoaderPaths 注意多了一个s。多个路径。好吧。大家应该知道怎么办。4.自定义Temploader你可以在配置FreeMarkerConfigurer时添加一个自己的preTemplateLoaders 或者postTemplateLoaders 。这个很明显是前后。为什么提供前后。因为还有中间。哈哈。中间是谁。就是根据templateLoaderPath获取的。哈哈。好吧真213.如果有多个到底用哪个呢 ?看看?createConfiguration这个方法中有这么一句
public Object findTemplateSource(String name) throws IOException{        // Use soft affinity - give the loader that last found this        // resource a chance to find it again first.        TemplateLoader lastLoader = (TemplateLoader)lastLoaderForName.get(name);        if(lastLoader != null){            Object source = lastLoader.findTemplateSource(name);            if(source != null){                return new MultiSource(source, lastLoader);            }        }                // If there is no affine loader, or it could not find the resource        // again, try all loaders in order of appearance. If any manages        // to find the resource, then associate it as the new affine loader         // for this resource.        for(int i = 0; i < loaders.length; ++i){            TemplateLoader loader = loaders[i];            Object source = loader.findTemplateSource(name);            if(source != null){                lastLoaderForName.put(name, loader);                return new MultiSource(source, loader);            }        }                lastLoaderForName.remove(name);        // Resource not found        return null; }
??太明显不解释 当然你也可以不要中简单templateloader就是不定义templateLoaderPath属性。然后定义一个自己的templateloader注入到preTemplateLoaders 或者postTemplateL

?

5.好吧你可以更狠一点把FreeMarkerConfigurer也替换掉哈哈

热点排行