1 package com.quadcap.http.servlets.cgi; 2 3 40 41 import java.io.File ; 42 import java.io.FileInputStream ; 43 import java.io.IOException ; 44 import java.io.OutputStream ; 45 46 import java.util.Enumeration ; 47 import java.util.Hashtable ; 48 49 import javax.servlet.ServletConfig ; 50 import javax.servlet.ServletException ; 51 52 import javax.servlet.http.HttpServlet ; 53 import javax.servlet.http.HttpServletRequest ; 54 import javax.servlet.http.HttpServletResponse ; 55 56 import com.quadcap.util.Debug; 57 58 64 65 public class CgiServlet extends HttpServlet { 66 Hashtable scripts = new Hashtable (); 67 Hashtable extMap = new Hashtable (); 68 String defaultInterp; 69 70 77 public void init(ServletConfig config) throws ServletException { 78 super.init(config); 79 Enumeration e = config.getInitParameterNames(); 80 defaultInterp = config.getInitParameter("defaultInterp"); 81 while (e.hasMoreElements()) { 82 String name = e.nextElement().toString(); 83 if (name.startsWith(".")) { 84 extMap.put(name.substring(1), config.getInitParameter(name)); 85 } 86 } 87 } 88 89 100 protected void service(HttpServletRequest req, HttpServletResponse res) 101 throws ServletException , IOException 102 { 103 CgiScript file = getFileForRequest(req); 104 if (file == null) { 105 res.sendError(HttpServletResponse.SC_NOT_FOUND); 106 } else { 107 file.service(req, res); 108 } 109 } 110 111 117 public String getFileNameForRequest(HttpServletRequest req) { 118 String uri = req.getRequestURI(); 119 int idx = uri.indexOf('?'); 120 if (idx >= 0) uri = uri.substring(0, idx); 121 return uri; 122 } 123 124 133 public CgiScript getFileForRequest(HttpServletRequest req) 134 throws ServletException 135 { 136 String name = getServletContext().getRealPath(req.getServletPath()); 137 CgiScript script = null; 138 139 synchronized (scripts) { 140 script = (CgiScript)scripts.get(name); 141 142 if (script == null) { 143 int idx = name.lastIndexOf('.'); 144 String ext = null; 145 if (idx > 0) ext = name.substring(idx+1); 146 String interp = null; 147 if (ext != null) interp = (String )extMap.get(ext); 148 if (interp == null) interp = defaultInterp; 149 if (interp == null) { 150 throw new ServletException ("No interpreter for " + name); 151 } 152 153 File f = new File (name); 154 if (!f.exists()) return null; 155 156 script = new CgiScript(this, interp, f); 157 scripts.put(name, script); 158 return script; 159 } 160 } 161 return script; 162 } 163 } 164 | Popular Tags |