HTMLManagerServletpublic final class HTMLManagerServlet extends ManagerServlet Servlet that enables remote management of the web applications deployed
within the same virtual host as this web application is. Normally, this
functionality will be protected by a security constraint in the web
application deployment descriptor. However, this requirement can be
relaxed during testing.
The difference between the ManagerServlet and this
Servlet is that this Servlet prints out a HTML interface which
makes it easier to administrate.
However if you use a software that parses the output of
ManagerServlet you won't be able to upgrade
to this Servlet since the output are not in the
same format ar from ManagerServlet |
Fields Summary |
---|
protected static final String | APPLICATION_MESSAGE | protected static final String | APPLICATION_ERROR | protected String | sessionsListJspPath | protected String | sessionDetailJspPath | private static final String | APPS_HEADER_SECTION | private static final String | APPS_ROW_DETAILS_SECTION | private static final String | MANAGER_APP_ROW_BUTTON_SECTION | private static final String | STARTED_DEPLOYED_APPS_ROW_BUTTON_SECTION | private static final String | STOPPED_DEPLOYED_APPS_ROW_BUTTON_SECTION | private static final String | STARTED_NONDEPLOYED_APPS_ROW_BUTTON_SECTION | private static final String | STOPPED_NONDEPLOYED_APPS_ROW_BUTTON_SECTION | private static final String | DEPLOY_SECTION | private static final String | UPLOAD_SECTION |
Methods Summary |
---|
protected java.lang.String | deployInternal(java.lang.String config, java.lang.String path, java.lang.String war)Deploy an application for the specified path from the specified
web application archive.
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
super.deploy(printWriter, config, path, war, false);
return stringWriter.toString();
| protected void | displaySessionDetailPage(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse resp, java.lang.String path, java.lang.String sessionId)
Session session = getSessionForPathAndId(path, sessionId);
//strong>NOTE</strong> - This header will be overridden
// automatically if a <code>RequestDispatcher.forward()</code> call is
// ultimately invoked.
resp.setHeader("Pragma", "No-cache"); // HTTP 1.0
resp.setHeader("Cache-Control", "no-cache,no-store,max-age=0"); // HTTP 1.1
resp.setDateHeader("Expires", 0); // 0 means now
req.setAttribute("currentSession", session);
getServletContext().getRequestDispatcher(sessionDetailJspPath).include(req, resp);
| protected void | displaySessionsListPage(java.lang.String path, javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse resp)
List/*<Session>*/ activeSessions = Arrays.asList(getSessionsForPath(path));
String sortBy = req.getParameter("sort");
String orderBy = null;
if (null != sortBy && !"".equals(sortBy.trim())) {
Comparator comparator = getComparator(sortBy);
if (comparator != null) {
orderBy = req.getParameter("order");
if ("DESC".equalsIgnoreCase(orderBy)) {
comparator = new ReverseComparator(comparator);
// orderBy = "ASC";
} else {
//orderBy = "DESC";
}
try {
Collections.sort(activeSessions, comparator);
} catch (IllegalStateException ise) {
// at least 1 of the sessions is invalidated
req.setAttribute(APPLICATION_ERROR, "Can't sort session list: one session is invalidated");
}
} else {
log("WARNING: unknown sort order: " + sortBy);
}
}
// keep sort order
req.setAttribute("sort", sortBy);
req.setAttribute("order", orderBy);
req.setAttribute("activeSessions", activeSessions);
//strong>NOTE</strong> - This header will be overridden
// automatically if a <code>RequestDispatcher.forward()</code> call is
// ultimately invoked.
resp.setHeader("Pragma", "No-cache"); // HTTP 1.0
resp.setHeader("Cache-Control", "no-cache,no-store,max-age=0"); // HTTP 1.1
resp.setDateHeader("Expires", 0); // 0 means now
getServletContext().getRequestDispatcher(sessionsListJspPath).include(req, resp);
| public void | doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)Process a GET request for the specified resource.
// --------------------------------------------------------- Public Methods
// Identify the request parameters that we need
String command = request.getPathInfo();
String path = request.getParameter("path");
String deployPath = request.getParameter("deployPath");
String deployConfig = request.getParameter("deployConfig");
String deployWar = request.getParameter("deployWar");
// Prepare our output writer to generate the response message
response.setContentType("text/html; charset=" + Constants.CHARSET);
String message = "";
// Process the requested command
if (command == null || command.equals("/")) {
} else if (command.equals("/deploy")) {
message = deployInternal(deployConfig, deployPath, deployWar);
} else if (command.equals("/list")) {
} else if (command.equals("/reload")) {
message = reload(path);
} else if (command.equals("/undeploy")) {
message = undeploy(path);
} else if (command.equals("/expire")) {
message = expireSessions(path, request);
} else if (command.equals("/sessions")) {
try {
doSessions(path, request, response);
return;
} catch (Exception e) {
log("HTMLManagerServlet.sessions[" + path + "]", e);
message = sm.getString("managerServlet.exception",
e.toString());
}
} else if (command.equals("/start")) {
message = start(path);
} else if (command.equals("/stop")) {
message = stop(path);
} else {
message =
sm.getString("managerServlet.unknownCommand", command);
}
list(request, response, message);
| public void | doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)Process a POST request for the specified resource.
// Identify the request parameters that we need
String command = request.getPathInfo();
if (command == null || !command.equals("/upload")) {
doGet(request,response);
return;
}
// Prepare our output writer to generate the response message
response.setContentType("text/html; charset=" + Constants.CHARSET);
String message = "";
// Create a new file upload handler
DiskFileUpload upload = new DiskFileUpload();
// Get the tempdir
File tempdir = (File) getServletContext().getAttribute
("javax.servlet.context.tempdir");
// Set upload parameters
upload.setSizeMax(-1);
upload.setRepositoryPath(tempdir.getCanonicalPath());
// Parse the request
String basename = null;
String war = null;
FileItem warUpload = null;
try {
List items = upload.parseRequest(request);
// Process the uploaded fields
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (!item.isFormField()) {
if (item.getFieldName().equals("deployWar") &&
warUpload == null) {
warUpload = item;
} else {
item.delete();
}
}
}
while (true) {
if (warUpload == null) {
message = sm.getString
("htmlManagerServlet.deployUploadNoFile");
break;
}
war = warUpload.getName();
if (!war.toLowerCase().endsWith(".war")) {
message = sm.getString
("htmlManagerServlet.deployUploadNotWar",war);
break;
}
// Get the filename if uploaded name includes a path
if (war.lastIndexOf('\\") >= 0) {
war = war.substring(war.lastIndexOf('\\") + 1);
}
if (war.lastIndexOf('/") >= 0) {
war = war.substring(war.lastIndexOf('/") + 1);
}
// Identify the appBase of the owning Host of this Context
// (if any)
basename = war.substring(0, war.toLowerCase().indexOf(".war"));
File file = new File(getAppBase(), war);
if (file.exists()) {
message = sm.getString
("htmlManagerServlet.deployUploadWarExists",war);
break;
}
String path = null;
if (basename.equals("ROOT")) {
path = "";
} else {
path = "/" + basename;
}
if (!isServiced(path)) {
addServiced(path);
try {
warUpload.write(file);
// Perform new deployment
check(path);
} finally {
removeServiced(path);
}
}
break;
}
} catch(Exception e) {
message = sm.getString
("htmlManagerServlet.deployUploadFail", e.getMessage());
log(message, e);
} finally {
if (warUpload != null) {
warUpload.delete();
}
warUpload = null;
}
list(request, response, message);
| protected void | doSessions(java.lang.String path, javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse resp)
req.setAttribute("path", path);
String action = req.getParameter("action");
if (debug >= 1) {
log("sessions: Session action '" + action + "' for web application at '" + path + "'");
}
if ("sessionDetail".equals(action)) {
String sessionId = req.getParameter("sessionId");
displaySessionDetailPage(req, resp, path, sessionId);
return;
} else if ("invalidateSessions".equals(action)) {
String[] sessionIds = req.getParameterValues("sessionIds");
int i = invalidateSessions(path, sessionIds);
req.setAttribute(APPLICATION_MESSAGE, "" + i + " sessions invalidated.");
} else if ("removeSessionAttribute".equals(action)) {
String sessionId = req.getParameter("sessionId");
String name = req.getParameter("attributeName");
boolean removed = removeSessionAttribute(path, sessionId, name);
String outMessage = removed ? "Session attribute '" + name + "' removed." : "Session did not contain any attribute named '" + name + "'";
req.setAttribute(APPLICATION_MESSAGE, outMessage);
resp.sendRedirect(resp.encodeRedirectURL(req.getRequestURL().append("?path=").append(path).append("&action=sessionDetail&sessionId=").append(sessionId).toString()));
return;
} // else
displaySessionsListPage(path, req, resp);
| protected java.lang.String | expireSessions(java.lang.String path, javax.servlet.http.HttpServletRequest req)Extract the expiration request parameter
int idle = -1;
String idleParam = req.getParameter("idle");
if (idleParam != null) {
try {
idle = Integer.parseInt(idleParam);
} catch (NumberFormatException e) {
log("Could not parse idle parameter to an int: " + idleParam);
}
}
return sessions(path, idle);
| protected java.util.Comparator | getComparator(java.lang.String sortBy)
Comparator comparator = null;
if ("CreationTime".equalsIgnoreCase(sortBy)) {
comparator = new BaseSessionComparator() {
public Comparable getComparableObject(Session session) {
return new Date(session.getCreationTime());
}
};
} else if ("id".equalsIgnoreCase(sortBy)) {
comparator = new BaseSessionComparator() {
public Comparable getComparableObject(Session session) {
return session.getId();
}
};
} else if ("LastAccessedTime".equalsIgnoreCase(sortBy)) {
comparator = new BaseSessionComparator() {
public Comparable getComparableObject(Session session) {
return new Date(session.getLastAccessedTime());
}
};
} else if ("MaxInactiveInterval".equalsIgnoreCase(sortBy)) {
comparator = new BaseSessionComparator() {
public Comparable getComparableObject(Session session) {
return new Date(session.getMaxInactiveInterval());
}
};
} else if ("new".equalsIgnoreCase(sortBy)) {
comparator = new BaseSessionComparator() {
public Comparable getComparableObject(Session session) {
return Boolean.valueOf(session.getSession().isNew());
}
};
} else if ("locale".equalsIgnoreCase(sortBy)) {
comparator = new BaseSessionComparator() {
public Comparable getComparableObject(Session session) {
return JspHelper.guessDisplayLocaleFromSession(session);
}
};
} else if ("user".equalsIgnoreCase(sortBy)) {
comparator = new BaseSessionComparator() {
public Comparable getComparableObject(Session session) {
return JspHelper.guessDisplayUserFromSession(session);
}
};
} else if ("UsedTime".equalsIgnoreCase(sortBy)) {
comparator = new BaseSessionComparator() {
public Comparable getComparableObject(Session session) {
return new Date(SessionUtils.getUsedTimeForSession(session));
}
};
} else if ("InactiveTime".equalsIgnoreCase(sortBy)) {
comparator = new BaseSessionComparator() {
public Comparable getComparableObject(Session session) {
return new Date(SessionUtils.getInactiveTimeForSession(session));
}
};
} else if ("TTL".equalsIgnoreCase(sortBy)) {
comparator = new BaseSessionComparator() {
public Comparable getComparableObject(Session session) {
return new Date(SessionUtils.getTTLForSession(session));
}
};
}
//TODO: complete this to TTL, etc.
return comparator;
| public java.lang.String | getServletInfo()
return "HTMLManagerServlet, Copyright (c) The Apache Software Foundation";
| protected org.apache.catalina.Session | getSessionForPathAndId(java.lang.String path, java.lang.String id)
if ((path == null) || (!path.startsWith("/") && path.equals(""))) {
throw new IllegalArgumentException(sm.getString("managerServlet.invalidPath",
RequestUtil.filter(path)));
}
String displayPath = path;
if( path.equals("/") )
path = "";
Context context = (Context) host.findChild(path);
if (null == context) {
throw new IllegalArgumentException(sm.getString("managerServlet.noContext",
RequestUtil.filter(displayPath)));
}
Session session = context.getManager().findSession(id);
return session;
| protected org.apache.catalina.Session[] | getSessionsForPath(java.lang.String path)
if ((path == null) || (!path.startsWith("/") && path.equals(""))) {
throw new IllegalArgumentException(sm.getString("managerServlet.invalidPath",
RequestUtil.filter(path)));
}
String displayPath = path;
if( path.equals("/") )
path = "";
Context context = (Context) host.findChild(path);
if (null == context) {
throw new IllegalArgumentException(sm.getString("managerServlet.noContext",
RequestUtil.filter(displayPath)));
}
Session[] sessions = context.getManager().findSessions();
return sessions;
| public void | init()
super.init();
| public int | invalidateSessions(java.lang.String path, java.lang.String[] sessionIds)Invalidate HttpSessions
if (null == sessionIds) {
return 0;
}
int nbAffectedSessions = 0;
for (int i = 0; i < sessionIds.length; ++i) {
String sessionId = sessionIds[i];
HttpSession session = getSessionForPathAndId(path, sessionId).getSession();
if (null == session) {
// Shouldn't happen, but let's play nice...
if (debug >= 1) {
log("WARNING: can't invalidate null session " + sessionId);
}
continue;
}
try {
session.invalidate();
++nbAffectedSessions;
if (debug >= 1) {
log("Invalidating session id " + sessionId);
}
} catch (IllegalStateException ise) {
if (debug >= 1) {
log("Can't invalidate already invalidated session id " + sessionId);
}
}
}
return nbAffectedSessions;
| public void | list(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.String message)Render a HTML list of the currently active Contexts in our virtual host,
and memory and server status information.
if (debug >= 1)
log("list: Listing contexts for virtual host '" +
host.getName() + "'");
PrintWriter writer = response.getWriter();
// HTML Header Section
writer.print(Constants.HTML_HEADER_SECTION);
// Body Header Section
Object[] args = new Object[2];
args[0] = request.getContextPath();
args[1] = sm.getString("htmlManagerServlet.title");
writer.print(MessageFormat.format
(Constants.BODY_HEADER_SECTION, args));
// Message Section
args = new Object[3];
args[0] = sm.getString("htmlManagerServlet.messageLabel");
if (message == null || message.length() == 0) {
args[1] = "OK";
} else {
args[1] = RequestUtil.filter(message);
}
writer.print(MessageFormat.format(Constants.MESSAGE_SECTION, args));
// Manager Section
args = new Object[9];
args[0] = sm.getString("htmlManagerServlet.manager");
args[1] = response.encodeURL(request.getContextPath() + "/html/list");
args[2] = sm.getString("htmlManagerServlet.list");
args[3] = response.encodeURL
(request.getContextPath() + "/" +
sm.getString("htmlManagerServlet.helpHtmlManagerFile"));
args[4] = sm.getString("htmlManagerServlet.helpHtmlManager");
args[5] = response.encodeURL
(request.getContextPath() + "/" +
sm.getString("htmlManagerServlet.helpManagerFile"));
args[6] = sm.getString("htmlManagerServlet.helpManager");
args[7] = response.encodeURL
(request.getContextPath() + "/status");
args[8] = sm.getString("statusServlet.title");
writer.print(MessageFormat.format(Constants.MANAGER_SECTION, args));
// Apps Header Section
args = new Object[6];
args[0] = sm.getString("htmlManagerServlet.appsTitle");
args[1] = sm.getString("htmlManagerServlet.appsPath");
args[2] = sm.getString("htmlManagerServlet.appsName");
args[3] = sm.getString("htmlManagerServlet.appsAvailable");
args[4] = sm.getString("htmlManagerServlet.appsSessions");
args[5] = sm.getString("htmlManagerServlet.appsTasks");
writer.print(MessageFormat.format(APPS_HEADER_SECTION, args));
// Apps Row Section
// Create sorted map of deployed applications context paths.
Container children[] = host.findChildren();
String contextPaths[] = new String[children.length];
for (int i = 0; i < children.length; i++)
contextPaths[i] = children[i].getName();
TreeMap sortedContextPathsMap = new TreeMap();
for (int i = 0; i < contextPaths.length; i++) {
String displayPath = contextPaths[i];
sortedContextPathsMap.put(displayPath, contextPaths[i]);
}
String appsStart = sm.getString("htmlManagerServlet.appsStart");
String appsStop = sm.getString("htmlManagerServlet.appsStop");
String appsReload = sm.getString("htmlManagerServlet.appsReload");
String appsUndeploy = sm.getString("htmlManagerServlet.appsUndeploy");
String appsExpire = sm.getString("htmlManagerServlet.appsExpire");
Iterator iterator = sortedContextPathsMap.entrySet().iterator();
boolean isHighlighted = true;
boolean isDeployed = true;
String highlightColor = null;
while (iterator.hasNext()) {
// Bugzilla 34818, alternating row colors
isHighlighted = !isHighlighted;
if(isHighlighted) {
highlightColor = "#C3F3C3";
} else {
highlightColor = "#FFFFFF";
}
Map.Entry entry = (Map.Entry) iterator.next();
String displayPath = (String) entry.getKey();
String contextPath = (String) entry.getKey();
Context context = (Context) host.findChild(contextPath);
if (displayPath.equals("")) {
displayPath = "/";
}
if (context != null ) {
try {
isDeployed = isDeployed(contextPath);
} catch (Exception e) {
// Assume false on failure for safety
isDeployed = false;
}
args = new Object[6];
args[0] = displayPath;
args[1] = context.getDisplayName();
if (args[1] == null) {
args[1] = " ";
}
args[2] = new Boolean(context.getAvailable());
args[3] = response.encodeURL
(request.getContextPath() +
"/html/sessions?path=" + displayPath);
if (context.getManager() != null) {
args[4] = new Integer
(context.getManager().getActiveSessions());
} else {
args[4] = new Integer(0);
}
args[5] = highlightColor;
writer.print
(MessageFormat.format(APPS_ROW_DETAILS_SECTION, args));
args = new Object[14];
args[0] = response.encodeURL
(request.getContextPath() +
"/html/start?path=" + displayPath);
args[1] = appsStart;
args[2] = response.encodeURL
(request.getContextPath() +
"/html/stop?path=" + displayPath);
args[3] = appsStop;
args[4] = response.encodeURL
(request.getContextPath() +
"/html/reload?path=" + displayPath);
args[5] = appsReload;
args[6] = response.encodeURL
(request.getContextPath() +
"/html/undeploy?path=" + displayPath);
args[7] = appsUndeploy;
args[8] = response.encodeURL
(request.getContextPath() +
"/html/expire?path=" + displayPath);
args[9] = appsExpire;
args[10] = sm.getString("htmlManagerServlet.expire.explain");
args[11] = new Integer(context.getManager().getMaxInactiveInterval()/60);
args[12] = sm.getString("htmlManagerServlet.expire.unit");
args[13] = highlightColor;
if (context.getPath().equals(this.context.getPath())) {
writer.print(MessageFormat.format(
MANAGER_APP_ROW_BUTTON_SECTION, args));
} else if (context.getAvailable() && isDeployed) {
writer.print(MessageFormat.format(
STARTED_DEPLOYED_APPS_ROW_BUTTON_SECTION, args));
} else if (context.getAvailable() && !isDeployed) {
writer.print(MessageFormat.format(
STARTED_NONDEPLOYED_APPS_ROW_BUTTON_SECTION, args));
} else if (!context.getAvailable() && isDeployed) {
writer.print(MessageFormat.format(
STOPPED_DEPLOYED_APPS_ROW_BUTTON_SECTION, args));
} else {
writer.print(MessageFormat.format(
STOPPED_NONDEPLOYED_APPS_ROW_BUTTON_SECTION, args));
}
}
}
// Deploy Section
args = new Object[7];
args[0] = sm.getString("htmlManagerServlet.deployTitle");
args[1] = sm.getString("htmlManagerServlet.deployServer");
args[2] = response.encodeURL(request.getContextPath() + "/html/deploy");
args[3] = sm.getString("htmlManagerServlet.deployPath");
args[4] = sm.getString("htmlManagerServlet.deployConfig");
args[5] = sm.getString("htmlManagerServlet.deployWar");
args[6] = sm.getString("htmlManagerServlet.deployButton");
writer.print(MessageFormat.format(DEPLOY_SECTION, args));
args = new Object[4];
args[0] = sm.getString("htmlManagerServlet.deployUpload");
args[1] = response.encodeURL(request.getContextPath() + "/html/upload");
args[2] = sm.getString("htmlManagerServlet.deployUploadFile");
args[3] = sm.getString("htmlManagerServlet.deployButton");
writer.print(MessageFormat.format(UPLOAD_SECTION, args));
// Server Header Section
args = new Object[7];
args[0] = sm.getString("htmlManagerServlet.serverTitle");
args[1] = sm.getString("htmlManagerServlet.serverVersion");
args[2] = sm.getString("htmlManagerServlet.serverJVMVersion");
args[3] = sm.getString("htmlManagerServlet.serverJVMVendor");
args[4] = sm.getString("htmlManagerServlet.serverOSName");
args[5] = sm.getString("htmlManagerServlet.serverOSVersion");
args[6] = sm.getString("htmlManagerServlet.serverOSArch");
writer.print(MessageFormat.format
(Constants.SERVER_HEADER_SECTION, args));
// Server Row Section
args = new Object[6];
args[0] = ServerInfo.getServerInfo();
args[1] = System.getProperty("java.runtime.version");
args[2] = System.getProperty("java.vm.vendor");
args[3] = System.getProperty("os.name");
args[4] = System.getProperty("os.version");
args[5] = System.getProperty("os.arch");
writer.print(MessageFormat.format(Constants.SERVER_ROW_SECTION, args));
// HTML Tail Section
writer.print(Constants.HTML_TAIL_SECTION);
// Finish up the response
writer.flush();
writer.close();
| protected java.lang.String | reload(java.lang.String path)Reload the web application at the specified context path.
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
super.reload(printWriter, path);
return stringWriter.toString();
| public boolean | removeSessionAttribute(java.lang.String path, java.lang.String sessionId, java.lang.String attributeName)Removes an attribute from an HttpSession
HttpSession session = getSessionForPathAndId(path, sessionId).getSession();
if (null == session) {
// Shouldn't happen, but let's play nice...
if (debug >= 1) {
log("WARNING: can't remove attribute '" + attributeName + "' for null session " + sessionId);
}
return false;
}
boolean wasPresent = (null != session.getAttribute(attributeName));
try {
session.removeAttribute(attributeName);
} catch (IllegalStateException ise) {
if (debug >= 1) {
log("Can't remote attribute '" + attributeName + "' for invalidated session id " + sessionId);
}
}
return wasPresent;
| public java.lang.String | sessions(java.lang.String path, int idle)Display session information and invoke list.
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
super.sessions(printWriter, path, idle);
return stringWriter.toString();
| public java.lang.String | sessions(java.lang.String path)Display session information and invoke list.
return sessions(path, -1);
| public int | setSessionMaxInactiveInterval(java.lang.String path, java.lang.String sessionId, int maxInactiveInterval)Sets the maximum inactive interval (session timeout) an HttpSession
HttpSession session = getSessionForPathAndId(path, sessionId).getSession();
if (null == session) {
// Shouldn't happen, but let's play nice...
if (debug >= 1) {
log("WARNING: can't set timout for null session " + sessionId);
}
return 0;
}
try {
int oldMaxInactiveInterval = session.getMaxInactiveInterval();
session.setMaxInactiveInterval(maxInactiveInterval);
return oldMaxInactiveInterval;
} catch (IllegalStateException ise) {
if (debug >= 1) {
log("Can't set MaxInactiveInterval '" + maxInactiveInterval + "' for invalidated session id " + sessionId);
}
return 0;
}
| public java.lang.String | start(java.lang.String path)Start the web application at the specified context path.
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
super.start(printWriter, path);
return stringWriter.toString();
| protected java.lang.String | stop(java.lang.String path)Stop the web application at the specified context path.
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
super.stop(printWriter, path);
return stringWriter.toString();
| protected java.lang.String | undeploy(java.lang.String path)Undeploy the web application at the specified context path.
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
super.undeploy(printWriter, path);
return stringWriter.toString();
|
|