/** * Initialize Servlet Parameters Take Database Driver, Conenction URL and User from * /WEB-INF/web.xml.<br> * If any parameter is not found then look it up at hipergate.cnf Properties file using * Environment singleton. * * @throws ServletException * @throws UnavailableException If jdbcDriverClassName parameter is not found and driver property * at hipergate.cnf is not found or if jdbcURL parameter is not found and dburl property at * hipergate.cnf is not found. * @see com.knowgate.misc.Environment */ public void init() throws ServletException { ServletConfig config = getServletConfig(); jdbcDriverClassName = config.getInitParameter("jdbcDriverClassName"); jdbcURL = config.getInitParameter("jdbcURL"); dbUserName = config.getInitParameter("dbUserName"); dbUserPassword = config.getInitParameter("dbUserPassword"); if (isVoid(jdbcDriverClassName) || isVoid(jdbcURL) || isVoid(dbUserName) || isVoid(dbUserPassword)) { Properties env = Environment.getProfile("hipergate"); if (isVoid(jdbcDriverClassName)) jdbcDriverClassName = env.getProperty("driver"); if (isVoid(jdbcURL)) jdbcURL = env.getProperty("dburl"); if (isVoid(dbUserName)) dbUserName = env.getProperty("dbuser"); if (isVoid(dbUserPassword)) dbUserPassword = env.getProperty("dbpassword"); } if (jdbcDriverClassName == null || jdbcURL == null) throw new UnavailableException("Init params missing"); } // init()
/** * Get Query By Form results throught response output stream. * * @param queryspec Name of XML file containing the Query Specification * @param columnlist List of comma separated column names to retrieve * @param where SQL WHERE clause to apply * @param order by SQL ORDER BY clause to apply * @param showas Output format. One of { "CSV" <i>(comma separated)</i>, "TSV" <i>(tabbed * separated)</i>, "XLS" <i>(Excel)</i> } * @throws IOException * @throws FileNotFoundException * @throws ServletException */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, FileNotFoundException, ServletException { Class oDriver; Connection oConn = null; ServletOutputStream oOut = response.getOutputStream(); QueryByForm oQBF; String sQuerySpec; String sColumnList; String sWhere; String sOrderBy; String sShowAs; String sStorage; if (DebugFile.trace) { DebugFile.writeln("Begin HttpQueryServlet.doGet(...)"); DebugFile.incIdent(); } sStorage = Environment.getProfileVar("hipergate", "storage"); if (DebugFile.trace) DebugFile.writeln("storage=" + sStorage); try { oDriver = Class.forName(jdbcDriverClassName); } catch (ClassNotFoundException ignore) { oDriver = null; if (DebugFile.trace) DebugFile.writeln("Class.forName(" + jdbcDriverClassName + ") : " + ignore.getMessage()); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Database driver not found"); } if (null == oDriver) return; try { sQuerySpec = request.getParameter("queryspec"); sColumnList = request.getParameter("columnlist"); if (null == sColumnList) sColumnList = "*"; sWhere = request.getParameter("where"); if (null == sWhere) sWhere = "1=1"; sOrderBy = request.getParameter("orderby"); if (null == sOrderBy) sOrderBy = ""; sShowAs = request.getParameter("showas"); if (null == sShowAs) sShowAs = "CSV"; if (DebugFile.trace) DebugFile.writeln("queryspec=" + sQuerySpec != null ? sQuerySpec : "null"); if (DebugFile.trace) DebugFile.writeln("where=" + sWhere); if (DebugFile.trace) DebugFile.writeln("orderby=" + sOrderBy); if (hasSqlSignature(sColumnList)) { response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Invalid Column List Syntax"); return; } oQBF = new QueryByForm("file://" + sStorage + "/qbf/" + sQuerySpec + ".xml"); if (DebugFile.trace) DebugFile.writeln("DriverManager.getConnection(" + jdbcURL + ",...)"); oConn = DriverManager.getConnection(jdbcURL, dbUserName, dbUserPassword); // Send some basic http headers to support binary d/l. if (sShowAs.equalsIgnoreCase("XLS")) { response.setContentType("application/x-msexcel"); response.setHeader( "Content-Disposition", "inline; filename=\"" + oQBF.getTitle(request.getLocale().getLanguage()) + " 1.csv\""); } else if (sShowAs.equalsIgnoreCase("CSV")) { response.setContentType("text/plain"); response.setHeader( "Content-Disposition", "attachment; filename=\"" + oQBF.getTitle(request.getLocale().getLanguage()) + " 1.csv\""); } else if (sShowAs.equalsIgnoreCase("TSV")) { response.setContentType("text/tab-separated-values"); response.setHeader( "Content-Disposition", "attachment; filename=\"" + oQBF.getTitle(request.getLocale().getLanguage()) + " 1.tsv\""); } else { response.setContentType("text/plain"); response.setHeader( "Content-Disposition", "inline; filename=\"" + oQBF.getTitle(request.getLocale().getLanguage()) + " 1.txt\""); } if (0 == sOrderBy.length()) oQBF.queryToStream( oConn, sColumnList, oQBF.getBaseFilter(request) + " " + sWhere, oOut, sShowAs); else oQBF.queryToStream( oConn, sColumnList, oQBF.getBaseFilter(request) + " " + sWhere + " ORDER BY " + sOrderBy, oOut, sShowAs); oConn.close(); oConn = null; oOut.flush(); } catch (SQLException e) { if (DebugFile.trace) DebugFile.writeln("SQLException " + e.getMessage()); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); } catch (ClassNotFoundException e) { if (DebugFile.trace) DebugFile.writeln("ClassNotFoundException " + e.getMessage()); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); } catch (IllegalAccessException e) { if (DebugFile.trace) DebugFile.writeln("IllegalAccessException " + e.getMessage()); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); } catch (Exception e) { if (DebugFile.trace) DebugFile.writeln("Exception " + e.getMessage()); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); } finally { try { if (null != oConn) if (!oConn.isClosed()) oConn.close(); } catch (SQLException e) { if (DebugFile.trace) DebugFile.writeln("SQLException " + e.getMessage()); } } if (DebugFile.trace) { DebugFile.decIdent(); DebugFile.writeln("End HttpQueryServlet.doGet()"); } } // doGet()