package de.tud.kom.socom.web.server; import java.io.File; import java.io.IOException; import java.util.List; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.htmlparser.jericho.Element; import net.htmlparser.jericho.OutputDocument; import net.htmlparser.jericho.Segment; import net.htmlparser.jericho.Source; import net.htmlparser.jericho.StartTagType; import de.tud.kom.socom.web.server.util.Logger; import de.tud.kom.socom.web.server.util.LoggerFactory; /** * handles servlet-requests for "default" website and delivers the template with * GWT javascript etc components inside * This is basically the point of "static" website delöivery with dynamic parts * inside. Here the HTML skeleton is delivered * * @author jkonert */ public class SoComWebTemplateServlet extends HttpServlet { private Logger logger = LoggerFactory.getLogger(); // look in this order for the template.. String[] PATH_TO_TEMPLATE = {"SoComWeb.html", "war/SoComWeb.html", "war/WEB-INF/SoComWeb.html"}; Source template; // whatever we want to manipulate Segment title; OutputDocument out; /** * */ private static final long serialVersionUID = -2857499347196625311L; @Override public void init(ServletConfig servletConfig) throws ServletException { try { // TODO JK: listen to file changes and update source automatically for (int i=0; i < PATH_TO_TEMPLATE.length; i++) { // File f = new File("test.tmp"); // System.err.println("Path to SocomWeb.html: "+f.getAbsolutePath()); File temp = new File(PATH_TO_TEMPLATE[i]); if (temp.exists()) {// try to lookup directories above.. template = new Source(temp); out = new OutputDocument(template); break; } } if (template == null) logger.Error("Template not found in any of the pathes!"); //find title List<Element> list = template.getAllElements("title"); for(Element e: list) { title = e.getContent(); break; // only 1.. } } catch (IOException e) { logger.Error(e); } } @Override public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { super.service(request, response); } @Override public void doGet(HttpServletRequest rq, HttpServletResponse rs) { doRequest(rq, rs); } @Override public void doPost(HttpServletRequest rq, HttpServletResponse rs) { doRequest(rq, rs); } private void doRequest(HttpServletRequest rq, HttpServletResponse rs) { // XXX JK: remember startdate/last file change and return "UNMODIFIED" if file did not change.. rs.setContentType("text/html;charset=UTF-8"); // do add/replace parts that should be fetched/shown e.g. by facebook // out.replace(title, ""); // minimize template out.remove(template.getAllElements(StartTagType.COMMENT)); String result = out.toString(); rs.setContentLength(result.length()); try { rs.getWriter().append(result); rs.getWriter().flush(); } catch (IOException e) { rs.setContentLength(0); logger.Error(e); } } }