/* * Copyright (c) 2001, Xiaoping Jia. * All Rights Reserved. */ package expo2; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; import org.apache.ecs.*; import org.apache.ecs.html.*; /** * Java Expo web app version 2. * The base servlet. * * The purposes of the base servlet are: * * * @version 1.1 2001/04/20 * @since 1.0 * @author Xiaoping Jia */ public abstract class JavaExpoBase extends HttpServlet { /** * To be overriden by each subclass to handle requests. * * @param request the HTTP request * @param response the HTTP response * @param contents a list of HTML page elements that the main contents od the page is composed of * @return true to follow the logic of the main servlet; * false to bypass the rest of the base servlet. */ abstract public boolean handleRequest(HttpServletRequest request, HttpServletResponse response, List contents) throws ServletException, IOException; /** * Handle POST request. * The main logic of the base servlet. */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Html html = new Html(); Body body = new Body(); body.setBgColor(HtmlColor.lavender); html.addElement(new Head().addElement(new Title("Enterprise Java Expo"))); makeHeader(body); List contents = new ArrayList(); if (handleRequest(request, response, contents)) { Iterator iter; List left = makeLeftBar(response); List right = makeRightBar(response); if (left == null && right == null) { iter = contents.iterator(); while (iter.hasNext()) { Object e = iter.next(); if (e instanceof Element) { body.addElement((Element) e); } else if (e instanceof String) { body.addElement((String) e); } } } else { TR tr = new TR(); TD td; body.addElement(new Table().setWidth("100%") .addElement(tr)); if (left != null) { td = new TD().setWidth("20%").setVAlign("top"); iter = left.iterator(); while (iter.hasNext()) { Object e = iter.next(); if (e instanceof Element) { td.addElement((Element) e); } else if (e instanceof String) { td.addElement((String) e); } } tr.addElement(td); } td = new TD(); iter = contents.iterator(); while (iter.hasNext()) { Object e = iter.next(); if (e instanceof Element) { td.addElement((Element) e); } else if (e instanceof String) { td.addElement((String) e); } } tr.addElement(td); if (right != null) { td = new TD().setWidth("20%").setVAlign("top"); iter = right.iterator(); while (iter.hasNext()) { Object e = iter.next(); if (e instanceof Element) { td.addElement((Element) e); } else if (e instanceof String) { td.addElement((String) e); } } tr.addElement(td); } } makeFooter(body); html.addElement(body); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(html.toString()); } } /** * Handle GET request. * Provide identical behavior as the POST requests. */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void init() { try { // read menu items from the config file /WEB-INF/menus.cfg ServletContext ctx = getServletContext(); BufferedReader mfile = new BufferedReader(new FileReader(ctx.getRealPath("WEB-INF/menus.cfg"))); menus = new ArrayList(); String line; while ((line = mfile.readLine()) != null) { line = line.trim(); if (line.length() > 0 && line.charAt(0) != '#') { int i = line.indexOf(':'); if (i > 0) { String name = line.substring(0, i).trim(); String url = line.substring(i + 1).trim(); menus.add(new MenuItem(name, url)); } } // skip empty or comment line } } catch (FileNotFoundException e) { System.out.println("Unable to open file menus.cfg"); } catch (IOException e) { System.out.println("Error in reading file menus.cfg"); } } /** * Make a default header. Maybe overridden by subclasses. * * @param body the HTML page bady to which the header is attached */ protected void makeHeader(Body body) { if (header == null) { header = new Table().setWidth("100%") .addElement(new TR() .addElement(new TD() .addElement(new IMG("http://flyweight.cti.depaul.edu:9080/se452servlets/images/duke-j2ee.gif").setWidth(75).setHeight(80))) .addElement(new TD() .addElement(new Center() .addElement(new B() .addElement(new Font("Arial,Helvetica", HtmlColor.navy, +6) .addElement("Enterprise Java Expo")) .addElement(new BR()) .addElement(new Font("Times New Roman,Times", HtmlColor.indigo, +4) .addElement("Chicago • Vienna • Shanghai • San Francisco")))))); } body.addElement(header); } /** * Make a default footer. Maybe overridden by subclasses. * * @param body the HTML page bady to which the footer is attached */ protected void makeFooter(Body body) { if (footer == null) { footer = new Table().setWidth("100%") .addElement(new TR() .addElement(new TD().setVAlign("top") .addElement("Copyright © 2001 Enterprise Java Expo. (Ver 2.0)") .addElement(new BR()) .addElement("Powered by ") .addElement(new A("http://jakarta.apache.org/tomcat/", "Tomcat"))) .addElement(new TD().setAlign("right") .addElement(new IMG("http://flyweight.cti.depaul.edu:9080/se452servlets/images/tomcat-power.gif").setWidth(75).setHeight(80)))); } body.addElement(new HR()) .addElement(footer); } /** * Make a default left bar. Maybe overridden by subclasses. * * @param response the HTTP response * @return a list of HTML elements that the left bar is composed of */ protected List makeLeftBar(HttpServletResponse response) { List left = null; if (menus != null) { left = new ArrayList(); Iterator iter = menus.iterator(); while (iter.hasNext()) { MenuItem mi = (MenuItem) iter.next(); if (mi != null && mi.name != null && mi.url != null) { left.add(new A(response.encodeURL(urlPrefix + mi.url), mi.name)); left.add(new BR()); } } } return left; } /** * Make a default right bar. Maybe overridden by subclasses. * * @param response the HTTP response * @return a list of HTML elements that the left bar is composed of */ protected List makeRightBar(HttpServletResponse response) { return null; } static class MenuItem { String name, url; MenuItem(String name, String url) { this.name = name; this.url = url; } } protected static final String urlPrefix = "/se452servlets/servlet/expo2."; protected List menus = null; protected Element header = null; protected Element footer = null; }