📄 blasterhttpproxyservlet.java
字号:
try { HttpPushHandler pushHandler = BlasterHttpProxy.getHttpPushHandler(sessionId); pushHandler.push(new PushDataItem(PushDataItem.LOGGING, "if (parent.error != null) parent.error('"+codedText+"');\n")); } catch (XmlBlasterException e2) { PrintWriter out = res.getWriter(); out.println(HttpPushHandler.alert(e.getMessage())); } } catch (Exception e) { log.severe("Caught Exception: " + e.toString()); e.printStackTrace(); try { HttpPushHandler pushHandler = BlasterHttpProxy.getHttpPushHandler(sessionId); pushHandler.push(new PushDataItem(PushDataItem.LOGGING, "if (parent.error != null) parent.error('"+e.toString()+"');\n")); } catch (XmlBlasterException e2) { PrintWriter out = res.getWriter(); out.println(HttpPushHandler.alert(e.toString())); } } } /** * POST request from the browser. * Handles the following requests 'ActionType' from the browser<br /> * <ul> * <li>logout</li> * <li>get - The synchronous get is not supported</li> * <li>subscribe</li> * <li>unSubscribe</li> * <li>publish</li> * <li>erase</li> * </ul> * <p> * This method is called through a SUBMIT of a HTML FORM,<br> * the TARGET should be set to "requestFrame". * The parameter ActionType must be set to one of the above methods.<br /> * For an explanation of these methods see the file xmlBlaster.idl * <p /> * The asynchronous updates are pushed into the 'callbackFrame' of your browser * <p /> * The key/qos values are expected to be URLEncoded * <p /> * Allows simple subscribe/unSubscribe/erase of the form * <pre>?ActionType=subscribe&key.oid=cpuinfo</pre> * and complete key XML strings like * <pre>?ActionType=subscribe&key=<key oid='hello'></key></pre> * as well.<br /> * QoS is optional, the content only needed when publishing * @param req Data from browser * @param res Response of the servlet */ public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html"); PrintWriter out = res.getWriter(); //HttpSession session = req.getSession(); /*HttpSession session =*/ req.getSession(false); String sessionId = req.getRequestedSessionId(); log.info("Entering servlet doPost() ..."); I_XmlBlasterAccess xmlBlaster = null; HttpPushHandler pushHandler = null; try { pushHandler = BlasterHttpProxy.getHttpPushHandler(sessionId); xmlBlaster = pushHandler.getXmlBlasterAccess(); } catch (XmlBlasterException e) { log.severe("Caught XmlBlaster Exception: " + e.getMessage()); return; } try { String actionType = Util.getParameter(req, "ActionType", "NONE"); MethodName action; try { action = MethodName.toMethodName(actionType); } catch (IllegalArgumentException ie) { throw new Exception("Unknown or missing 'ActionType=" + actionType + "' please choose 'subscribe' 'unSubscribe' 'erase' etc."); } // Extract the message data String oid = Util.getParameter(req, "key.oid", null); if (oid != null) oid = Global.decode(oid, ENCODING); String key = Util.getParameter(req, "key", null); if (key != null) { key = Global.decode(key, ENCODING); if (log.isLoggable(Level.FINEST)) log.finest("key=\n'" + key + "'"); } String content = Util.getParameter(req, "content", null); if (content != null) { content = Global.decode(content, ENCODING); } else content = ""; if (log.isLoggable(Level.FINEST)) log.finest("content=\n'" + content + "'"); String qos = Util.getParameter(req, "qos", null); if (qos != null) { qos = Global.decode(qos, ENCODING); } else qos = ""; if (log.isLoggable(Level.FINEST)) log.finest("qos=\n'" + qos + "'"); if (action.equals(MethodName.SUBSCRIBE)) { // "subscribe" log.fine("subscribe arrived ..."); if (oid != null) { SubscribeKey xmlKey = new SubscribeKey(glob, oid); SubscribeReturnQos ret = xmlBlaster.subscribe(xmlKey.toXml(), qos); log.info("Subscribed to simple key.oid=" + oid + ": " + ret.getSubscriptionId()); } else if (key != null) { SubscribeReturnQos ret = xmlBlaster.subscribe(key, qos); log.info("Subscribed to " + key + ": SubscriptionId=" + ret.getSubscriptionId() + " qos=" + qos); } else { String str = "Please call servlet with some 'key.oid=...' or 'key=<key ...' when subscribing"; log.severe(str); htmlOutput(str, res); return; } } else if (action.equals(MethodName.UNSUBSCRIBE)) { // "unSubscribe" log.fine("unSubscribe arrived ..."); //UnSubscribeReturnQos[] ret; if (oid != null) { UnSubscribeKey xmlKey = new UnSubscribeKey(glob, oid); /*ret = */xmlBlaster.unSubscribe(xmlKey.toXml(), qos); } else if (key != null) { /*ret = */xmlBlaster.unSubscribe(key, qos); } else { String str = "Please call servlet with some 'key.oid=...' or 'key=<key ...' when unsubscribing"; log.severe(str); htmlOutput(str, res); return; } } else if (action.equals(MethodName.GET)) { // "get" throw new Exception("Synchronous ActionType=get is not supported"); } else if (action.equals(MethodName.PUBLISH)) { // "publish" log.fine("publish arrived ..."); if (key == null) { String str = "Please call servlet with some key when publishing"; log.severe(str); htmlOutput(str, res); return; } if (content == null) content = ""; log.info("Publishing '" + key + "'"); MsgUnit msgUnit = new MsgUnit(glob, key, content.getBytes(), qos); try { PublishReturnQos prq = xmlBlaster.publish(msgUnit); log.fine("Success: Publishing done, returned oid=" + prq.getKeyOid()); } catch(XmlBlasterException e) { log.warning("XmlBlasterException: " + e.getMessage()); } } else if (action.equals(MethodName.ERASE)) { // "erase" log.fine("erase arrived ..."); //EraseReturnQos[] ret; if (oid != null) { EraseKey ek = new EraseKey(glob, oid); /*ret =*/ xmlBlaster.erase(ek.toXml(), qos); } else if (key != null) { /*ret =*/ xmlBlaster.erase(key, qos); } else { String str = "Please call servlet with some 'key.oid=...' or 'key=<key ...' when subscribing"; log.severe(str); htmlOutput(str, res); return; } } else if (action.equals(MethodName.PING)) { // "ping" log.fine("ping arrived, doing nothing ..."); //String ret = xmlBlaster.ping(qos); } else { throw new Exception("Unknown or missing 'ActionType=" + actionType + "' please choose 'subscribe' 'unSubscribe' 'erase' etc."); } } catch (XmlBlasterException e) { log.severe("Caught XmlBlaster Exception: " + e.getMessage()); String codedText = Global.encode( e.getMessage(), ENCODING ); pushHandler.push(new PushDataItem(PushDataItem.LOGGING, "if (parent.error != null) parent.error('"+codedText+"');\n")); } catch (Exception e) { log.severe("RemoteException: " + e.getMessage()); e.printStackTrace(); out.println("<body>http communication problem</body>"); } } /** * Setting the system properties. * <p /> * These may be overwritten in zone.properties, e.g. * servlets.default.initArgs=servlets.default.initArgs=org.xml.sax.parser=org.apache.crimson.parser.Parser2 * <p /> * We set the properties to choose JacORB and Suns XML parser as a default. */ static public final void initSystemProperties(ServletConfig conf) { Properties props = System.getProperties(); // Check for orb configuration if (conf.getInitParameter("org.omg.CORBA.ORBClass") != null) { // "org.jacorb.orb.ORB" props.put( "org.omg.CORBA.ORBClass", conf.getInitParameter("org.omg.CORBA.ORBClass")); log.info("Using servlet system parameter org.omg.CORBA.ORBClass=" + props.get("org.omg.CORBA.ORBClass")); } if (conf.getInitParameter("org.omg.CORBA.ORBSingletonClass") != null) { // "org.jacorb.orb.ORBSingleton"); props.put( "org.omg.CORBA.ORBSingletonClass", conf.getInitParameter("org.omg.CORBA.ORBSingletonClass")); log.info("Using servlet system parameter org.omg.CORBA.ORBSingletonClass=" + props.get("org.omg.CORBA.ORBSingletonClass")); } // xmlBlaster uses Suns XML parser as default /* if (conf.getInitParameter("org.xml.sax.parser") != null) { props.put( "org.xml.sax.parser", conf.getInitParameter("org.xml.sax.parser")); log.trace(ME, "Found system parameter org.xml.sax.parser=" + conf.getInitParameter("org.xml.sax.parser")); } else props.put("org.xml.sax.parser", "org.apache.crimson.parser.Parser2"); // xmlBlaster uses Suns XML parser as default log.info(ME, "Using system parameter org.xml.sax.parser=" + props.get("org.xml.sax.parser")); */ if (props.size() > 0) { System.setProperties(props); } } /** * Event fired by Logger.java through interface I_LogListener. * <p /> * Log output from log.info(); etc. into Servlet log file. * <p /> * Note that System.err.println("Hello"); will be printed into * the Apache error log file /var/log/httpd.error_log<br /> * I don't know what other web servers are doing with it. * <p /> * System.out.println("Hello"); will be printed to the console * where you started the servlet engine. */ public void log(LogRecord record) { getServletContext().log(record.getMessage()); } /** * Returns a HTML file to the Browser. * @param htmlData the complete HTML page * @param response the servlet response-object * @see HttpServletResponse */ public void htmlOutput(String htmlData, HttpServletResponse response) throws ServletException { response.setContentType("text/html"); try { PrintWriter pw; pw = response.getWriter(); pw.println(htmlData); pw.close(); } catch(IOException e) { log.warning("Could not deliver HTML page to browser:"+e.toString()); throw new ServletException(e.toString()); } } /** * Report an error to the browser, which displays it in an alert() message. * @param sessionId The browser * @param error The text to display */ public void popupError(HttpServletResponse response, String error) { try { response.setContentType("text/html"); PrintWriter pw; pw = response.getWriter(); pw.println(HttpPushHandler.alert(error)); pw.close(); } catch(IOException e) { log.severe("Sending of error failed: " + error + "\n Reason=" + e.toString()); } } /** * Send XML-Data to browser. * The browser needs to handle the data. * @param xmlData XML data * @param response servlet response */ public void xmlOutput( String xmlData, HttpServletResponse response ) throws ServletException { response.setContentType("text/xml"); try { PrintWriter pw; pw = response.getWriter(); pw.println(xmlData); pw.close(); } catch(IOException e) { String text = "Sending XML data to browser failed: " + e.toString(); log.warning(text); PrintWriter pw; try { pw = response.getWriter(); } catch(IOException e2) { log.severe("2.xml send problem"); return; } pw.println("<html><body>Request Problems" + text + "</body></html>"); pw.close(); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -