in dubbo-compatible/src/main/java/com/alibaba/dubbo/container/page/PageServlet.java [93:202]
protected final void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
if (!response.isCommitted()) {
PrintWriter writer = response.getWriter();
String uri = request.getRequestURI();
boolean isHtml = false;
if (uri == null || uri.length() == 0 || "/".equals(uri)) {
uri = "index";
isHtml = true;
} else {
if (uri.startsWith("/")) {
uri = uri.substring(1);
}
if (uri.endsWith(".html")) {
uri = uri.substring(0, uri.length() - ".html".length());
isHtml = true;
}
}
if (uri.endsWith("favicon.ico")) {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
ExtensionLoader<PageHandler> pageHandlerLoader = ExtensionLoader.getExtensionLoader(PageHandler.class);
PageHandler pageHandler = pageHandlerLoader.hasExtension(uri) ? pageHandlerLoader.getExtension(uri) : null;
if (isHtml) {
writer.println("<html><head><title>Dubbo</title>");
writer.println(
"<style type=\"text/css\">html, body {margin: 10;padding: 0;background-color: #6D838C;font-family: Arial, Verdana;font-size: 12px;color: #FFFFFF;text-align: center;vertical-align: middle;word-break: break-all; } table {width: 90%; margin: 0px auto;border-collapse: collapse;border: 8px solid #FFFFFF; } thead tr {background-color: #253c46; } tbody tr {background-color: #8da5af; } th {padding-top: 4px;padding-bottom: 4px;font-size: 14px;height: 20px; } td {margin: 3px;padding: 3px;border: 2px solid #FFFFFF;font-size: 14px;height: 25px; } a {color: #FFFFFF;cursor: pointer;text-decoration: underline; } a:hover {text-decoration: none; }</style>");
writer.println("</head><body>");
}
if (pageHandler != null) {
Page page = null;
try {
String query = request.getQueryString();
page = pageHandler.handle(
URL.valueOf(request.getRequestURL().toString()
+ (query == null || query.length() == 0 ? "" : "?" + query)));
} catch (Throwable t) {
logger.warn(t.getMessage(), t);
String msg = t.getMessage();
if (msg == null) {
msg = StringUtils.toString(t);
}
if (isHtml) {
writer.println("<table>");
writer.println("<thead>");
writer.println(" <tr>");
writer.println(" <th>Error</th>");
writer.println(" </tr>");
writer.println("</thead>");
writer.println("<tbody>");
writer.println(" <tr>");
writer.println(" <td>");
writer.println(" "
+ msg.replace("<", "<").replace(">", "<").replace("\n", "<br/>"));
writer.println(" </td>");
writer.println(" </tr>");
writer.println("</tbody>");
writer.println("</table>");
writer.println("<br/>");
} else {
writer.println(msg);
}
}
if (page != null) {
if (isHtml) {
String nav = page.getNavigation();
if (nav == null || nav.length() == 0) {
nav = ExtensionLoader.getExtensionLoader(PageHandler.class)
.getExtensionName(pageHandler);
nav = nav.substring(0, 1).toUpperCase() + nav.substring(1);
}
if (!"index".equals(uri)) {
nav = "<a href=\"/\">Home</a> > " + nav;
}
writeMenu(request, writer, nav);
writeTable(writer, page.getTitle(), page.getColumns(), page.getRows());
} else {
if (page.getRows().size() > 0 && page.getRows().get(0).size() > 0) {
writer.println(page.getRows().get(0).get(0));
}
}
}
} else {
if (isHtml) {
writer.println("<table>");
writer.println("<thead>");
writer.println(" <tr>");
writer.println(" <th>Error</th>");
writer.println(" </tr>");
writer.println("</thead>");
writer.println("<tbody>");
writer.println(" <tr>");
writer.println(" <td>");
writer.println(" Not found " + uri + " page. Please goto <a href=\"/\">Home</a> page.");
writer.println(" </td>");
writer.println(" </tr>");
writer.println("</tbody>");
writer.println("</table>");
writer.println("<br/>");
} else {
writer.println("Not found " + uri + " page.");
}
}
if (isHtml) {
writer.println("</body></html>");
}
writer.flush();
}
}