You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2014/04/23 12:35:49 UTC
svn commit: r1589366 -
/sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java
Author: cziegeler
Date: Wed Apr 23 10:35:48 2014
New Revision: 1589366
URL: http://svn.apache.org/r1589366
Log:
SLING-3509 : Add web console plugin to remove all compiled class files
Modified:
sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java
Modified: sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java?rev=1589366&r1=1589365&r2=1589366&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java (original)
+++ sling/trunk/bundles/scripting/jsp/src/main/java/org/apache/sling/scripting/jsp/JspScriptEngineFactory.java Wed Apr 23 10:35:48 2014
@@ -18,6 +18,8 @@ package org.apache.sling.scripting.jsp;
import static org.apache.sling.api.scripting.SlingBindings.SLING;
+import java.io.IOException;
+import java.io.PrintWriter;
import java.io.Reader;
import java.util.Dictionary;
@@ -25,9 +27,14 @@ import javax.script.Bindings;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
+import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
@@ -70,7 +77,7 @@ import org.slf4j.LoggerFactory;
@Component(label="%jsphandler.name",
description="%jsphandler.description",
metatype=true)
-@Service(value={javax.script.ScriptEngineFactory.class, EventHandler.class})
+@Service(value={javax.script.ScriptEngineFactory.class, EventHandler.class, Servlet.class})
@Properties({
@Property(name="service.description",value="JSP Script Handler"),
@Property(name="service.vendor",value="The Apache Software Foundation"),
@@ -82,11 +89,14 @@ import org.slf4j.LoggerFactory;
@Property(name="jasper.mappedfile",boolValue=true),
@Property(name="jasper.trimSpaces",boolValue=false),
@Property(name="jasper.displaySourceFragments",boolValue=false),
- @Property(name=EventConstants.EVENT_TOPIC, value="org/apache/sling/api/resource/*")
+ @Property(name=EventConstants.EVENT_TOPIC, value={"org/apache/sling/api/resource/*"}, propertyPrivate=true),
+ @Property(name="felix.webconsole.label", value="slingjsp"),
+ @Property(name="felix.webconsole.title", value="JSP"),
+ @Property(name="felix.webconsole.category", value="Sling"),
})
public class JspScriptEngineFactory
extends AbstractScriptEngineFactory
- implements EventHandler {
+ implements EventHandler, Servlet {
@Property(boolValue = true)
private static final String PROP_DEFAULT_IS_SESSION = "default.is.session";
@@ -333,7 +343,7 @@ public class JspScriptEngineFactory
Thread.currentThread().setContextClassLoader(old);
}
- logger.debug("IMPORTANT: Do not modify the generated servlets");
+ logger.debug("IMPORTANT: Do not modify the generated servlet classes directly");
}
/**
@@ -564,4 +574,76 @@ public class JspScriptEngineFactory
};
t.start();
}
+
+ //
+ // Web Console Plugin
+ //
+ private ServletConfig config;
+
+ /* (non-Javadoc)
+ * @see javax.servlet.Servlet#destroy()
+ */
+ public void destroy() {
+ this.config = null;
+ }
+
+ /* (non-Javadoc)
+ * @see javax.servlet.Servlet#getServletConfig()
+ */
+ public ServletConfig getServletConfig() {
+ return this.config;
+ }
+
+ /* (non-Javadoc)
+ * @see javax.servlet.Servlet#getServletInfo()
+ */
+ public String getServletInfo() {
+ return "";
+ }
+
+ /* (non-Javadoc)
+ * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
+ */
+ public void init(final ServletConfig config) throws ServletException {
+ this.config = config;
+ }
+
+ /* (non-Javadoc)
+ * @see javax.servlet.Servlet#service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
+ */
+ public void service(final ServletRequest request, final ServletResponse response)
+ throws ServletException, IOException {
+ if ( request instanceof HttpServletRequest ) {
+ final HttpServletRequest req = (HttpServletRequest) request;
+ final HttpServletResponse res = (HttpServletResponse) response;
+
+ final String path = req.getContextPath() + req.getServletPath() + req.getPathInfo();
+
+ if ( req.getMethod().equals("POST") ) {
+ final JspRuntimeContext rctxt = this.jspRuntimeContext;
+ this.classLoaderWriter.delete("/org/apache/jsp");
+ if ( rctxt != null ) {
+ renewJspRuntimeContext();
+ }
+
+ res.sendRedirect(path + "?reset");
+ return;
+ } else if ( req.getMethod().equals("GET") ) {
+ final PrintWriter pw = res.getWriter();
+ pw.println("<h1>Apache Sling JSP Scripting</h1>");
+ pw.println("<br/>");
+ if ( req.getParameter("reset") != null ) {
+ pw.println("<p>All compiled jsp files removed.");
+ pw.println("<br/>");
+ }
+ pw.print("<form action='");
+ pw.print(path);
+ pw.println("' method='POST'>");
+ pw.println("<input type='submit' value='Recompile all JSPs'>");
+ pw.println("</form>");
+ return;
+ }
+ }
+ throw new ServletException("Request not supported.");
+ }
}