NutzCN Logo
问答 nutz 如何实现返回.html文件
发布于 3074天前 作者 qq_c8b75f47 2617 次浏览 复制 上一个帖子 下一个帖子
标签: mvc

nutz 如何实现返回.html文件

3 回复

神马意思,html直接>>过去

来自炫酷的 NutzCN

比如返回一个 /test/a.html,我配置的是jsp:/test/a,返回视图查找的是/test/a.jsp,如何返回 /test/a.html?

自己搞定啦 ,汗汗,看源码忽略了一个总要的细节

自定义了一个ViewMarker和View
在module总配置了一下 @views
下面粘贴一下做的测试:
public class MyViewMarker implements ViewMaker {

@Override
public View make(Ioc ioc, String type, String value) {
    if(type.toLowerCase().contains("htm"))
    {   
       return new MyView(value);
    }  
    return new JspView(value);
}

}

public class MyView extends AbstractPathView {

public MyView(String dest) {
    super(dest);
}

public void render(HttpServletRequest req, HttpServletResponse resp,
       Object obj) throws Throwable {
    String path = evalPath(req, obj);
    String args = "";
    if (path != null && path.contains("?")) { //将参数部分分解出来
        args = path.substring(path.indexOf('?'));
        path = path.substring(0, path.indexOf('?'));
    }

    String ext = getExt();        
    // 空路径,采用默认规则
    if (Strings.isBlank(path)) {
        path = Mvcs.getRequestPath(req);
        path = "/WEB-INF"
                + (path.startsWith("/") ? "" : "/")
                + Files.renameSuffix(path, ext);
    }
    // 绝对路径 : 以 '/' 开头的路径不增加 '/WEB-INF'
    else if (path.charAt(0) == '/') {
        if (!path.toLowerCase().endsWith(ext))
            path += ext;
    }
    // 包名形式的路径
    else {
        path = "/WEB-INF/" + path.replace('.', '/') + ext;
    }

    // 执行 Forward
    path = path + args;
    RequestDispatcher rd = req.getRequestDispatcher(path);
    if (rd == null)
        throw Lang.makeThrow("Fail to find Forward '%s'", path);
    // Do rendering
    rd.forward(req, resp);
}

/**
 * 子类可以覆盖这个方法,给出自己特殊的后缀,必须小写哦
 * 
 * @return 后缀
 */
protected String getExt() {
    return ".htm";
}

}
设置一下需要返回视图的后缀即可,忽略了这一点,默认访问的路径也可以自定义。。。。。

添加回复
请先登陆
回到顶部