in src/main/java/org/apache/sling/api/servlets/HtmlResponse.java [468:530]
public void send(HttpServletResponse response, boolean setStatus) throws IOException {
prepare();
if (setStatus) {
Object status = getProperty(PN_STATUS_CODE);
if (status instanceof Number) {
int statusCode = ((Number) status).intValue();
response.setStatus(statusCode);
// special treatment of 201/CREATED: Requires Location
if (statusCode == HttpServletResponse.SC_CREATED) {
response.setHeader("Location", getLocation());
}
}
}
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
Writer out = response.getWriter();
InputStream template = getClass().getResourceAsStream(TEMPLATE_NAME);
Reader in = new BufferedReader(new InputStreamReader(template));
StringBuffer varBuffer = new StringBuffer();
int state = 0;
int read;
while ((read = in.read()) >= 0) {
char c = (char) read;
switch (state) {
// initial
case 0:
if (c == '$') {
state = 1;
} else {
out.write(c);
}
break;
// $ read
case 1:
if (c == '{') {
state = 2;
} else {
state = 0;
out.write('$');
out.write(c);
}
break;
// { read
case 2:
if (c == '}') {
state = 0;
Object prop = properties.get(varBuffer.toString());
if (prop != null) {
out.write(ResponseUtil.escapeXml(prop.toString()));
}
varBuffer.setLength(0);
} else {
varBuffer.append(c);
}
}
}
in.close();
out.flush();
}