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(...);
//这个二进制的渲染,一般用来向用户返回二进制数据:mp3, pdf等.
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类:
也是用来向用户返回二进制数据:mp3, pdf等.
TemplateRenderer类:
使用模板渲染
public void render(ServletContext context, HttpServletRequest request, HttpServletResponse response) throws Exception {
TemplateFactory.getTemplateFactory()
.loadTemplate(path)
.render(request, response, model);
}
TextRenderer类:
一般用来渲染html,css等text数据.
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"
浙公网安备 33010602011771号