请问renderFile(myfilename)时何时触发的render方法呢

请问renderFile(filename)时何时触发的render方法呢?

我的下载类MyController中代码:

private void renderFile2(String file){
    if(FileUtils.fileExist(file)){
        File file1 = new File(file);
        setAttr("rtnFlag", true);
        renderFile(file1);
        return;
    }else{
        setAttr("rtnFlag", false);
        renderText("目前没有反馈表哦!");
    }
}

Controller类中的源码是:

public void renderFile(File file) {
    render = renderManager.getRenderFactory().getFileRender(file);
}

而RenderFactoryjava中的源码:

public Render getFileRender(File file) {
    return new FileRender(file);
}

那么问题来了何时触发的FileRender.java中的render()方法呢?

public FileRender(File file) {
    if (file == null) {
        throw new IllegalArgumentException("file can not be null.");
    }
    this.file = file;
}
...
public void render() {
    if (file == null || !file.isFile()) {
        RenderManager.me().getRenderFactory().getErrorRender(404).setContext(request, response).render();
        return ;
    }
   
    // ---------
    response.setHeader("Accept-Ranges", "bytes");
    String fn = downloadFileName == null ? file.getName() : downloadFileName;
    response.setHeader("Content-disposition", "attachment; " + encodeFileName(request, fn));
    String contentType = servletContext.getMimeType(file.getName());
    response.setContentType(contentType != null ? contentType : DEFAULT_CONTENT_TYPE);
   
    // ---------
    if (StrKit.isBlank(request.getHeader("Range"))) {
        normalRender();
    } else {
        rangeRender();
    }
}


评论区

JFinal

2023-12-07 18:45

ActionHandler.java 中触发的,看下源码

大白熊

2023-12-08 09:24

@JFinal 明白了,谢谢!!handle中调用了render.setContext(request, response, action.getViewPath()).render();

热门反馈

扫码入社