com.centurylink.mdw.hub.servlet.RootServlet Maven / Gradle / Ivy
package com.centurylink.mdw.hub.servlet;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.centurylink.mdw.common.MdwException;
import com.centurylink.mdw.hub.context.ContextPaths;
import com.centurylink.mdw.hub.context.WebAppContext;
import com.centurylink.mdw.util.file.FileHelper;
@WebServlet(urlPatterns={"/index.html"}, loadOnStartup=1)
public class RootServlet extends HttpServlet {
private static ContextPaths contextPaths = new ContextPaths();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String path = request.getServletPath();
if (path.equals("/") || path.equals("/index.html")) {
response.setCharacterEncoding("UTF-8"); // why oh why does servlet spec default to ISO-8859-1?
if (new File(WebAppContext.getMdw().getOverrideRoot() + "/index.html").isFile()) {
request.getRequestDispatcher("/customContent/index.html").forward(request, response);
}
else {
// standard index.html -- read and process (never cached since asset injection may change)
response.setContentType("text/html");
String realPath = request.getSession().getServletContext().getRealPath("/index.html");
try {
String contents;
if (realPath == null) {
// read from classpath
contents = new String(FileHelper.readFromResourceStream(getClass().getClassLoader().getResourceAsStream("index.html")));
}
else {
if (!new File(realPath).isFile() && getClass().getClassLoader().getResource("/org/springframework/web/servlet/ResourceServlet.class") != null) {
// spring-boot client app
try (Scanner scanner = new Scanner(getClass().getClassLoader().getResourceAsStream("mdw/index.html"), "utf-8")) {
contents = scanner.useDelimiter("\\Z").next();
}
}
else {
contents = FileHelper.readFromFile(realPath);
}
}
response.getWriter().println(contextPaths.processIndex(contents));
}
catch (IOException ex) {
// TODO: logging
ex.printStackTrace();
throw ex;
}
catch (MdwException ex) {
// TODO: logging
ex.printStackTrace();
throw new IOException(ex.getMessage(), ex);
}
}
}
}
}