Renderer部分:

注意,模板的渲染工作并没有被Dispatcher类看到,Dispatcher处理Action的时候,任何用户定义的带有@Mapping标记方法的Action,

返回类型只能有三种:String, void, Render

 

Render再负责调用template完成渲染.

 

Renderer:抽象类,负责渲染动作,至于渲染职责,template的责任.

//负责渲染动作

public abstract voidrender(ServletContext context, HttpServletRequest request,HttpServletResponse response) throwsException;

 

子类:

BinaryRenderer:

//注意,这个类只实现了render这一个方法,因为,Render的调用者根本不关心BinaryRenderer的其他方法,用法:

//

//@Mapping("/article/$1")

//RendergetXXX(){

//...

//return new BinaryRenderer(xxxData);

//}

//

//caller:

//Renderr = getXXX();

//r.render(...);

//这个二进制的渲染,一般用来向用户返回二进制数据:mp3pdf.


public void render(ServletContext context, HttpServletRequest request, HttpServletResponse response) throws Exception {
        response.setContentType(contentType==null ? "application/octet-stream" : contentType);
        response.setContentLength(data.length);
        OutputStream output = response.getOutputStream();
        output.write(data);
        output.flush();
    }

 

FileRenderer:

也是用来向用户返回二进制数据:mp3pdf.

 

TemplateRenderer:

使用模板渲染


public void render(ServletContext context, HttpServletRequest request, HttpServletResponse response) throws Exception {
        TemplateFactory.getTemplateFactory()
                .loadTemplate(path)
                .render(request, response, model);
    }

 

TextRenderer:

一般用来渲染html,csstext数据.


public void render(ServletContext context, HttpServletRequest request, HttpServletResponse response) throws Exception {
        StringBuilder sb = new StringBuilder(64);
        sb.append(contentType==null ? "text/html" : contentType)
          .append(";charset=")
          .append(characterEncoding==null ? "UTF-8" : characterEncoding);
        response.setContentType(sb.toString());
        PrintWriter pw = response.getWriter();
        pw.write(text);
        pw.flush();
    }

 

JavaScriptRenderer:

继承TextRenderer,用来渲染JavaScript,相对于基类,只是修改了返回的类型"application/x-javascript"

posted on 2010-12-16 00:20  菊次郎  阅读(209)  评论(0)    收藏  举报