📄 managerservlet.java
字号:
throw new UnavailableException
(sm.getString("managerServlet.cannotInvoke"));
// Identify the request parameters that we need
String command = request.getPathInfo();
if (command == null)
command = request.getServletPath();
String path = request.getParameter("path");
String tag = request.getParameter("tag");
boolean update = false;
if ((request.getParameter("update") != null)
&& (request.getParameter("update").equals("true"))) {
update = true;
}
// Prepare our output writer to generate the response message
response.setContentType("text/plain;charset="+Constants.CHARSET);
PrintWriter writer = response.getWriter();
// Process the requested command
if (command == null) {
writer.println(sm.getString("managerServlet.noCommand"));
} else if (command.equals("/deploy")) {
deploy(writer, path, tag, update, request);
} else {
writer.println(sm.getString("managerServlet.unknownCommand",
command));
}
// Finish up the response
writer.flush();
writer.close();
}
/**
* Initialize this servlet.
*/
public void init() throws ServletException {
// Ensure that our ContainerServlet properties have been set
if ((wrapper == null) || (context == null))
throw new UnavailableException
(sm.getString("managerServlet.noWrapper"));
// Verify that we were not accessed using the invoker servlet
String servletName = getServletConfig().getServletName();
if (servletName == null)
servletName = "";
if (servletName.startsWith("org.apache.catalina.INVOKER."))
throw new UnavailableException
(sm.getString("managerServlet.cannotInvoke"));
// Set our properties from the initialization parameters
String value = null;
try {
value = getServletConfig().getInitParameter("debug");
debug = Integer.parseInt(value);
} catch (Throwable t) {
;
}
// Acquire global JNDI resources if available
Server server = ServerFactory.getServer();
if ((server != null) && (server instanceof StandardServer)) {
global = ((StandardServer) server).getGlobalNamingContext();
}
// Calculate the directory into which we will be deploying applications
versioned = (File) getServletContext().getAttribute
("javax.servlet.context.tempdir");
// Identify the appBase of the owning Host of this Context
// (if any)
String appBase = ((Host) context.getParent()).getAppBase();
deployed = new File(appBase);
if (!deployed.isAbsolute()) {
deployed = new File(System.getProperty("catalina.base"),
appBase);
}
configBase = new File(System.getProperty("catalina.base"), "conf");
Container container = context;
Container host = null;
Container engine = null;
while (container != null) {
if (container instanceof Host)
host = container;
if (container instanceof Engine)
engine = container;
container = container.getParent();
}
if (engine != null) {
configBase = new File(configBase, engine.getName());
}
if (host != null) {
configBase = new File(configBase, host.getName());
}
// Note: The directory must exist for this to work.
// Log debugging messages as necessary
if (debug >= 1) {
log("init: Associated with Deployer '" +
oname + "'");
if (global != null) {
log("init: Global resources are available");
}
}
}
// -------------------------------------------------------- Private Methods
/**
* Store server configuration.
*
* @param path Optional context path to save
*/
protected synchronized void save(PrintWriter writer, String path) {
Server server = ServerFactory.getServer();
if (!(server instanceof StandardServer)) {
writer.println(sm.getString("managerServlet.saveFail", server));
return;
}
if ((path == null) || path.length() == 0 || !path.startsWith("/")) {
try {
((StandardServer) server).storeConfig();
writer.println(sm.getString("managerServlet.saved"));
} catch (Exception e) {
log("managerServlet.storeConfig", e);
writer.println(sm.getString("managerServlet.exception",
e.toString()));
return;
}
} else {
String contextPath = path;
if (path.equals("/")) {
contextPath = "";
}
Context context = (Context) host.findChild(contextPath);
if (context == null) {
writer.println(sm.getString("managerServlet.noContext", path));
return;
}
try {
((StandardServer) server).storeContext(context);
writer.println(sm.getString("managerServlet.savedContext",
path));
} catch (Exception e) {
log("managerServlet.save[" + path + "]", e);
writer.println(sm.getString("managerServlet.exception",
e.toString()));
return;
}
}
}
/**
* Deploy a web application archive (included in the current request)
* at the specified context path.
*
* @param writer Writer to render results to
* @param path Context path of the application to be installed
* @param tag Tag to be associated with the webapp
* @param request Servlet request we are processing
*/
protected synchronized void deploy
(PrintWriter writer, String path,
String tag, boolean update, HttpServletRequest request) {
if (debug >= 1) {
log("deploy: Deploying web application at '" + path + "'");
}
// Validate the requested context path
if ((path == null) || path.length() == 0 || !path.startsWith("/")) {
writer.println(sm.getString("managerServlet.invalidPath", path));
return;
}
String displayPath = path;
if( path.equals("/") )
path = "";
String basename = getDocBase(path);
// Check if app already exists, or undeploy it if updating
Context context = (Context) host.findChild(path);
if (update) {
if (context != null) {
undeploy(writer, displayPath);
}
context = (Context) host.findChild(path);
}
if (context != null) {
writer.println
(sm.getString("managerServlet.alreadyContext",
displayPath));
return;
}
// Calculate the base path
File deployedPath = deployed;
if (tag != null) {
deployedPath = new File(versioned, tag);
deployedPath.mkdirs();
}
// Upload the web application archive to a local WAR file
File localWar = new File(deployedPath, basename + ".war");
if (debug >= 2) {
log("Uploading WAR file to " + localWar);
}
// Copy WAR to appBase
try {
if (!isServiced(path)) {
addServiced(path);
try {
// Upload WAR
uploadWar(request, localWar);
// Copy WAR and XML to the host app base if needed
if (tag != null) {
deployedPath = deployed;
File localWarCopy = new File(deployedPath, basename + ".war");
copy(localWar, localWarCopy);
localWar = localWarCopy;
copy(localWar, new File(getAppBase(), basename + ".war"));
}
// Perform new deployment
check(path);
} finally {
removeServiced(path);
}
}
} catch (Exception e) {
log("managerServlet.check[" + displayPath + "]", e);
writer.println(sm.getString("managerServlet.exception",
e.toString()));
return;
}
context = (Context) host.findChild(path);
if (context != null && context.getConfigured()) {
writer.println(sm.getString("managerServlet.deployed", displayPath));
} else {
// Something failed
writer.println(sm.getString("managerServlet.deployFailed", displayPath));
}
}
/**
* Install an application for the specified path from the specified
* web application archive.
*
* @param writer Writer to render results to
* @param tag Revision tag to deploy from
* @param path Context path of the application to be installed
*/
protected void deploy(PrintWriter writer, String path, String tag) {
// Validate the requested context path
if ((path == null) || path.length() == 0 || !path.startsWith("/")) {
writer.println(sm.getString("managerServlet.invalidPath", path));
return;
}
String displayPath = path;
if( path.equals("/") )
path = "";
// Calculate the base path
File deployedPath = versioned;
if (tag != null) {
deployedPath = new File(deployedPath, tag);
}
// Find the local WAR file
File localWar = new File(deployedPath, getDocBase(path) + ".war");
// Find the local context deployment file (if any)
File localXml = new File(configBase, getConfigFile(path) + ".xml");
// Check if app already exists, or undeploy it if updating
Context context = (Context) host.findChild(path);
if (context != null) {
undeploy(writer, displayPath);
}
// Copy WAR to appBase
try {
if (!isServiced(path)) {
addServiced(path);
try {
copy(localWar, new File(getAppBase(), getDocBase(path) + ".war"));
// Perform new deployment
check(path);
} finally {
removeServiced(path);
}
}
} catch (Exception e) {
log("managerServlet.check[" + displayPath + "]", e);
writer.println(sm.getString("managerServlet.exception",
e.toString()));
return;
}
context = (Context) host.findChild(path);
if (context != null && context.getConfigured()) {
writer.println(sm.getString("managerServlet.deployed", displayPath));
} else {
// Something failed
writer.println(sm.getString("managerServlet.deployFailed", displayPath));
}
}
/**
* Install an application for the specified path from the specified
* web application archive.
*
* @param writer Writer to render results to
* @param config URL of the context configuration file to be installed
* @param path Context path of the application to be installed
* @param war URL of the web application archive to be installed
* @param update true to override any existing webapp on the path
*/
protected void deploy(PrintWriter writer, String config,
String path, String war, boolean update) {
if (config != null && config.length() == 0) {
config = null;
}
if (war != null && war.length() == 0) {
war = null;
}
if (debug >= 1) {
if (config != null && config.length() > 0) {
if (war != null) {
log("install: Installing context configuration at '" +
config + "' from '" + war + "'");
} else {
log("install: Installing context configuration at '" +
config + "'");
}
} else {
if (path != null && path.length() > 0) {
log("install: Installing web application at '" + path +
"' from '" + war + "'");
} else {
log("install: Installing web application from '" + war + "'");
}
}
}
if (path == null || path.length() == 0 || !path.startsWith("/")) {
writer.println(sm.getString("managerServlet.invalidPath",
RequestUtil.filter(path)));
return;
}
String displayPath = path;
if("/".equals(path)) {
path = "";
}
// Check if app already exists, or undeploy it if updating
Context context = (Context) host.findChild(path);
if (update) {
if (context != null) {
undeploy(writer, displayPath);
}
context = (Context) host.findChild(path);
}
if (context != null) {
writer.println
(sm.getString("managerServlet.alreadyContext",
displayPath));
return;
}
if (config != null && (config.startsWith("file:"))) {
config = config.substring("file:".length());
}
if (war != null && (war.startsWith("file:"))) {
war = war.substring("file:".length());
}
try {
if (!isServiced(path)) {
addServiced(path);
try {
if (config != null) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -