This commit is contained in:
2024-11-30 19:03:49 +08:00
commit 1e6763c160
3806 changed files with 737676 additions and 0 deletions

View File

@@ -0,0 +1,221 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.catalina.manager;
public class Constants {
public static final String Package = "org.apache.catalina.manager";
public static final String REL_EXTERNAL = "rel=\"noopener noreferrer\"";
public static final String HTML_HEADER_SECTION;
public static final String BODY_HEADER_SECTION;
public static final String MESSAGE_SECTION;
public static final String MANAGER_SECTION;
public static final String SERVER_HEADER_SECTION;
public static final String SERVER_ROW_SECTION;
public static final String HTML_TAIL_SECTION;
static {
HTML_HEADER_SECTION =
"<html>\n" +
"<head>\n" +
"<style>\n" +
org.apache.catalina.util.TomcatCSS.TOMCAT_CSS + "\n" +
" table {\n" +
" width: 100%;\n" +
" }\n" +
" td.page-title {\n" +
" text-align: center;\n" +
" vertical-align: top;\n" +
" font-family:sans-serif,Tahoma,Arial;\n" +
" font-weight: bold;\n" +
" background: white;\n" +
" color: black;\n" +
" }\n" +
" td.title {\n" +
" text-align: left;\n" +
" vertical-align: top;\n" +
" font-family:sans-serif,Tahoma,Arial;\n" +
" font-style:italic;\n" +
" font-weight: bold;\n" +
" background: #D2A41C;\n" +
" }\n" +
" td.header-left {\n" +
" text-align: left;\n" +
" vertical-align: top;\n" +
" font-family:sans-serif,Tahoma,Arial;\n" +
" font-weight: bold;\n" +
" background: #FFDC75;\n" +
" }\n" +
" td.header-center {\n" +
" text-align: center;\n" +
" vertical-align: top;\n" +
" font-family:sans-serif,Tahoma,Arial;\n" +
" font-weight: bold;\n" +
" background: #FFDC75;\n" +
" }\n" +
" td.row-left {\n" +
" text-align: left;\n" +
" vertical-align: middle;\n" +
" font-family:sans-serif,Tahoma,Arial;\n" +
" color: black;\n" +
" }\n" +
" td.row-center {\n" +
" text-align: center;\n" +
" vertical-align: middle;\n" +
" font-family:sans-serif,Tahoma,Arial;\n" +
" color: black;\n" +
" }\n" +
" td.row-right {\n" +
" text-align: right;\n" +
" vertical-align: middle;\n" +
" font-family:sans-serif,Tahoma,Arial;\n" +
" color: black;\n" +
" }\n" +
" TH {\n" +
" text-align: center;\n" +
" vertical-align: top;\n" +
" font-family:sans-serif,Tahoma,Arial;\n" +
" font-weight: bold;\n" +
" background: #FFDC75;\n" +
" }\n" +
" TD {\n" +
" text-align: center;\n" +
" vertical-align: middle;\n" +
" font-family:sans-serif,Tahoma,Arial;\n" +
" color: black;\n" +
" }\n" +
" form {\n" +
" margin: 1;\n" +
" }\n" +
" form.inline {\n" +
" display: inline;\n" +
" }\n" +
"</style>\n";
BODY_HEADER_SECTION =
"<title>{0}</title>\n" +
"</head>\n" +
"\n" +
"<body bgcolor=\"#FFFFFF\">\n" +
"\n" +
"<table cellspacing=\"4\" border=\"0\">\n" +
" <tr>\n" +
" <td colspan=\"2\">\n" +
" <a href=\"https://tomcat.apache.org/\" " + REL_EXTERNAL + ">\n" +
" <img border=\"0\" alt=\"The Tomcat Servlet/JSP Container\"\n" +
" align=\"left\" src=\"{0}/images/tomcat.gif\">\n" +
" </a>\n" +
" <a href=\"https://www.apache.org/\" " + REL_EXTERNAL + ">\n" +
" <img border=\"0\" alt=\"The Apache Software Foundation\" align=\"right\"\n" +
" src=\"{0}/images/asf-logo.svg\" style=\"width: 266px; height: 83px;\">\n" +
" </a>\n" +
" </td>\n" +
" </tr>\n" +
"</table>\n" +
"<hr size=\"1\" noshade=\"noshade\">\n" +
"<table cellspacing=\"4\" border=\"0\">\n" +
" <tr>\n" +
" <td class=\"page-title\" bordercolor=\"#000000\" " +
"align=\"left\" nowrap>\n" +
" <font size=\"+2\">{1}</font>\n" +
" </td>\n" +
" </tr>\n" +
"</table>\n" +
"<br>\n" +
"\n";
MESSAGE_SECTION =
"<table border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\n" +
" <tr>\n" +
" <td class=\"row-left\" width=\"10%\">" +
"<small><strong>{0}</strong></small>&nbsp;</td>\n" +
" <td class=\"row-left\"><pre>{1}</pre></td>\n" +
" </tr>\n" +
"</table>\n" +
"<br>\n" +
"\n";
MANAGER_SECTION =
"<table border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\n" +
"<tr>\n" +
" <td colspan=\"4\" class=\"title\">{0}</td>\n" +
"</tr>\n" +
" <tr>\n" +
" <td class=\"row-left\"><a href=\"{1}\">{2}</a></td>\n" +
" <td class=\"row-center\"><a href=\"{3}\" " + REL_EXTERNAL + ">{4}</a></td>\n" +
" <td class=\"row-center\"><a href=\"{5}\" " + REL_EXTERNAL + ">{6}</a></td>\n" +
" <td class=\"row-right\"><a href=\"{7}\">{8}</a></td>\n" +
" </tr>\n" +
"</table>\n" +
"<br>\n" +
"\n";
SERVER_HEADER_SECTION =
"<table border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\n" +
"<tr>\n" +
" <td colspan=\"8\" class=\"title\">{0}</td>\n" +
"</tr>\n" +
"<tr>\n" +
" <td class=\"header-center\"><small>{1}</small></td>\n" +
" <td class=\"header-center\"><small>{2}</small></td>\n" +
" <td class=\"header-center\"><small>{3}</small></td>\n" +
" <td class=\"header-center\"><small>{4}</small></td>\n" +
" <td class=\"header-center\"><small>{5}</small></td>\n" +
" <td class=\"header-center\"><small>{6}</small></td>\n" +
" <td class=\"header-center\"><small>{7}</small></td>\n" +
" <td class=\"header-center\"><small>{8}</small></td>\n" +
"</tr>\n";
SERVER_ROW_SECTION =
"<tr>\n" +
" <td class=\"row-center\"><small>{0}</small></td>\n" +
" <td class=\"row-center\"><small>{1}</small></td>\n" +
" <td class=\"row-center\"><small>{2}</small></td>\n" +
" <td class=\"row-center\"><small>{3}</small></td>\n" +
" <td class=\"row-center\"><small>{4}</small></td>\n" +
" <td class=\"row-center\"><small>{5}</small></td>\n" +
" <td class=\"row-center\"><small>{6}</small></td>\n" +
" <td class=\"row-center\"><small>{7}</small></td>\n" +
"</tr>\n" +
"</table>\n" +
"<br>\n" +
"\n";
HTML_TAIL_SECTION =
"<hr size=\"1\" noshade=\"noshade\">\n" +
"<center><font size=\"-1\" color=\"#525D76\">\n" +
" <em>Copyright &copy; 1999-2020, Apache Software Foundation</em>" +
"</font></center>\n" +
"\n" +
"</body>\n" +
"</html>";
}
public static final String CHARSET="utf-8";
public static final String XML_DECLARATION =
"<?xml version=\"1.0\" encoding=\""+CHARSET+"\"?>";
public static final String XML_STYLE =
"<?xml-stylesheet type=\"text/xsl\" href=\"{0}/xform.xsl\" ?>\n";
}

View File

@@ -0,0 +1,222 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.catalina.manager;
import java.security.Principal;
import java.util.Iterator;
import javax.servlet.http.HttpSession;
import org.apache.catalina.Manager;
import org.apache.catalina.Session;
import org.apache.catalina.SessionListener;
public class DummyProxySession implements Session {
private String sessionId;
public DummyProxySession(String sessionId) {
this.sessionId = sessionId;
}
@Override
public void access() {
// NOOP
}
@Override
public void addSessionListener(SessionListener listener) {
// NOOP
}
@Override
public void endAccess() {
// NOOP
}
@Override
public void expire() {
// NOOP
}
@Override
public String getAuthType() {
return null;
}
@Override
public long getCreationTime() {
return 0;
}
@Override
public long getCreationTimeInternal() {
return 0;
}
@Override
public String getId() {
return sessionId;
}
@Override
public String getIdInternal() {
return sessionId;
}
@Override
public long getLastAccessedTime() {
return 0;
}
@Override
public long getLastAccessedTimeInternal() {
return 0;
}
@Override
public long getIdleTime() {
return 0;
}
@Override
public long getIdleTimeInternal() {
return 0;
}
@Override
public Manager getManager() {
return null;
}
@Override
public int getMaxInactiveInterval() {
return 0;
}
@Override
public Object getNote(String name) {
return null;
}
@Override
public Iterator<String> getNoteNames() {
return null;
}
@Override
public Principal getPrincipal() {
return null;
}
@Override
public HttpSession getSession() {
return null;
}
@Override
public long getThisAccessedTime() {
return 0;
}
@Override
public long getThisAccessedTimeInternal() {
return 0;
}
@Override
public boolean isValid() {
return false;
}
@Override
public void recycle() {
// NOOP
}
@Override
public void removeNote(String name) {
// NOOP
}
@Override
public void removeSessionListener(SessionListener listener) {
// NOOP
}
@Override
public void setAuthType(String authType) {
// NOOP
}
@Override
public void setCreationTime(long time) {
// NOOP
}
@Override
public void setId(String id) {
this.sessionId = id;
}
@Override
public void setId(String id, boolean notify) {
this.sessionId = id;
// Ignore notify
}
@Override
public void setManager(Manager manager) {
// NOOP
}
@Override
public void setMaxInactiveInterval(int interval) {
// NOOP
}
@Override
public void setNew(boolean isNew) {
// NOOP
}
@Override
public void setNote(String name, Object value) {
// NOOP
}
@Override
public void setPrincipal(Principal principal) {
// NOOP
}
@Override
public void setValid(boolean isValid) {
// NOOP
}
@Override
public void tellChangedSessionId(String newId, String oldId,
boolean notifySessionListeners, boolean notifyContainerListeners) {
// NOOP
}
@Override
public boolean isAttributeDistributable(String name, Object value) {
return false;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,314 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.catalina.manager;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Set;
import javax.management.Attribute;
import javax.management.InstanceNotFoundException;
import javax.management.MBeanException;
import javax.management.MBeanInfo;
import javax.management.MBeanOperationInfo;
import javax.management.MBeanParameterInfo;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.management.OperationsException;
import javax.management.ReflectionException;
import javax.management.openmbean.CompositeData;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.catalina.mbeans.MBeanDumper;
import org.apache.catalina.tribes.util.StringManager;
import org.apache.tomcat.util.modeler.Registry;
/**
* This servlet will dump JMX attributes in a simple format and implement proxy
* services for modeler.
*
* @author Costin Manolache
*/
public class JMXProxyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
// Constant for "no parameters" when invoking a JMX operation
// without any parameters.
private static final String[] NO_PARAMETERS = new String[0];
private static final StringManager sm = StringManager.getManager(JMXProxyServlet.class);
// ----------------------------------------------------- Instance Variables
/**
* MBean server.
*/
protected transient MBeanServer mBeanServer = null;
protected transient Registry registry;
// --------------------------------------------------------- Public Methods
/**
* Initialize this servlet.
*/
@Override
public void init() throws ServletException {
// Retrieve the MBean server
registry = Registry.getRegistry(null, null);
mBeanServer = Registry.getRegistry(null, null).getMBeanServer();
}
/**
* Process a GET request for the specified resource.
*
* @param request The servlet request we are processing
* @param response The servlet response we are creating
*
* @exception IOException if an input/output error occurs
* @exception ServletException if a servlet-specified error occurs
*/
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
response.setContentType("text/plain");
// Stop older versions of IE thinking they know best. We set text/plain
// in the line above for a reason. IE's behaviour is unwanted at best
// and dangerous at worst.
response.setHeader("X-Content-Type-Options", "nosniff");
PrintWriter writer = response.getWriter();
if (mBeanServer == null) {
writer.println("Error - No mbean server");
return;
}
String qry = request.getParameter("set");
if (qry != null) {
String name = request.getParameter("att");
String val = request.getParameter("val");
setAttribute(writer, qry, name, val);
return;
}
qry = request.getParameter("get");
if (qry != null) {
String name = request.getParameter("att");
getAttribute(writer, qry, name, request.getParameter("key"));
return;
}
qry = request.getParameter("invoke");
if (qry != null) {
String opName = request.getParameter("op");
String[] params = getInvokeParameters(request.getParameter("ps"));
invokeOperation(writer, qry, opName, params);
return;
}
qry = request.getParameter("qry");
if (qry == null) {
qry = "*:*";
}
listBeans(writer, qry);
}
public void getAttribute(PrintWriter writer, String onameStr, String att, String key) {
try {
ObjectName oname = new ObjectName(onameStr);
Object value = mBeanServer.getAttribute(oname, att);
if (null != key && value instanceof CompositeData)
value = ((CompositeData) value).get(key);
String valueStr;
if (value != null) {
valueStr = value.toString();
} else {
valueStr = "<null>";
}
writer.print("OK - Attribute get '");
writer.print(onameStr);
writer.print("' - ");
writer.print(att);
if (null != key) {
writer.print(" - key '");
writer.print(key);
writer.print("'");
}
writer.print(" = ");
writer.println(MBeanDumper.escape(valueStr));
} catch (Exception ex) {
writer.println("Error - " + ex.toString());
ex.printStackTrace(writer);
}
}
public void setAttribute(PrintWriter writer, String onameStr, String att, String val) {
try {
setAttributeInternal(onameStr, att, val);
writer.println("OK - Attribute set");
} catch (Exception ex) {
writer.println("Error - " + ex.toString());
ex.printStackTrace(writer);
}
}
public void listBeans(PrintWriter writer, String qry) {
Set<ObjectName> names = null;
try {
names = mBeanServer.queryNames(new ObjectName(qry), null);
writer.println("OK - Number of results: " + names.size());
writer.println();
} catch (Exception ex) {
writer.println("Error - " + ex.toString());
ex.printStackTrace(writer);
return;
}
String dump = MBeanDumper.dumpBeans(mBeanServer, names);
writer.print(dump);
}
/**
* Determines if a type is supported by the {@link JMXProxyServlet}.
*
* @param type The type to check
* @return Always returns <code>true</code>
*/
public boolean isSupported(String type) {
return true;
}
private void invokeOperation(PrintWriter writer, String onameStr, String op,
String[] valuesStr) {
try {
Object retVal = invokeOperationInternal(onameStr, op, valuesStr);
if (retVal != null) {
writer.println("OK - Operation " + op + " returned:");
output("", writer, retVal);
} else {
writer.println("OK - Operation " + op + " without return value");
}
} catch (Exception ex) {
writer.println("Error - " + ex.toString());
ex.printStackTrace(writer);
}
}
/**
* Parses parameter values from a parameter string.
*
* @param paramString The string containing comma-separated
* operation-invocation parameters, or <code>null</code> if there
* are no parameters.
* @return An array of String parameters (empty array if
* <code>paramString</code> was <code>null</code>).
*/
private String[] getInvokeParameters(String paramString) {
if (paramString == null)
return NO_PARAMETERS;
else
return paramString.split(",");
}
/**
* Sets an MBean attribute's value.
*/
private void setAttributeInternal(String onameStr, String attributeName, String value)
throws OperationsException, MBeanException, ReflectionException {
ObjectName oname = new ObjectName(onameStr);
String type = registry.getType(oname, attributeName);
Object valueObj = registry.convertValue(type, value);
mBeanServer.setAttribute(oname, new Attribute(attributeName, valueObj));
}
/**
* Invokes an operation on an MBean.
*
* @param onameStr The name of the MBean.
* @param operation The name of the operation to invoke.
* @param parameters An array of Strings containing the parameters to the
* operation. They will be converted to the appropriate types to
* call the requested operation.
* @return The value returned by the requested operation.
*/
@SuppressWarnings("null") // parameters can't be null if signature.length > 0
private Object invokeOperationInternal(String onameStr, String operation, String[] parameters)
throws OperationsException, MBeanException, ReflectionException {
ObjectName oname = new ObjectName(onameStr);
int paramCount = null == parameters ? 0 : parameters.length;
MBeanOperationInfo methodInfo = registry.getMethodInfo(oname, operation, paramCount);
if(null == methodInfo) {
// getMethodInfo returns null for both "object not found" and "operation not found"
MBeanInfo info = null;
try {
info = registry.getMBeanServer().getMBeanInfo(oname);
} catch (InstanceNotFoundException infe) {
throw infe;
} catch (Exception e) {
throw new IllegalArgumentException(sm.getString("jmxProxyServlet.noBeanFound", onameStr), e);
}
throw new IllegalArgumentException(
sm.getString("jmxProxyServlet.noOperationOnBean",
operation, Integer.valueOf(paramCount), onameStr, info.getClassName()));
}
MBeanParameterInfo[] signature = methodInfo.getSignature();
String[] signatureTypes = new String[signature.length];
Object[] values = new Object[signature.length];
for (int i = 0; i < signature.length; i++) {
MBeanParameterInfo pi = signature[i];
signatureTypes[i] = pi.getType();
values[i] = registry.convertValue(pi.getType(), parameters[i]);
}
return mBeanServer.invoke(oname, operation, values, signatureTypes);
}
private void output(String indent, PrintWriter writer, Object result) {
if (result instanceof Object[]) {
for (Object obj : (Object[]) result) {
output(" " + indent, writer, obj);
}
} else {
String strValue;
if (result != null) {
strValue = result.toString();
} else {
strValue = "<null>";
}
writer.println(indent + strValue);
}
}
}

View File

@@ -0,0 +1,251 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.catalina.manager;
import java.text.DateFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import org.apache.catalina.Session;
import org.apache.catalina.manager.util.SessionUtils;
/**
* Helper JavaBean for JSPs, because JSTL 1.1/EL 2.0 is too dumb to
* to what I need (call methods with parameters), or I am too dumb to use it correctly. :)
* @author C&eacute;drik LIME
*/
public class JspHelper {
private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
/**
* Public constructor, so that this class can be considered a JavaBean
*/
private JspHelper() {
super();
}
/**
* Try to get user locale from the session, if possible.
* IMPLEMENTATION NOTE: this method has explicit support for Tapestry 3 and
* Struts 1.x
*
* @param in_session Session from which the locale should be guessed
*
* @return String
*/
public static String guessDisplayLocaleFromSession(Session in_session) {
return localeToString(SessionUtils.guessLocaleFromSession(in_session));
}
private static String localeToString(Locale locale) {
if (locale != null) {
return escapeXml(locale.toString());//locale.getDisplayName();
} else {
return "";
}
}
/**
* Try to get user name from the session, if possible.
* @param in_session The Servlet session
* @return the user name
*/
public static String guessDisplayUserFromSession(Session in_session) {
Object user = SessionUtils.guessUserFromSession(in_session);
return escapeXml(user);
}
public static String getDisplayCreationTimeForSession(Session in_session) {
try {
if (in_session.getCreationTime() == 0) {
return "";
}
DateFormat formatter = new SimpleDateFormat(DATE_TIME_FORMAT);
return formatter.format(new Date(in_session.getCreationTime()));
} catch (IllegalStateException ise) {
//ignore: invalidated session
return "";
}
}
public static String getDisplayLastAccessedTimeForSession(Session in_session) {
try {
if (in_session.getLastAccessedTime() == 0) {
return "";
}
DateFormat formatter = new SimpleDateFormat(DATE_TIME_FORMAT);
return formatter.format(new Date(in_session.getLastAccessedTime()));
} catch (IllegalStateException ise) {
//ignore: invalidated session
return "";
}
}
public static String getDisplayUsedTimeForSession(Session in_session) {
try {
if (in_session.getCreationTime() == 0) {
return "";
}
} catch (IllegalStateException ise) {
//ignore: invalidated session
return "";
}
return secondsToTimeString(SessionUtils.getUsedTimeForSession(in_session)/1000);
}
public static String getDisplayTTLForSession(Session in_session) {
try {
if (in_session.getCreationTime() == 0) {
return "";
}
} catch (IllegalStateException ise) {
//ignore: invalidated session
return "";
}
return secondsToTimeString(SessionUtils.getTTLForSession(in_session)/1000);
}
public static String getDisplayInactiveTimeForSession(Session in_session) {
try {
if (in_session.getCreationTime() == 0) {
return "";
}
} catch (IllegalStateException ise) {
//ignore: invalidated session
return "";
}
return secondsToTimeString(SessionUtils.getInactiveTimeForSession(in_session)/1000);
}
public static String secondsToTimeString(long in_seconds) {
StringBuilder buff = new StringBuilder(9);
if (in_seconds < 0) {
buff.append('-');
in_seconds = -in_seconds;
}
long rest = in_seconds;
long hour = rest / 3600;
rest = rest % 3600;
long minute = rest / 60;
rest = rest % 60;
long second = rest;
if (hour < 10) {
buff.append('0');
}
buff.append(hour);
buff.append(':');
if (minute < 10) {
buff.append('0');
}
buff.append(minute);
buff.append(':');
if (second < 10) {
buff.append('0');
}
buff.append(second);
return buff.toString();
}
/*
* Following copied from org.apache.taglibs.standard.tag.common.core.Util v1.1.2
*/
private static final int HIGHEST_SPECIAL = '>';
private static final char[][] specialCharactersRepresentation =
new char[HIGHEST_SPECIAL + 1][];
static {
specialCharactersRepresentation['&'] = "&amp;".toCharArray();
specialCharactersRepresentation['<'] = "&lt;".toCharArray();
specialCharactersRepresentation['>'] = "&gt;".toCharArray();
specialCharactersRepresentation['"'] = "&#034;".toCharArray();
specialCharactersRepresentation['\''] = "&#039;".toCharArray();
}
public static String escapeXml(Object obj) {
String value = null;
try {
value = (obj == null) ? null : obj.toString();
} catch (Exception e) {
// Ignore
}
return escapeXml(value);
}
/**
* Performs the following substring replacements
* (to facilitate output to XML/HTML pages):
*
* &amp; -&gt; &amp;amp;
* &lt; -&gt; &amp;lt;
* &gt; -&gt; &amp;gt;
* " -&gt; &amp;#034;
* ' -&gt; &amp;#039;
*
* See also OutSupport.writeEscapedXml().
* @param buffer The XML to escape
* @return the escaped XML
*/
@SuppressWarnings("null") // escapedBuffer cannot be null
public static String escapeXml(String buffer) {
if (buffer == null) {
return "";
}
int start = 0;
int length = buffer.length();
char[] arrayBuffer = buffer.toCharArray();
StringBuilder escapedBuffer = null;
for (int i = 0; i < length; i++) {
char c = arrayBuffer[i];
if (c <= HIGHEST_SPECIAL) {
char[] escaped = specialCharactersRepresentation[c];
if (escaped != null) {
// create StringBuilder to hold escaped xml string
if (start == 0) {
escapedBuffer = new StringBuilder(length + 5);
}
// add unescaped portion
if (start < i) {
escapedBuffer.append(arrayBuffer,start,i-start);
}
start = i + 1;
// add escaped xml
escapedBuffer.append(escaped);
}
}
}
// no xml escaping was necessary
if (start == 0) {
return buffer;
}
// add rest of unescaped portion
if (start < length) {
escapedBuffer.append(arrayBuffer,start,length-start);
}
return escapedBuffer.toString();
}
public static String formatNumber(long number) {
return NumberFormat.getNumberInstance().format(number);
}
}

View File

@@ -0,0 +1,182 @@
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
htmlManagerServlet.appsAvailable=Running
htmlManagerServlet.appsExpire=Expire sessions
htmlManagerServlet.appsName=Display Name
htmlManagerServlet.appsPath=Path
htmlManagerServlet.appsReload=Reload
htmlManagerServlet.appsSessions=Sessions
htmlManagerServlet.appsStart=Start
htmlManagerServlet.appsStop=Stop
htmlManagerServlet.appsTasks=Commands
htmlManagerServlet.appsTitle=Applications
htmlManagerServlet.appsUndeploy=Undeploy
htmlManagerServlet.appsVersion=Version
htmlManagerServlet.configReloadButton=Re-read
htmlManagerServlet.configSslHostName=TLS host name (optional)
htmlManagerServlet.configSslReloadTitle=Re-read TLS configuration files
htmlManagerServlet.configTitle=Configuration
htmlManagerServlet.connectorStateAliveSocketCount=Keep alive sockets count:
htmlManagerServlet.connectorStateBytesRecieved=Bytes received:
htmlManagerServlet.connectorStateBytesSent=Bytes sent:
htmlManagerServlet.connectorStateErrorCount=Error count:
htmlManagerServlet.connectorStateHint=P: Parse and prepare request S: Service F: Finishing R: Ready K: Keepalive
htmlManagerServlet.connectorStateMaxProcessingTime=Max processing time:
htmlManagerServlet.connectorStateMaxThreads=Max threads:
htmlManagerServlet.connectorStateProcessingTime=Processing time:
htmlManagerServlet.connectorStateRequestCount=Request count:
htmlManagerServlet.connectorStateTableTitleBRecv=Bytes Recv
htmlManagerServlet.connectorStateTableTitleBSent=Bytes Sent
htmlManagerServlet.connectorStateTableTitleClientAct=Client (Actual)
htmlManagerServlet.connectorStateTableTitleClientForw=Client (Forwarded)
htmlManagerServlet.connectorStateTableTitleRequest=Request
htmlManagerServlet.connectorStateTableTitleStage=Stage
htmlManagerServlet.connectorStateTableTitleTime=Time
htmlManagerServlet.connectorStateTableTitleVHost=VHost
htmlManagerServlet.connectorStateThreadBusy=Current threads busy:
htmlManagerServlet.connectorStateThreadCount=Current thread count:
htmlManagerServlet.deployButton=Deploy
htmlManagerServlet.deployConfig=XML Configuration file path:
htmlManagerServlet.deployPath=Context Path (required):
htmlManagerServlet.deployServer=Deploy directory or WAR file located on server
htmlManagerServlet.deployTitle=Deploy
htmlManagerServlet.deployUpload=WAR file to deploy
htmlManagerServlet.deployUploadFail=FAIL - Deploy Upload Failed, Exception: [{0}]
htmlManagerServlet.deployUploadFile=Select WAR file to upload
htmlManagerServlet.deployUploadInServerXml=FAIL - War file [{0}] cannot be uploaded if context is defined in server.xml
htmlManagerServlet.deployUploadNoFile=FAIL - File upload failed, no file
htmlManagerServlet.deployUploadNotWar=FAIL - File uploaded [{0}] must be a .war
htmlManagerServlet.deployUploadWarExists=FAIL - War file [{0}] already exists on server
htmlManagerServlet.deployWar=WAR or Directory path:
htmlManagerServlet.diagnosticsLeak=Check to see if a web application has caused a memory leak on stop, reload or undeploy
htmlManagerServlet.diagnosticsLeakButton=Find leaks
htmlManagerServlet.diagnosticsLeakWarning=This diagnostic check will trigger a full garbage collection. Use it with extreme caution on production systems.
htmlManagerServlet.diagnosticsSsl=TLS connector configuration diagnostics
htmlManagerServlet.diagnosticsSslConnectorCertsButton=Certificates
htmlManagerServlet.diagnosticsSslConnectorCertsText=List the configured TLS virtual hosts and the certificate chain for each.
htmlManagerServlet.diagnosticsSslConnectorCipherButton=Ciphers
htmlManagerServlet.diagnosticsSslConnectorCipherText=List the configured TLS virtual hosts and the ciphers for each.
htmlManagerServlet.diagnosticsSslConnectorTrustedCertsButton=Trusted Certificates
htmlManagerServlet.diagnosticsSslConnectorTrustedCertsText=List the configured TLS virtual hosts and the trusted certificates for each.
htmlManagerServlet.diagnosticsTitle=Diagnostics
htmlManagerServlet.expire.explain=with idle &ge;
htmlManagerServlet.expire.unit=minutes
htmlManagerServlet.findleaksList=The following web applications were stopped (reloaded, undeployed), but their\n\
classes from previous runs are still loaded in memory, thus causing a memory\n\
leak (use a profiler to confirm):\n
htmlManagerServlet.findleaksNone=No web applications appear to have triggered a memory leak on stop, reload or undeploy.
htmlManagerServlet.helpHtmlManager=HTML Manager Help
htmlManagerServlet.helpHtmlManagerFile=../docs/html-manager-howto.html
htmlManagerServlet.helpManager=Manager Help
htmlManagerServlet.helpManagerFile=../docs/manager-howto.html
htmlManagerServlet.jvmFreeMemory=Free Memory:
htmlManagerServlet.jvmMaxMemory=Max Memory:
htmlManagerServlet.jvmTableTitleInitial=Initial
htmlManagerServlet.jvmTableTitleMaximum=Maximum
htmlManagerServlet.jvmTableTitleMemoryPool=Memory Pool
htmlManagerServlet.jvmTableTitleTotal=Total
htmlManagerServlet.jvmTableTitleType=Type
htmlManagerServlet.jvmTableTitleUsed=Used
htmlManagerServlet.jvmTotalMemory=Total Memory:
htmlManagerServlet.list=List Applications
htmlManagerServlet.manager=Manager
htmlManagerServlet.messageLabel=Message:
htmlManagerServlet.noManager=-
htmlManagerServlet.noVersion=None specified
htmlManagerServlet.osAvailableMemory=Available memory:
htmlManagerServlet.osFreePageFile=Free page file:
htmlManagerServlet.osKernelTime=Process kernel time:
htmlManagerServlet.osMemoryLoad=Memory load:
htmlManagerServlet.osPhysicalMemory=Physical memory:
htmlManagerServlet.osTotalPageFile=Total page file:
htmlManagerServlet.osUserTime=Process user time:
htmlManagerServlet.serverHostname=Hostname
htmlManagerServlet.serverIPAddress=IP Address
htmlManagerServlet.serverJVMVendor=JVM Vendor
htmlManagerServlet.serverJVMVersion=JVM Version
htmlManagerServlet.serverOSArch=OS Architecture
htmlManagerServlet.serverOSName=OS Name
htmlManagerServlet.serverOSVersion=OS Version
htmlManagerServlet.serverTitle=Server Information
htmlManagerServlet.serverVersion=Tomcat Version
htmlManagerServlet.title=Tomcat Web Application Manager
managerServlet.alreadyContext=FAIL - Application already exists at path [{0}]
managerServlet.certsNotAvailable=Certificate information cannot be obtained from this connector at runtime
managerServlet.deleteFail=FAIL - Unable to delete [{0}]. The continued presence of this file may cause problems.
managerServlet.deployFailed=FAIL - Failed to deploy application at context path [{0}]
managerServlet.deployed=OK - Deployed application at context path [{0}]
managerServlet.deployedButNotStarted=FAIL - Deployed application at context path [{0}] but context failed to start
managerServlet.exception=FAIL - Encountered exception [{0}]
managerServlet.findleaksFail=FAIL - Find leaks failed: Host not instance of StandardHost
managerServlet.findleaksList=OK - Found potential memory leaks in the following applications:
managerServlet.findleaksNone=OK - No memory leaks found
managerServlet.inService=FAIL - The application [{0}] is already being serviced
managerServlet.invalidCommand=FAIL - Invalid parameters supplied for command [{0}]
managerServlet.invalidPath=FAIL - Invalid context path [{0}] was specified
managerServlet.listed=OK - Listed applications for virtual host [{0}]
managerServlet.listitem={0}:{1}:{2}:{3}
managerServlet.mkdirFail=FAIL - Unable to create directory [{0}]
managerServlet.noCommand=FAIL - No command was specified
managerServlet.noContext=FAIL - No context exists named [{0}]
managerServlet.noGlobal=FAIL - No global JNDI resources are available
managerServlet.noManager=FAIL - No manager exists for path [{0}]
managerServlet.noSelf=FAIL - The manager cannot reload, undeploy, stop, or undeploy itself
managerServlet.noWrapper=Container has not called setWrapper() for this servlet
managerServlet.notDeployed=FAIL - Context [{0}] is defined in server.xml and may not be undeployed
managerServlet.notSslConnector=SSL is not enabled for this connector
managerServlet.objectNameFail=FAIL - Unable to register object name [{0}] for Manager Servlet
managerServlet.postCommand=FAIL - Tried to use command [{0}] via a GET request but POST is required
managerServlet.reloaded=OK - Reloaded application at context path [{0}]
managerServlet.renameFail=FAIL - Unable to rename [{0}] to [{1}]. This may cause problems for future deployments.
managerServlet.resourcesAll=OK - Listed global resources of all types
managerServlet.resourcesType=OK - Listed global resources of type [{0}]
managerServlet.saveFail=FAIL - Configuration save failed: [{0}]
managerServlet.saved=OK - Server configuration saved
managerServlet.savedContext=OK - Context [{0}] configuration saved
managerServlet.serverInfo=OK - Server info\n\
Tomcat Version: [{0}]\n\
OS Name: [{1}]\n\
OS Version: [{2}]\n\
OS Architecture: [{3}]\n\
JVM Version: [{4}]\n\
JVM Vendor: [{5}]
managerServlet.sessiondefaultmax=Default maximum session inactive interval is [{0}] minutes
managerServlet.sessions=OK - Session information for application at context path [{0}]
managerServlet.sessiontimeout=Inactive for [{0}] minutes: [{1}] sessions
managerServlet.sessiontimeout.expired=Inactive for [{0}] minutes: [{1}] sessions were expired
managerServlet.sessiontimeout.unlimited=Unlimited time: [{0}] sessions
managerServlet.sslConnectorCerts=OK - Connector / Certificate Chain information
managerServlet.sslConnectorCiphers=OK - Connector / SSL Cipher information
managerServlet.sslConnectorTrustedCerts=OK - Connector / Trusted Certificate information
managerServlet.sslReload=OK - Reloaded TLS configuration for [{0}]
managerServlet.sslReloadAll=OK - Reloaded TLS configuration for all TLS virtual hosts
managerServlet.sslReloadFail=FAIL - Failed to reload TLS configuration
managerServlet.startFailed=FAIL - Application at context path [{0}] could not be started
managerServlet.started=OK - Started application at context path [{0}]
managerServlet.stopped=OK - Stopped application at context path [{0}]
managerServlet.storeConfig.noMBean=FAIL - No StoreConfig MBean registered at [{0}]. Registration is typically performed by the StoreConfigLifecycleListener.
managerServlet.threaddump=OK - JVM thread dump
managerServlet.trustedCertsNotConfigured=No trusted certificates are configured for this virtual host
managerServlet.undeployed=OK - Undeployed application at context path [{0}]
managerServlet.unknownCommand=FAIL - Unknown command [{0}]
managerServlet.vminfo=OK - VM info
statusServlet.complete=Complete Server Status
statusServlet.title=Server Status
jmxProxyServlet.noOperationOnBean=Cannot find operation [{0}] with [{1}] arguments on object name [{2}], which is a [{3}]
jmxProxyServlet.noBeanFound=Cannot find MBean with object name [{0}]

View File

@@ -0,0 +1,97 @@
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
htmlManagerServlet.appsAvailable=gestartet
htmlManagerServlet.appsExpire=Lösche Sitzungen
htmlManagerServlet.appsName=Anzeigename
htmlManagerServlet.appsPath=Kontext Pfad
htmlManagerServlet.appsReload=Neu laden
htmlManagerServlet.appsSessions=Sitzungen
htmlManagerServlet.appsStart=Start
htmlManagerServlet.appsStop=Stop
htmlManagerServlet.appsTasks=Kommandos
htmlManagerServlet.appsTitle=Anwendungen
htmlManagerServlet.appsUndeploy=Entfernen
htmlManagerServlet.connectorStateProcessingTime=Verarbeitungszeit:
htmlManagerServlet.connectorStateTableTitleRequest=Anfrage
htmlManagerServlet.connectorStateTableTitleVHost=VHost
htmlManagerServlet.deployButton=Installieren
htmlManagerServlet.deployConfig=XML Konfigurationsdatei URL:
htmlManagerServlet.deployPath=Kontext Pfad (optional):
htmlManagerServlet.deployServer=Verzeichnis oder WAR Datei auf Server installieren
htmlManagerServlet.deployTitle=Installieren
htmlManagerServlet.deployUpload=Lokale WAR Datei zur Installation hochladen
htmlManagerServlet.deployUploadFail=FEHLER - Hochladen zur Installation fehlgeschlagen, Ausnahme: [{0}]
htmlManagerServlet.deployUploadFile=WAR Datei auswählen
htmlManagerServlet.deployUploadNoFile=FEHLER - Hochladen fehlgeschlagen, keine Datei vorhanden
htmlManagerServlet.deployUploadNotWar=FEHLER - Hochgeladene Datei [{0}] muss ein .war sein
htmlManagerServlet.deployUploadWarExists=FEHLER - WAR Datei [{0}] existiert bereits auf Server
htmlManagerServlet.deployWar=WAR oder Verzeichnis URL:
htmlManagerServlet.diagnosticsSslConnectorCertsButton=Zertifikate
htmlManagerServlet.diagnosticsSslConnectorCertsText=Liste die konfigurierten TLS Virtual Hosts und deren Zertifikats-Ketten.
htmlManagerServlet.diagnosticsSslConnectorTrustedCertsButton=Vertrauenswürdige Zertifikate
htmlManagerServlet.expire.explain=mit Inaktivität &ge;
htmlManagerServlet.expire.unit=Minuten
htmlManagerServlet.helpHtmlManager=Hilfeseite HTML Manager (englisch)
htmlManagerServlet.helpHtmlManagerFile=../docs/html-manager-howto.html
htmlManagerServlet.helpManager=Hilfeseite Manager (englisch)
htmlManagerServlet.helpManagerFile=../docs/manager-howto.html
htmlManagerServlet.jvmFreeMemory=Freier Speicher:
htmlManagerServlet.jvmTableTitleMaximum=Maximum
htmlManagerServlet.jvmTableTitleType=Typ
htmlManagerServlet.list=Anwendungen auflisten
htmlManagerServlet.manager=Manager
htmlManagerServlet.messageLabel=Nachricht:
htmlManagerServlet.noManager=-
htmlManagerServlet.serverIPAddress=IP-Adresse
htmlManagerServlet.serverJVMVendor=JVM Hersteller
htmlManagerServlet.serverJVMVersion=JVM Version
htmlManagerServlet.serverOSArch=OS Architektur
htmlManagerServlet.serverOSName=OS Name
htmlManagerServlet.serverOSVersion=OS Version
htmlManagerServlet.serverTitle=Server Informationen
htmlManagerServlet.serverVersion=Tomcat Version
htmlManagerServlet.title=Tomcat Webanwendungs-Manager
managerServlet.alreadyContext=FEHLER - Anwendung existiert bereits für Kontext Pfad [{0}]
managerServlet.deployed=OK - Anwendung mit Kontext Pfad [{0}] installiert
managerServlet.exception=FEHLER - Ausnahme aufgetreten [{0}]
managerServlet.invalidPath=FEHLER - Ungültiger Kontext Pfad [{0}] angegeben
managerServlet.listed=OK - Auflistung der Webanwendungen für virtuellen Server [{0}]
managerServlet.listitem={0}:{1}:{2}:{3}
managerServlet.mkdirFail=Fehler - Das Verzeichnis [{0}] konnte nicht erstellt werden.
managerServlet.noCommand=FEHLER - Es wurde kein Kommando angegeben
managerServlet.noContext=FEHLER - Es existiert kein Kontext für Pfad [{0}]
managerServlet.noGlobal=FEHLER - Keine globalen JNDI Ressourcen verfügbar
managerServlet.noSelf=FEHLER - Manager-Kommandos können nicht auf die Manager-Anwendung selbst angewendet werden
managerServlet.noWrapper=Container hat setWrapper() für dieses Servlet nicht aufgerufen
managerServlet.reloaded=OK - Anwendung mit Kontext Pfad [{0}] neu geladen
managerServlet.resourcesAll=OK - Auflistung globaler Ressourcen (alle Typen)
managerServlet.resourcesType=OK - Auflistung globaler Ressourcen von Typ [{0}]
managerServlet.saveFail=FEHLER - Speichern der Konfiguration fehlgeschlagen: [{0}]
managerServlet.sessiondefaultmax=Voreingestellter Sitzungsablauf nach maximal [{0}] Minuten Inaktivität
managerServlet.sessions=OK - Sitzungs-Informationen für Anwendung mit Kontext Pfad [{0}]
managerServlet.sessiontimeout=Inaktiv für [{0}] Minuten: [{1}] Sitzungen
managerServlet.sessiontimeout.expired=Inaktiv für [{0}] Minuten: [{1}] Sitzungen sind abgelaufen
managerServlet.sessiontimeout.unlimited=unlimited Minuten: [{0}] Sitzungen
managerServlet.startFailed=FEHLER - Anwendung mit Kontext Pfad [{0}] konnte nicht gestartet werden
managerServlet.started=OK - Anwendung mit Kontext Pfad [{0}] gestartet
managerServlet.stopped=OK - Anwendung mit Kontext Pfad [{0}] gestoppt
managerServlet.trustedCertsNotConfigured=Für diesen virtuellen Host wurden keine vertrauenswürdige Zertifikate konfiguriert
managerServlet.undeployed=OK - Anwendung mit Kontext Pfad [{0}] entfernt
managerServlet.unknownCommand=FEHLER - Unbekanntes Kommando [{0}]
statusServlet.complete=Ausführlicher Server Status
statusServlet.title=Server Status

View File

@@ -0,0 +1,120 @@
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
htmlManagerServlet.appsAvailable=Ejecutándose
htmlManagerServlet.appsExpire=Expirar sesiones
htmlManagerServlet.appsName=Nombre a Mostrar
htmlManagerServlet.appsPath=Ruta
htmlManagerServlet.appsReload=Recargar
htmlManagerServlet.appsSessions=Sesiones
htmlManagerServlet.appsStart=Arrancar
htmlManagerServlet.appsStop=Parar
htmlManagerServlet.appsTasks=Comandos
htmlManagerServlet.appsTitle=Aplicaciones
htmlManagerServlet.appsUndeploy=Replegar
htmlManagerServlet.appsVersion=Versión
htmlManagerServlet.connectorStateProcessingTime=Tiempo de procesamiento:
htmlManagerServlet.connectorStateTableTitleRequest=Solicitud
htmlManagerServlet.connectorStateTableTitleVHost=VHost
htmlManagerServlet.deployButton=Desplegar
htmlManagerServlet.deployConfig=URL de archivo de Configuración XML:
htmlManagerServlet.deployPath=Trayectoria de Contexto (opcional):
htmlManagerServlet.deployServer=Desplegar directorio o archivo WAR localizado en servidor
htmlManagerServlet.deployTitle=Desplegar
htmlManagerServlet.deployUpload=Archivo WAR a desplegar
htmlManagerServlet.deployUploadFail=FALLO - Falló Carga de Despliegue, Excepción: [{0}]
htmlManagerServlet.deployUploadFile=Seleccione archivo WAR a cargar
htmlManagerServlet.deployUploadInServerXml=FALLO - El fichero war [{0}] no se puede cargar si se define el contexto en server.xml
htmlManagerServlet.deployUploadNoFile=FALLO - Falló la carga del fichero, no hay fichero
htmlManagerServlet.deployUploadNotWar=FALLO - El fichero cargado [{0}] debe de ser un .war
htmlManagerServlet.deployUploadWarExists=FALLO - El fichero war [{0}] ya existe en el servidor
htmlManagerServlet.deployWar=URL de WAR o Directorio:
htmlManagerServlet.diagnosticsLeak=Revisa a ver si una aplicación web ha causado fallos de memoria al parar, recargar o replegarse.
htmlManagerServlet.diagnosticsLeakButton=Halla fallos de memoria
htmlManagerServlet.diagnosticsLeakWarning=Este chequeo de diagnóstico disparará una colección completa de basura. Utilízalo con extremo cuidado en sistemas en producción.
htmlManagerServlet.diagnosticsSslConnectorCertsText=Lista los virtual hosts configurados con TLS y la cadena de ceritifaco para cada uno de ellos.\n
htmlManagerServlet.diagnosticsSslConnectorCipherButton=Cifrados
htmlManagerServlet.diagnosticsTitle=Diagnósticos
htmlManagerServlet.expire.explain=sin trabajar &ge;
htmlManagerServlet.expire.unit=minutos
htmlManagerServlet.findleaksList=Las siguientes aplicaciones web fueron paradas (recargadas, replegadas), pero sus clases de las ejecuciones previas aún se encuentran en memoria, causando así un fallo de memoria (usa un perfilador para confirmarlo):
htmlManagerServlet.findleaksNone=No parece haber aplicaciones web que hayan disparado un fallo de memoria al ser paradas, recargadas o replegadas.
htmlManagerServlet.helpHtmlManager=Ayuda HTML de Gestor
htmlManagerServlet.helpHtmlManagerFile=../docs/html-manager-howto.html
htmlManagerServlet.helpManager=Ayuda de Gestor
htmlManagerServlet.helpManagerFile=../docs/manager-howto.html
htmlManagerServlet.jvmFreeMemory=Memoria disponible:
htmlManagerServlet.jvmTableTitleMemoryPool=Pool de Memoria
htmlManagerServlet.list=Listar Aplicaciones
htmlManagerServlet.manager=Gestor
htmlManagerServlet.messageLabel=Mensaje:
htmlManagerServlet.noManager=-
htmlManagerServlet.noVersion=Ninguno especificado
htmlManagerServlet.osTotalPageFile=Tamaño total de archivo de página:
htmlManagerServlet.serverHostname=NombreDeMáquina
htmlManagerServlet.serverIPAddress=Dirección IP
htmlManagerServlet.serverJVMVendor=Vendedor JVM
htmlManagerServlet.serverJVMVersion=Versión JVM
htmlManagerServlet.serverOSArch=Arquitectura de SO
htmlManagerServlet.serverOSName=Nombre del SO
htmlManagerServlet.serverOSVersion=Versión de SO
htmlManagerServlet.serverTitle=Información de Servidor
htmlManagerServlet.serverVersion=Versión de Tomcat
htmlManagerServlet.title=Gestor de Aplicaciones Web de Tomcat
managerServlet.alreadyContext=FALLO - Ya existe la aplicación en la trayectoria [{0}]
managerServlet.deleteFail=FALLO - No pude borrar [{0}]. La presencia continua de este fichero puede causar problemas.
managerServlet.deployFailed=FALLO - No pude desplegar la aplicación en ruta de contexto [{0}]
managerServlet.deployed=OK - Desplegada aplicación en trayectoria de contexto [{0}]
managerServlet.deployedButNotStarted=FALLO - Apliación desplegada en la ruta de contexto [{0}], pero el contexto no pudo arrancar
managerServlet.exception=FALLO - Encontrada excepción [{0}]
managerServlet.findleaksFail=FALLO - Ha fallado la búsqueda de fallos: La Máquina no es una instancia de StandardHost
managerServlet.findleaksList=OK - Hallados fallos potenciales de memoria en las siguientes aplicaciones:
managerServlet.findleaksNone=OK - No se han hallado fallos de memoria
managerServlet.invalidCommand=Fallo - Se proveiron parámetros inválidos para el comando [{0}]
managerServlet.invalidPath=FALLO - Se ha especificado una trayectoria inválida de contexto [{0}]
managerServlet.listed=OK - Aplicaciones listadas para máquina virtual [{0}]
managerServlet.listitem={0}:{1}:{2}:{3}
managerServlet.mkdirFail=FALLO - No pude crear directorio [{0}]
managerServlet.noCommand=FALLO - No se ha especificado comando
managerServlet.noContext=FALLO - No existe contexto para trayectoria [{0}]
managerServlet.noGlobal=FALLO - No hay disponibles recursos globales JNDI
managerServlet.noManager=FALLO - No existe gestor para ruta [{0}]
managerServlet.noSelf=FALLO - El gestor no puede recargarse, replegarse, pararse o replegarse a sí mismo
managerServlet.noWrapper=El Contenedor no ha llamado a setWrapper() para este servlet
managerServlet.notDeployed=FALLO - El contexto [{0}] está definido en server.xml y puede que no esté desplegado
managerServlet.objectNameFail=FALLO - No pude registrar objeto de nombre [{0}] para Gestor de Servlet
managerServlet.postCommand=FALLO - Intenté usar el comando [{0}] vía un requerimiento GET pero se necesita POST
managerServlet.reloaded=OK - Recargada aplicación en trayectoria de contexto [{0}]
managerServlet.resourcesAll=OK - Listados recursos globales de todos los tipos
managerServlet.resourcesType=OK - Listados recursos globales de tipo [{0}]
managerServlet.saveFail=FAIL - Fallo al guardar la configuración: [{0}]
managerServlet.saved=OK - Configuración de Servidor guardada
managerServlet.savedContext=OK - Configuración de Contexto [{0}] guardada
managerServlet.sessiondefaultmax=Intervalo máximo por defecto de sesión inactiva [{0}] minutos
managerServlet.sessions=OK - Información de sesión para aplicación en trayectoria de contexto [{0}]
managerServlet.sessiontimeout=[{0}] minutos: [{1}] sesiones
managerServlet.sessiontimeout.expired=[{0}] minutos: expired [{1}] sesiones
managerServlet.sessiontimeout.unlimited=unlimited minutos: [{0}] sesiones
managerServlet.sslConnectorCiphers=OK - Connector / Información cifrada con SSL
managerServlet.startFailed=FALLO - No se pudo arrancar la aplicación en trayectoria de contexto [{0}]
managerServlet.started=OK - Arrancada aplicación en trayectoria de contexto [{0}]
managerServlet.stopped=OK - Parada aplicación en trayectoria de contexto [{0}]
managerServlet.trustedCertsNotConfigured=No se configuraron certificados confiables para este virtual host
managerServlet.undeployed=OK - Replegada aplicación en trayectoria de contexto [{0}]
managerServlet.unknownCommand=FALLO - Comando desconocido [{0}]
statusServlet.complete=Estado Completo de Servidor
statusServlet.title=Estado de Servidor

View File

@@ -0,0 +1,177 @@
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
htmlManagerServlet.appsAvailable=Fonctionnelle
htmlManagerServlet.appsExpire=Expirer les sessions
htmlManagerServlet.appsName=Nom d'affichage
htmlManagerServlet.appsPath=Chemin
htmlManagerServlet.appsReload=Recharger
htmlManagerServlet.appsSessions=Sessions
htmlManagerServlet.appsStart=Démarrer
htmlManagerServlet.appsStop=Arrêter
htmlManagerServlet.appsTasks=Commandes
htmlManagerServlet.appsTitle=Applications
htmlManagerServlet.appsUndeploy=Retirer
htmlManagerServlet.appsVersion=Version
htmlManagerServlet.configReloadButton=Relire
htmlManagerServlet.configSslHostName=Nom d'hôte TLS (optionnel)
htmlManagerServlet.configSslReloadTitle=Relisant les fichiers de configuration TLS
htmlManagerServlet.configTitle=Configuration
htmlManagerServlet.connectorStateAliveSocketCount=Nombre de sockets connectés:
htmlManagerServlet.connectorStateBytesRecieved=Octets reçus:
htmlManagerServlet.connectorStateBytesSent=Octets envoyés:
htmlManagerServlet.connectorStateErrorCount=Nombre d'erreurs:
htmlManagerServlet.connectorStateHint=P: Traitement et préparation de la requête S: Service F: Fin R: Prêt K: Connecté
htmlManagerServlet.connectorStateMaxProcessingTime=Temps de traitement maximal:
htmlManagerServlet.connectorStateMaxThreads=Nombre de threads maximum:
htmlManagerServlet.connectorStateProcessingTime=Temps de traitement:
htmlManagerServlet.connectorStateRequestCount=Nombre de requêtes:
htmlManagerServlet.connectorStateTableTitleBRecv=Octets Reçus
htmlManagerServlet.connectorStateTableTitleBSent=Octets Envoyés
htmlManagerServlet.connectorStateTableTitleClientAct=Client (Réel)
htmlManagerServlet.connectorStateTableTitleClientForw=Client (Forwardé)
htmlManagerServlet.connectorStateTableTitleRequest=Requête
htmlManagerServlet.connectorStateTableTitleStage=Etape
htmlManagerServlet.connectorStateTableTitleTime=Temps
htmlManagerServlet.connectorStateTableTitleVHost=Hôte virtuel (VHost)
htmlManagerServlet.connectorStateThreadBusy=Nombre de threads utilisés:
htmlManagerServlet.connectorStateThreadCount=Nombre de threads actuel:
htmlManagerServlet.deployButton=Deployer
htmlManagerServlet.deployConfig=URL du fichier XML de configuration:
htmlManagerServlet.deployPath=Chemin de context (requis):
htmlManagerServlet.deployServer=Emplacement du répertoire ou fichier WAR de déploiement sur le serveur
htmlManagerServlet.deployTitle=Deployer
htmlManagerServlet.deployUpload=Fichier WAR à déployer
htmlManagerServlet.deployUploadFail=ECHEC - Téléversement pour déploiement a échoué, exception: [{0}]
htmlManagerServlet.deployUploadFile=Choisir le fichier WAR à téléverser
htmlManagerServlet.deployUploadInServerXml=ECHEC - Fichier WAR [{0}] ne peut être téléversé lorsque le contexte est défini dans server.xml
htmlManagerServlet.deployUploadNoFile=ECHEC - Téléversement a échoué, aucun fichier
htmlManagerServlet.deployUploadNotWar=ECHEC - Fichier à téléverser, [{0}], doit être un .war
htmlManagerServlet.deployUploadWarExists=ECHEC - Fichier War [{0}] déjà existant sur le serveur
htmlManagerServlet.deployWar=URL vers WAR ou répertoire:
htmlManagerServlet.diagnosticsLeak=Vérifiez si une application web a causé une fuite de mémoire lors de son arrêt, rechargement ou déchargement
htmlManagerServlet.diagnosticsLeakButton=Trouver des fuites
htmlManagerServlet.diagnosticsLeakWarning=Le diagnostic doit démarrer une collecte complète de la mémoire, utilisez le avec précaution dans un environnement de production
htmlManagerServlet.diagnosticsSsl=Diagnostics de configuration TLS du connecteur
htmlManagerServlet.diagnosticsSslConnectorCertsButton=Certificats
htmlManagerServlet.diagnosticsSslConnectorCertsText=Entrez la liste des hôtes virtuels TLS et la chaîne de certificats pour chacun.
htmlManagerServlet.diagnosticsSslConnectorCipherButton=Chiffres
htmlManagerServlet.diagnosticsSslConnectorCipherText=Lister les hôtes virtuels TLS configurés et les chiffres utilisés par chacun
htmlManagerServlet.diagnosticsSslConnectorTrustedCertsButton=Certificats de confiance
htmlManagerServlet.diagnosticsSslConnectorTrustedCertsText=Lister les hôtes virtuels TLS configurés et les certificats de confiance utilisés par chacun
htmlManagerServlet.diagnosticsTitle=Diagnostics
htmlManagerServlet.expire.explain=inactives depuis &ge;
htmlManagerServlet.expire.unit=minutes
htmlManagerServlet.findleaksList=Les applications suivantes ont été arrêtées (redémarrées, retirées), mais certaines de leurs classes sont toujours présentes en mémoire, cela pourrait donc causer une fuite de mémoire (utiliser un profileur pour le confirmer):
htmlManagerServlet.findleaksNone=Aucune application n'a apparemment causé de fuite de mémoire en l'arrêtant, en la rechargeant ou en la retirant
htmlManagerServlet.helpHtmlManager=Aide HTML Gestionnaire
htmlManagerServlet.helpHtmlManagerFile=../docs/html-manager-howto.html
htmlManagerServlet.helpManager=Aide Gestionnaire
htmlManagerServlet.helpManagerFile=../docs/manager-howto.html
htmlManagerServlet.jvmFreeMemory=Mémoire disponible:
htmlManagerServlet.jvmMaxMemory=Mémoire maximale:
htmlManagerServlet.jvmTableTitleInitial=Initial
htmlManagerServlet.jvmTableTitleMaximum=Maximum
htmlManagerServlet.jvmTableTitleMemoryPool=Pool mémoire
htmlManagerServlet.jvmTableTitleTotal=Total
htmlManagerServlet.jvmTableTitleType=Type
htmlManagerServlet.jvmTableTitleUsed=Utilisé
htmlManagerServlet.jvmTotalMemory=Mémoire totale:
htmlManagerServlet.list=Lister les applications
htmlManagerServlet.manager=Gestionnaire
htmlManagerServlet.messageLabel=Message:
htmlManagerServlet.noManager=-
htmlManagerServlet.noVersion=Aucun spécifié
htmlManagerServlet.osAvailableMemory=Mémoire disponible:
htmlManagerServlet.osFreePageFile=Fichier de page disponible:
htmlManagerServlet.osKernelTime=Temps noyau du processus:
htmlManagerServlet.osMemoryLoad=Charge mémoire:
htmlManagerServlet.osPhysicalMemory=Mémoire physique:
htmlManagerServlet.osTotalPageFile=Fichier de page total:
htmlManagerServlet.osUserTime=Temps utilisateur du processus:
htmlManagerServlet.serverHostname=Nom d'hôte
htmlManagerServlet.serverIPAddress=Adresse IP
htmlManagerServlet.serverJVMVendor=Fournisseur de la JVM
htmlManagerServlet.serverJVMVersion=Version de la JVM
htmlManagerServlet.serverOSArch=Architecture d'OS
htmlManagerServlet.serverOSName=Nom d'OS
htmlManagerServlet.serverOSVersion=Version d'OS
htmlManagerServlet.serverTitle=Serveur
htmlManagerServlet.serverVersion=Version de serveur
htmlManagerServlet.title=Gestionnaire d'applications WEB Tomcat
managerServlet.alreadyContext=ECHEC - l''application existe déjà dans le chemin [{0}]
managerServlet.certsNotAvailable=L'information sur les certificats ne peut pas être obtenu de ce connecteur au cours de son exécution
managerServlet.deleteFail=ECHEC - Impossible de supprimer [{0}], ce qui pourrait causer des problèmes
managerServlet.deployFailed=ECHEC - Echec au déploiement de l''application pour le chemin de contexte [{0}]
managerServlet.deployed=OK - Application déployée pour le chemin de contexte [{0}]
managerServlet.deployedButNotStarted=ECHEC - Application déployée pour le chemin de contexte [{0}] mais le démarrage du contexte a échoué
managerServlet.exception=ECHEC - L''exception [{0}] a été rencontrée
managerServlet.findleaksFail=ECHEC - Echec de la recherche de fuites, car l'hôte n'est pas un StandardHost
managerServlet.findleaksList=OK - De possibles fuites de mémoire ont été trouvées dans les applications suivantes:
managerServlet.findleaksNone=OK - Aucune fuite de mémoire trouvée
managerServlet.inService=ECHEC - Une opération de gestion est déjà en cours pour l''application [{0}]
managerServlet.invalidCommand=ECHEC - Des paramètres incorrects ont été fournis pour la commande [{0}]
managerServlet.invalidPath=ECHEC - Un chemin de contexte invalide [{0}] a été spécifié
managerServlet.listed=OK - Applications listées pour l''hôte virtuel (virtual host) [{0}]
managerServlet.listitem={0}:{1}:{2}:{3}
managerServlet.mkdirFail=ECHEC - Le répertoire [{0}] n''a pas pu être créé
managerServlet.noCommand=ECHEC - Aucune commande n'a été spécifiée
managerServlet.noContext=ECHEC - Aucun contexte n''existe pour le chemin [{0}]
managerServlet.noGlobal=ECHEC - Aucune ressource JNDI globale n'est disponible
managerServlet.noManager=ECHEC - Aucun gestionnaire n''existe pour le chemin [{0}]
managerServlet.noSelf=ECHEC - Le gestionnaire ne peut se recharger, se retirer, s'arrêter, ou se déployer lui-même
managerServlet.noWrapper=Le conteneur n'a pas appelé "setWrapper()" pour cette servlet
managerServlet.notDeployed=ECHEC - Le contexte [{0}] est défini dans server.xml et ne peut être retiré
managerServlet.notSslConnector=SSL n'est pas activé pour ce connecteur
managerServlet.objectNameFail=ECHEC - Le nom d''objet [{0}] n''a pas pu être enregistré pour le Servlet de Gestion
managerServlet.postCommand=ECHEC - Tentative d''utilisation de la commande [{0}] via une requête GET, mais POST est requis
managerServlet.reloaded=OK - L''application associée au chemin de contexte [{0}] a été rechargée
managerServlet.renameFail=ECHEC - N''a pas pu renommer [{0}] vers [{1}], cela pourrait causer des problèmes pour de prochains déploiements
managerServlet.resourcesAll=OK - Liste des ressources globales de tout type
managerServlet.resourcesType=OK - Liste des ressources globales de type [{0}]
managerServlet.saveFail=ECHEC - La sauvegarde de la configuration a échoué: [{0}]
managerServlet.saved=OK - Configuration serveur sauvegardée
managerServlet.savedContext=OK - Configuration du contexte [{0}] sauvegardée
managerServlet.serverInfo=OK - Informations sur le serveur\n\
Version de Tomcat: [{0}]\n\
Nom de l''OS: [{1}]\n\
Version de l''OS: [{2}]\n\
Architecture de l''OS: [{3}]\n\
Version de la JVM: [{4}]\n\
Fournisseur de la JVM: [{5}]
managerServlet.sessiondefaultmax=La valeur par défaut du délai d''inactivité maximum d''une sessions est de [{0}] minutes
managerServlet.sessions=OK - Information de session pour l''application au chemin de contexte [{0}]
managerServlet.sessiontimeout=Inactivité pendant [{0}] minutes: [{1}] sessions
managerServlet.sessiontimeout.expired=Inactivité pendant [{0}] minutes: [{1}] sessions ont été expirées
managerServlet.sessiontimeout.unlimited=Délai illimité: [{0}] sessions
managerServlet.sslConnectorCerts=OK - Information sur le connecteur et la chaîne de certificats
managerServlet.sslConnectorCiphers=OK - Information sur le connecteur et les chiffres SSL
managerServlet.sslConnectorTrustedCerts=OK - Information sur le Connecteur / Certificat de confiance
managerServlet.sslReload=OK - La configuration TLS de [{0}] a été rechargée
managerServlet.sslReloadAll=OK - Configuration TLS rechargée pour tous les hôtes virtuels TLS
managerServlet.sslReloadFail=ECHEC - Echec lors du rechargement de la configuration TLS
managerServlet.startFailed=ECHEC - L''application pour le chemin de contexte [{0}] n''a pas pu être démarrée
managerServlet.started=OK - Application démarrée pour le chemin de contexte [{0}]
managerServlet.stopped=OK - Application arrêtée pour le chemin de contexte [{0}]
managerServlet.storeConfig.noMBean=ECHEC - Pas de mbean StoreConfig enregistré à [{0}], l''enregistrement est effectué par StoreConfigLifecycleListener
managerServlet.threaddump=OK - Etat des threads de la JVM
managerServlet.trustedCertsNotConfigured=Aucun certificat de confiance n'est configuré pour cet hôte virtuel
managerServlet.undeployed=OK - Application non déployée pour le chemin de contexte [{0}]
managerServlet.unknownCommand=ECHEC - Commande inconnue [{0}]
managerServlet.vminfo=OK - Informations sur la VM
statusServlet.complete=Etat complet du serveur
statusServlet.title=Etat du serveur

View File

@@ -0,0 +1,179 @@
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
htmlManagerServlet.appsAvailable=実行中
htmlManagerServlet.appsExpire=期限切れセッション
htmlManagerServlet.appsName=表示名
htmlManagerServlet.appsPath=パス
htmlManagerServlet.appsReload=再ロード
htmlManagerServlet.appsSessions=セッション
htmlManagerServlet.appsStart=起動
htmlManagerServlet.appsStop=停止
htmlManagerServlet.appsTasks=コマンド
htmlManagerServlet.appsTitle=アプリケーション
htmlManagerServlet.appsUndeploy=配備解除
htmlManagerServlet.appsVersion=バージョン
htmlManagerServlet.configReloadButton=再読み込み
htmlManagerServlet.configSslHostName=TLSホスト名オプション
htmlManagerServlet.configSslReloadTitle=TLS構成ファイルを再読み込みします。
htmlManagerServlet.configTitle=構成ファイル
htmlManagerServlet.connectorStateAliveSocketCount=キープアライブソケット数:
htmlManagerServlet.connectorStateBytesRecieved=受信バイト数:
htmlManagerServlet.connectorStateBytesSent=送信バイト:
htmlManagerServlet.connectorStateErrorCount=エラー数:
htmlManagerServlet.connectorStateHint=Pパースとリクエスト準備 Sサービス F終了 RReady Kキープアライブ
htmlManagerServlet.connectorStateMaxProcessingTime=最大処理時間:
htmlManagerServlet.connectorStateMaxThreads=最大スレッド:
htmlManagerServlet.connectorStateProcessingTime=処理時間:
htmlManagerServlet.connectorStateRequestCount=リクエスト数:
htmlManagerServlet.connectorStateTableTitleBRecv=B Recv
htmlManagerServlet.connectorStateTableTitleBSent=送信バイト数
htmlManagerServlet.connectorStateTableTitleClientAct=Client (Actual)
htmlManagerServlet.connectorStateTableTitleClientForw=Client (Forwarded)
htmlManagerServlet.connectorStateTableTitleRequest=リクエスト
htmlManagerServlet.connectorStateTableTitleStage=ステージ
htmlManagerServlet.connectorStateTableTitleTime=時間
htmlManagerServlet.connectorStateTableTitleVHost=仮想ホスト
htmlManagerServlet.connectorStateThreadBusy=現在のBusyスレッド
htmlManagerServlet.connectorStateThreadCount=現在のスレッド数:
htmlManagerServlet.deployButton=配備
htmlManagerServlet.deployConfig=XML設定ファイルのURL:
htmlManagerServlet.deployPath=コンテキストパス (省略可):
htmlManagerServlet.deployServer=サーバ上のWARファイル又はディレクトリの配備
htmlManagerServlet.deployTitle=配備
htmlManagerServlet.deployUpload=WARファイルの配備
htmlManagerServlet.deployUploadFail=FAIL - 配備のアップロードが失敗しました、例外: [{0}]
htmlManagerServlet.deployUploadFile=アップロードするWARファイルの選択
htmlManagerServlet.deployUploadInServerXml=FAIL - server.xmlでコンテキストが定義されている場合、warファイル[{0}]をアップロードできません
htmlManagerServlet.deployUploadNoFile=FAIL - ファイルのアップロードが失敗しました、ファイルが存在しません
htmlManagerServlet.deployUploadNotWar=FAIL - アップロードするファイル [{0}] はWARファイルでなければいけません
htmlManagerServlet.deployUploadWarExists=FAIL - WARファイル [{0}] は既にサーバ上に存在します
htmlManagerServlet.deployWar=WARファイル又はディレクトリのURL:
htmlManagerServlet.diagnosticsLeak=Web アプリケーションの停止や再読み込み、配置解除でメモリーリークが発生しているか確認します。
htmlManagerServlet.diagnosticsLeakButton=メモリリーク発見
htmlManagerServlet.diagnosticsLeakWarning=この診断チェックにより、Fill GCがトリガーされます。 プロダクションシステムには非常に注意して使用してください。
htmlManagerServlet.diagnosticsSsl=TLSコネクタ構成の診断
htmlManagerServlet.diagnosticsSslConnectorCertsButton=証明書
htmlManagerServlet.diagnosticsSslConnectorCertsText=設定済みのTLS仮想ホストとそれぞれの証明書チェーンを一覧表示します。
htmlManagerServlet.diagnosticsSslConnectorCipherButton=暗号
htmlManagerServlet.diagnosticsSslConnectorCipherText=設定済みのTLS仮想ホストとそれぞれの暗号を一覧表示します。
htmlManagerServlet.diagnosticsSslConnectorTrustedCertsButton=信頼できる証明書
htmlManagerServlet.diagnosticsSslConnectorTrustedCertsText=設定済みのTLS仮想ホストとそれぞれの信頼できる証明書を一覧表示します。
htmlManagerServlet.diagnosticsTitle=診断
htmlManagerServlet.expire.explain=非アクティブ &ge;
htmlManagerServlet.expire.unit=
htmlManagerServlet.findleaksList=次のWebアプリケーションは停止しました再ロード、アンデプロイ。\n\
以前の起動からのクラスはまだメモリにロードされているため、メモリ\n\
リークを引き起こします。(確認のためにプロファイラを使用して下さい):
htmlManagerServlet.findleaksNone=停止、再読み込み読み込み、配置解除によりメモリーリークの発生した Web アプリケーションはありません。
htmlManagerServlet.helpHtmlManager=HTMLマネージャヘルプ
htmlManagerServlet.helpHtmlManagerFile=../docs/html-manager-howto.html
htmlManagerServlet.helpManager=マネージャヘルプ
htmlManagerServlet.helpManagerFile=../docs/manager-howto.html
htmlManagerServlet.jvmFreeMemory=フリーメモリ:
htmlManagerServlet.jvmMaxMemory=最大メモリ:
htmlManagerServlet.jvmTableTitleInitial=初期
htmlManagerServlet.jvmTableTitleMaximum=最大値
htmlManagerServlet.jvmTableTitleMemoryPool=メモリプール
htmlManagerServlet.jvmTableTitleTotal=合計
htmlManagerServlet.jvmTableTitleType=Type
htmlManagerServlet.jvmTableTitleUsed=使用中
htmlManagerServlet.jvmTotalMemory=合計メモリ:
htmlManagerServlet.list=アプリケーションの一覧
htmlManagerServlet.manager=マネージャ
htmlManagerServlet.messageLabel=メッセージ
htmlManagerServlet.noManager=-
htmlManagerServlet.noVersion=指定なし
htmlManagerServlet.osAvailableMemory=利用可能なメモリ
htmlManagerServlet.osFreePageFile=フリーページファイル:
htmlManagerServlet.osKernelTime=プロセスのカーネル時間:
htmlManagerServlet.osMemoryLoad=メモリロード:
htmlManagerServlet.osPhysicalMemory=物理メモリ:
htmlManagerServlet.osTotalPageFile=合計ページファイル:
htmlManagerServlet.osUserTime=プロセスユーザ名:
htmlManagerServlet.serverHostname=ホスト名
htmlManagerServlet.serverIPAddress=IP アドレス
htmlManagerServlet.serverJVMVendor=JVMベンダ
htmlManagerServlet.serverJVMVersion=JVMバージョン
htmlManagerServlet.serverOSArch=OSアーキテクチャ
htmlManagerServlet.serverOSName=OS名
htmlManagerServlet.serverOSVersion=OSバージョン
htmlManagerServlet.serverTitle=サーバ情報
htmlManagerServlet.serverVersion=Tomcatバージョン
htmlManagerServlet.title=Tomcat Webアプリケーションマネージャ
managerServlet.alreadyContext=FAIL - アプリケーションは、既にパス [{0}] に存在します
managerServlet.certsNotAvailable=実行時にこのコネクタから証明書情報を取得できません。
managerServlet.deleteFail=FAIL - [{0}]を削除できません。 このファイルが継続して存在すると、問題が発生する可能性があります。
managerServlet.deployFailed=FAIL - コンテキストパス [{0}] にアプリケーションを配備できません。
managerServlet.deployed=OK - コンテキストパス [{0}] でアプリケーションを配備しました
managerServlet.deployedButNotStarted=FAIL - コンテキストパス[{0}]にアプリケーションをデプロイしましたが、コンテキストを開始できませんでした。
managerServlet.exception=FAIL - 例外 [{0}] が発生しました
managerServlet.findleaksFail=FAIL - リークを検出できません。Hostは StandardHost のインスタンスめはありません。
managerServlet.findleaksList=OK - 次のアプリケーションで潜在的なメモリリークが見つかりました:
managerServlet.findleaksNone=OK - メモリリークは見つかりません
managerServlet.inService=FAIL - アプリケーション [{0}] はすでにサービスを開始しています。
managerServlet.invalidCommand=FAIL - コマンド[{0}]に無効なパラメータが指定されました
managerServlet.invalidPath=FAIL - 無効なコンテキストパス [{0}] が指定されました
managerServlet.listed=OK - バーチャルホスト [{0}] のアプリケーション一覧です
managerServlet.listitem={0}:{1}:{2}:{3}
managerServlet.mkdirFail=FAIL - ディレクトリ [{0}] は作成できません。
managerServlet.noCommand=FAIL - コマンドが指定されていません
managerServlet.noContext=FAIL - パス [{0}] のコンテキストが存在しません
managerServlet.noGlobal=FAIL - グローバルなJNDIリソースが利用できません
managerServlet.noManager=FAIL - パス[{0}]のマネージャが存在しません
managerServlet.noSelf=FAIL - マネージャ自身を再ロード、削除、停止、又は配備解除できません
managerServlet.noWrapper=コンテナはこのサーブレットに対して呼び出されたsetWrapper()を持っていません
managerServlet.notDeployed=FAIL - Context[{0}]はserver.xmlで定義されており、展開されていない可能性があります。
managerServlet.notSslConnector=このコネクターでは SSL が有効化されていません。
managerServlet.objectNameFail=FAIL - オブジェクト名 [{0}] を ManagerServlet として登録できません。
managerServlet.postCommand=FAIL - コマンド [{0}] を GET リクエストで実行しようとしましたが、POST リクエストでなければなりません。
managerServlet.reloaded=OK - コンテキストパス [{0}] のアプリケーションを再ロードしました
managerServlet.renameFail=FAIL - [{0}]の名前を[{1}]に変更できません。 これにより、今後の展開で問題が発生する可能性があります。
managerServlet.resourcesAll=OK - すべてのタイプのグローバルリソースを列挙しました
managerServlet.resourcesType=OK - タイプ [{0}] のグローバルリソースを列挙しました
managerServlet.saveFail=FAIL - 設定の保存に失敗しました: [{0}]
managerServlet.saved=OK - サーバの設定を保存しました
managerServlet.savedContext=OK - コンテキスト [{0}] の設定を保存しました
managerServlet.serverInfo=OK - サーバー情報\n\
Tomcatバージョン[{0}]\n\
OS名[{1}]\n\
OSバージョン[{2}]\n\
OSアーキテクチャ[{3}]\n\
JVMバージョン[{4}]\n\
JVMベンダー[{5}]
managerServlet.sessiondefaultmax=デフォルトの最大セッション停止間隔は[{0}]分です
managerServlet.sessions=OK - コンテキストパス [{0}] のアプリケーションのセッション情報です
managerServlet.sessiontimeout=[{0}]分: [{1}]セッション
managerServlet.sessiontimeout.expired=[{0}]分: expired [{1}]セッション
managerServlet.sessiontimeout.unlimited=unlimited 分: [{0}]セッション
managerServlet.sslConnectorCerts=OK - コネクタ/証明書チェーンの情報
managerServlet.sslConnectorCiphers=OK - Connector/ SSL暗号情報
managerServlet.sslConnectorTrustedCerts=OK - コネクタ/信頼された証明書情報
managerServlet.sslReload=OK - [{0}]のリロードされたTLS設定
managerServlet.sslReloadAll=OK - すべてのTLS仮想ホストのリロードされたTLS設定
managerServlet.sslReloadFail=FAIL - TLS設定を再ロードできませんでした
managerServlet.startFailed=FAIL - コンテキストパス [{0}] のアプリケーションが起動できません
managerServlet.started=OK - コンテキストパス [{0}] でアプリケーションを起動しました
managerServlet.stopped=OK - コンテキストパス [{0}] でアプリケーションを停止しました
managerServlet.storeConfig.noMBean=FAIL - [{0}] に StoreConfig Mbean が登録されていません。一般的には StoreConfigLifecycleListener が登録します。
managerServlet.threaddump=OK - JVMスレッドダンプ
managerServlet.trustedCertsNotConfigured=この仮想ホストには信頼できる証明書が構成されていません。
managerServlet.undeployed=OK - コンテキストパス [{0}] のアプリケーションを配備解除しました
managerServlet.unknownCommand=FAIL - 未知のコマンド [{0}] です
managerServlet.vminfo=OK - VM 情報
statusServlet.complete=サーバの全状態
statusServlet.title=サーバの状態

View File

@@ -0,0 +1,177 @@
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
htmlManagerServlet.appsAvailable=실행 중
htmlManagerServlet.appsExpire=세션들을 만료시키기
htmlManagerServlet.appsName=표시 이름
htmlManagerServlet.appsPath=경로
htmlManagerServlet.appsReload=다시 로드
htmlManagerServlet.appsSessions=세션들
htmlManagerServlet.appsStart=시작
htmlManagerServlet.appsStop=중지
htmlManagerServlet.appsTasks=명령들
htmlManagerServlet.appsTitle=애플리케이션들
htmlManagerServlet.appsUndeploy=배치된 것을 제거
htmlManagerServlet.appsVersion=버전
htmlManagerServlet.configReloadButton=다시 읽기
htmlManagerServlet.configSslHostName=TLS 호스트 이름 (선택 사항)
htmlManagerServlet.configSslReloadTitle=TLS 설정 파일들을 다시 읽습니다.
htmlManagerServlet.configTitle=설정
htmlManagerServlet.connectorStateAliveSocketCount=Keep alive 소켓 개수:
htmlManagerServlet.connectorStateBytesRecieved=수신된 바이트 크기:
htmlManagerServlet.connectorStateBytesSent=전송된 바이트 크기:
htmlManagerServlet.connectorStateErrorCount=오류 개수:
htmlManagerServlet.connectorStateHint=P: 요청을 파싱 또는 준비, S: 서비스, F: 완료 R: 준비 K: Keepalive
htmlManagerServlet.connectorStateMaxProcessingTime=최대 처리 시간:
htmlManagerServlet.connectorStateMaxThreads=최대 쓰레드 개수:
htmlManagerServlet.connectorStateProcessingTime=처리 시간:
htmlManagerServlet.connectorStateRequestCount=요청 회수:
htmlManagerServlet.connectorStateTableTitleBRecv=받은 바이트 크기
htmlManagerServlet.connectorStateTableTitleBSent=전송된 바이트 크기
htmlManagerServlet.connectorStateTableTitleClientAct=클라이언트 (실제)
htmlManagerServlet.connectorStateTableTitleClientForw=클라이언트 (Forwarded)
htmlManagerServlet.connectorStateTableTitleRequest=요청
htmlManagerServlet.connectorStateTableTitleStage=단계
htmlManagerServlet.connectorStateTableTitleTime=시간
htmlManagerServlet.connectorStateTableTitleVHost=가상호스트
htmlManagerServlet.connectorStateThreadBusy=현재 사용중인 쓰레드들:
htmlManagerServlet.connectorStateThreadCount=현재 쓰레드 개수:
htmlManagerServlet.deployButton=배치
htmlManagerServlet.deployConfig=XML 설정 파일 경로:
htmlManagerServlet.deployServer=서버에 있는 디렉토리 또는 WAR 파일을 배치합니다.
htmlManagerServlet.deployTitle=배치
htmlManagerServlet.deployUpload=배치할 WAR 파일
htmlManagerServlet.deployUploadFail=실패 - 배치관리자에서 업로드 실패, 예외: [{0}]
htmlManagerServlet.deployUploadFile=업로드할 WAR 파일을 선택하십시오.
htmlManagerServlet.deployUploadInServerXml=실패 - 컨텍스트가 server.xml에 정의되어 있다면, War 파일 [{0}]은(는) 업로드될 수 없습니다.
htmlManagerServlet.deployUploadNoFile=실패 - 파일 업로드 실패. 파일이 없습니다.
htmlManagerServlet.deployUploadNotWar=실패 - 업로드된 파일 [{0}]은(는) 반드시 .war이어야 합니다.
htmlManagerServlet.deployUploadWarExists=실패 - War 파일 [{0}]이(가) 이미 서버에 존재합니다.
htmlManagerServlet.deployWar=WAR 또는 디렉토리 경로:
htmlManagerServlet.diagnosticsLeak=웹 애플리케이션이 중지되거나, 다시 로드되거나, 또는 배치 제거될 때, 메모리 누수를 유발하는지 여부를 살펴보려 점검합니다.
htmlManagerServlet.diagnosticsLeakButton=메모리 누수 찾기
htmlManagerServlet.diagnosticsLeakWarning=이 진단 점검은 Full Garbage Collection을 개시할 것입니다. 프로덕션 시스템들에서는 극도의 주의를 기울여 사용하십시오.
htmlManagerServlet.diagnosticsSsl=TLS Connector 설정 진단
htmlManagerServlet.diagnosticsSslConnectorCertsButton=인증서들
htmlManagerServlet.diagnosticsSslConnectorCertsText=설정된 TLS 가상 호스트들과 그들 각각의 인증서 체인의 목록
htmlManagerServlet.diagnosticsSslConnectorCipherButton=Cipher들
htmlManagerServlet.diagnosticsSslConnectorCipherText=설정된 TLS 가상 호스트들과 각각을 위한 cipher들의 목록을 표시합니다.
htmlManagerServlet.diagnosticsSslConnectorTrustedCertsButton=신뢰되는 인증서들
htmlManagerServlet.diagnosticsSslConnectorTrustedCertsText=설정된 TLS 가상 호스트들과 각각을 위한 신뢰되는 인증서들의 목록을 표시합니다.
htmlManagerServlet.diagnosticsTitle=시스템 진단
htmlManagerServlet.expire.explain=idle 값 &ge;
htmlManagerServlet.expire.unit=
htmlManagerServlet.findleaksList=다음 웹 애플리케이션들이 중지되었지만 (다시 로드되거나, 배치가 제거되어), 이전 실행 시에 로드되었던 클래스들이 여전히 메모리에 남아 있어서, 메모리 누수를 유발할 수 있습니다. (확인하려면 프로파일러를 사용하십시오):\n\
\n
htmlManagerServlet.findleaksNone=어떤 웹 애플리케이션도, 중지 시 또는 다시 로드될 때 또는 배치로부터 제거 될 때, 메모리 누수를 유발하지 않은 것 같습니다.
htmlManagerServlet.helpHtmlManager=HTML 매니저 도움말
htmlManagerServlet.helpHtmlManagerFile=../docs/html-manager-howto.html
htmlManagerServlet.helpManager=매니저 도움말
htmlManagerServlet.helpManagerFile=../docs/manager-howto.html
htmlManagerServlet.jvmFreeMemory=유휴 메모리:
htmlManagerServlet.jvmMaxMemory=최대 메모리:
htmlManagerServlet.jvmTableTitleInitial=초기
htmlManagerServlet.jvmTableTitleMaximum=최대값
htmlManagerServlet.jvmTableTitleMemoryPool=메모리 풀
htmlManagerServlet.jvmTableTitleTotal=전체
htmlManagerServlet.jvmTableTitleType=타입
htmlManagerServlet.jvmTableTitleUsed=사용된 메모리
htmlManagerServlet.jvmTotalMemory=전체 메모리:
htmlManagerServlet.list=애플리케이션들의 목록을 표시
htmlManagerServlet.manager=매니저
htmlManagerServlet.messageLabel=메시지:
htmlManagerServlet.noManager=-
htmlManagerServlet.noVersion=지정 안됨
htmlManagerServlet.osAvailableMemory=가용 메모리:
htmlManagerServlet.osFreePageFile=유휴 페이지 파일:
htmlManagerServlet.osKernelTime=프로세스 커널 타임:
htmlManagerServlet.osMemoryLoad=메모리 로드:
htmlManagerServlet.osPhysicalMemory=물리적 메모리:
htmlManagerServlet.osTotalPageFile=전체 페이지 파일:
htmlManagerServlet.osUserTime=프로세스 User Time:
htmlManagerServlet.serverHostname=호스트명
htmlManagerServlet.serverIPAddress=IP 주소
htmlManagerServlet.serverJVMVendor=JVM 벤더
htmlManagerServlet.serverJVMVersion=JVM 버전
htmlManagerServlet.serverOSArch=운영체제 아키텍처
htmlManagerServlet.serverOSName=운영체제 이름
htmlManagerServlet.serverOSVersion=운영체제 버전
htmlManagerServlet.serverTitle=서버 정보
htmlManagerServlet.serverVersion=Tomcat 버전
htmlManagerServlet.title=Tomcat 웹 애플리케이션 매니저
managerServlet.alreadyContext=실패 - 애플리케이션이 이미 경로 [{0}]에 존재합니다.
managerServlet.certsNotAvailable=이 Connector로부터, 인증서 정보를 런타임에 구할 수 없습니다.
managerServlet.deleteFail=실패 - [{0}]을(를) 삭제할 수 없습니다. 이 파일이 계속해서 존재하면 문제들을 일으킬 수 있습니다.
managerServlet.deployFailed=실패 - 컨텍스트 경로 [{0}]에, 애플리케이션을 배치하지 못했습니다.
managerServlet.deployed=OK - 컨텍스트 경로 [{0}]에 애플리케이션을 배치했습니다.
managerServlet.deployedButNotStarted=실패 - 컨텍스트 경로 [{0}]에 있는 애플리케이션을 배치했으나, 컨텍스트가 시작되지 못했습니다.
managerServlet.exception=실패 - 예외 발생 [{0}]
managerServlet.findleaksFail=실패 - 잠재 메모리 누수 찾기 실패: 호스트가 StandardHost의 인스턴스가 아닙니다.
managerServlet.findleaksList=OK - 다음 애플리케이션들에서 잠재적인 메모리 누수들이 발견되었습니다:
managerServlet.findleaksNone=OK - 메모리 누수가 발견 안됨
managerServlet.inService=실패 - 애플리케이션 [{0}]이(가) 이미 서비스되고 있습니다.
managerServlet.invalidCommand=실패 - 명령 [{0}]을(를) 위해 유효하지 않은 파라미터들이 제공되었습니다.
managerServlet.invalidPath=실패 - 유효하지 않은 컨텍스트 경로 [{0}]이(가) 지정되었습니다.
managerServlet.listed=OK - 가상 호스트 [{0}]을(를) 위한 애플리케이션들의 목록이 표시되었습니다.
managerServlet.listitem={0}:{1}:{2}:{3}
managerServlet.mkdirFail=실패 - 디렉토리 [{0}]을(를) 생성할 수 없습니다.
managerServlet.noCommand=실패 - 명령이 지정되지 않았습니다.
managerServlet.noContext=실패 - [{0}](이)라는 이름을 가진 컨텍스트가 없습니다.
managerServlet.noGlobal=실패 - 가용한 글로벌 JNDI 리소스들이 없습니다.
managerServlet.noManager=실패 - 경로 [{0}]을(를) 위한 매니저가 없습니다.
managerServlet.noSelf=실패 - 매니저는 자기 자신을 다시 로드하거나, 중지시키거나, 자신의 배치를 제거할 수 없습니다.
managerServlet.noWrapper=컨테이너가 이 서블릿을 위해 setWrapper()를 호출하지 않았습니다.
managerServlet.notDeployed=실패 - 컨텍스트 [{0}]이(가) server.xml에 정의되어 있어, 배치를 제거할 수 없습니다.
managerServlet.notSslConnector=SSL이 이 connector를 위해 사용 가능 상태가 아닙니다.
managerServlet.objectNameFail=실패 - 매니저 서블릿을 위한 객체 이름 [{0}]을(를) 등록할 수 없습니다.
managerServlet.postCommand=실패 - GET 요청을 통해 명령 [{0}]을(를) 사용하려 시도했으나, POST 요청이 요구됩니다.
managerServlet.reloaded=OK - 컨텍스트 경로 [{0}]의 애플리케이션을 다시 로드했습니다.
managerServlet.renameFail=실패 - [{0}]을(를) [{1}](으)로 이름을 변경할 수 없습니다. 이는 이후의 배치 작업들에서 문제들을 일으킬 수 있습니다.
managerServlet.resourcesAll=OK - 모든 타입들의 글로벌 리소스들이 목록으로 표시되었습니다.
managerServlet.resourcesType=OK - 타입이 [{0}]인 글로벌 리소스들의 목록을 표시했습니다.
managerServlet.saveFail=실패 - 설정을 저장하지 못했습니다: [{0}]
managerServlet.saved=OK - 서버 설정이 저장되었습니다.
managerServlet.savedContext=OK - 컨텍스트 [{0}]의 설정이 저장되었습니다.
managerServlet.serverInfo=OK - 서버 정보\n\
Tomcat 버전: [{0}]\n\
운영체제 이름: [{1}]\n\
운영체제 버전: [{2}]\n\
운영체제 아키텍처: [{3}]\n\
JVM 버전: [{4}]\n\
JVM 벤더: [{5}]
managerServlet.sessiondefaultmax=세션 비활성화 최대 시간의 기본 값은 [{0}]분입니다.
managerServlet.sessions=OK - 컨텍스트 경로 [{0}]의 애플리케이션을 위한 세션 정보
managerServlet.sessiontimeout=[{0}]분: [{1}]개의 세션들
managerServlet.sessiontimeout.expired=[{0}]분: [{1}]개의 세션들이 만료되었습니다.
managerServlet.sessiontimeout.unlimited=무제한 시간: [{0}] 세션들
managerServlet.sslConnectorCerts=OK - Connector / 인증서 체인 정보
managerServlet.sslConnectorCiphers=OK - Connector / SSL Cipher 정보
managerServlet.sslConnectorTrustedCerts=OK - Connector / 신뢰되는 인증서 정보
managerServlet.sslReload=OK - [{0}]을(를) 위해 TLS 설정을 다시 로드했습니다.
managerServlet.sslReloadAll=OK - 모든 TLS 가상 호스트들을 위한 TLS 설정을 다시 로드했습니다.
managerServlet.sslReloadFail=실패 - TLS 설정을 다시 로드하지 못했습니다.
managerServlet.startFailed=실패 - 컨텍스트 경로 [{0}]의 애플리케이션이 시작될 수 없었습니다.
managerServlet.started=OK - 컨텍스트 경로 [{0}]의 애플리케이션이 시작되었습니다.
managerServlet.stopped=OK - 컨텍스트 경로 [{0}]의 애플리케이션을 중지시켰습니다.
managerServlet.storeConfig.noMBean=실패 - [{0}]에서 등록된 StoreConfig MBean이 없습니다. 보통 StoreConfigLifecycleListener에 의해 등록이 수행됩니다.
managerServlet.threaddump=OK - JVM 쓰레드 덤프
managerServlet.trustedCertsNotConfigured=이 가상 호스트를 위한 신뢰되는 인증서들이 설정되어 있지 않습니다.
managerServlet.undeployed=OK - 컨텍스트 경로 [{0}]에 배치된 애플리케이션을 제거했습니다.
managerServlet.unknownCommand=실패 - 알 수 없는 명령: [{0}]
managerServlet.vminfo=OK - VM 정보
statusServlet.complete=서버의 전체 상태
statusServlet.title=서버 상태

View File

@@ -0,0 +1,172 @@
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
htmlManagerServlet.appsAvailable=Запущено
htmlManagerServlet.appsExpire=Завершить сеансы
htmlManagerServlet.appsName=Название
htmlManagerServlet.appsPath=Путь
htmlManagerServlet.appsReload=Перезагрузить
htmlManagerServlet.appsSessions=Сеансы
htmlManagerServlet.appsStart=Старт
htmlManagerServlet.appsStop=Стоп
htmlManagerServlet.appsTasks=Команды
htmlManagerServlet.appsTitle=Приложения
htmlManagerServlet.appsUndeploy=Удалить
htmlManagerServlet.appsVersion=Версия
htmlManagerServlet.configReloadButton=Перечитать
htmlManagerServlet.configSslHostName=Имя TLS хоста (не обязательно)
htmlManagerServlet.configSslReloadTitle=Перечитать конфигурационные файлы TLS
htmlManagerServlet.configTitle=Конфигурация
htmlManagerServlet.connectorStateAliveSocketCount=Количество всё ещё живых сокетов:
htmlManagerServlet.connectorStateBytesRecieved=Байтов получено:
htmlManagerServlet.connectorStateBytesSent=Байтов отправлено:
htmlManagerServlet.connectorStateErrorCount=Количество ошибок:
htmlManagerServlet.connectorStateHint=P: Разбирается и готовится к обработке, S: Сервис, F: Завершение, R: Готов, K: Продолжает существовать
htmlManagerServlet.connectorStateMaxProcessingTime=Максимальное время обработки запроса:
htmlManagerServlet.connectorStateMaxThreads=Максимум потоков:
htmlManagerServlet.connectorStateProcessingTime=Время обработки:
htmlManagerServlet.connectorStateRequestCount=Количество запросов:
htmlManagerServlet.connectorStateTableTitleBRecv=Б Получено
htmlManagerServlet.connectorStateTableTitleBSent=Б Отправлено
htmlManagerServlet.connectorStateTableTitleClientAct=Клиент (Настоящий)
htmlManagerServlet.connectorStateTableTitleClientForw=Клиент (Переданный)
htmlManagerServlet.connectorStateTableTitleRequest=Запрос
htmlManagerServlet.connectorStateTableTitleStage=Этап
htmlManagerServlet.connectorStateTableTitleTime=Время
htmlManagerServlet.connectorStateTableTitleVHost=ВХост
htmlManagerServlet.connectorStateThreadBusy=Нынешнее число занятых потоков:
htmlManagerServlet.connectorStateThreadCount=Нынешнее число потоков:
htmlManagerServlet.deployButton=Развернуть
htmlManagerServlet.deployConfig=Путь XML файла конфигурации контекста:
htmlManagerServlet.deployPath=Путь:
htmlManagerServlet.deployServer=Развернуть серверный WAR файл
htmlManagerServlet.deployTitle=Развернуть
htmlManagerServlet.deployUpload=WAR файл для развёртывания
htmlManagerServlet.deployUploadFail=ОШИБКА - Ошибка при развёртывании: [{0}]
htmlManagerServlet.deployUploadFile=Выберите WAR файл для загрузки
htmlManagerServlet.deployUploadInServerXml=ОШИБКА - War файл [{0}] не может быть загружен, eсли он уже задан в файле server.xml
htmlManagerServlet.deployUploadNoFile=ОШИБКА - Ошибка при загрузке файла. Файла нет
htmlManagerServlet.deployUploadNotWar=ОШИБКА - Загружаемый файл должен быть с расширением .war
htmlManagerServlet.deployUploadWarExists=ОШИБКА - War файл [{0}] уже существует на сервере
htmlManagerServlet.deployWar=WAR или путь до директории:
htmlManagerServlet.diagnosticsLeak=Проверяет, произошла ли утечка памяти после остановки, перезагрузки или удаления веб-приложений
htmlManagerServlet.diagnosticsLeakButton=Найти утечки памяти
htmlManagerServlet.diagnosticsLeakWarning=Данная диагностика запускает сборку мусора. Будьте осторожны при использовании её на продуктивных системах.
htmlManagerServlet.diagnosticsSsl=Диагностика конфигурации TLS для коннекторов
htmlManagerServlet.diagnosticsSslConnectorCertsButton=Сертификаты безопасности
htmlManagerServlet.diagnosticsSslConnectorCertsText=Список виртуальных TLS хостов и их сертификатов безопасности
htmlManagerServlet.diagnosticsSslConnectorCipherButton=Шифры
htmlManagerServlet.diagnosticsSslConnectorCipherText=Список виртуальных TLS хостов и их шифры
htmlManagerServlet.diagnosticsSslConnectorTrustedCertsButton=Доверенные сертификаты
htmlManagerServlet.diagnosticsSslConnectorTrustedCertsText=Список виртуальных TLS хостов и их доверенных сертификатов безопасности
htmlManagerServlet.diagnosticsTitle=Диагностика
htmlManagerServlet.expire.explain=с неактивностью &ge;
htmlManagerServlet.expire.unit=минут
htmlManagerServlet.findleaksList=Следующие веб-приложения были остановлены (перезагружены, удалены),\n\
но их классы с предыдущих запусков до сих пор присутствуют в памяти\n\
(используйте программу-профайлер, чтобы подтвердить наличие проблемы):\n
htmlManagerServlet.findleaksNone=Кажется, что веб-приложения не вызвали утечку памяти при остановке, перезагрузке или удалении.
htmlManagerServlet.helpHtmlManager=Справка для пользователей приложения
htmlManagerServlet.helpHtmlManagerFile=../docs/html-manager-howto.html
htmlManagerServlet.helpManager=Справка по API приложения
htmlManagerServlet.helpManagerFile=../docs/manager-howto.html
htmlManagerServlet.jvmFreeMemory=Свободная память:
htmlManagerServlet.jvmMaxMemory=Максимум памяти:
htmlManagerServlet.jvmTableTitleInitial=Изначально
htmlManagerServlet.jvmTableTitleMaximum=Максимум
htmlManagerServlet.jvmTableTitleMemoryPool=Области памяти
htmlManagerServlet.jvmTableTitleTotal=Всего
htmlManagerServlet.jvmTableTitleType=Тип
htmlManagerServlet.jvmTableTitleUsed=Используется
htmlManagerServlet.jvmTotalMemory=Вся память:
htmlManagerServlet.list=Список приложений
htmlManagerServlet.manager=Менеджер
htmlManagerServlet.messageLabel=Сообщение:
htmlManagerServlet.noManager=-
htmlManagerServlet.noVersion=Не указано
htmlManagerServlet.osAvailableMemory=Доступная память:
htmlManagerServlet.osFreePageFile=Свободные файловые страницы:
htmlManagerServlet.osKernelTime=Время обработки процесса ядром:
htmlManagerServlet.osMemoryLoad=Памяти загружено:
htmlManagerServlet.osPhysicalMemory=Физическая память:
htmlManagerServlet.osTotalPageFile=Всего файловых страниц:
htmlManagerServlet.osUserTime=Время обработки пользователя:
htmlManagerServlet.serverHostname=Имя хоста
htmlManagerServlet.serverIPAddress=IP Адрес
htmlManagerServlet.serverJVMVendor=Поставщик JVM
htmlManagerServlet.serverJVMVersion=Версия JVM
htmlManagerServlet.serverOSArch=Архитектура ОС
htmlManagerServlet.serverOSName=ОС
htmlManagerServlet.serverOSVersion=Версия ОС
htmlManagerServlet.serverTitle=Информация о сервере
htmlManagerServlet.serverVersion=Версия Tomcat
htmlManagerServlet.title=Управление веб-приложениями Tomcat
managerServlet.alreadyContext=ОШИБКА - Приложение уже существует на пути [{0}]
managerServlet.certsNotAvailable=Информация о сертификате не может быть получена во время работы
managerServlet.deleteFail=ОШИБКА - Не удалось удалить [{0}].
managerServlet.deployFailed=ОШИБКА - Не удалось развернуть приложение на контекстом пути [{0}]
managerServlet.deployed=OK - Приложение успешно развёрнуто в контекстном пути [{0}]
managerServlet.deployedButNotStarted=ОШИБКА - Приложение было развёрнуто в контекстном пути [{0}], но не стартовало
managerServlet.exception=ОШИБКА - Встретилось исключение [{0}]
managerServlet.findleaksFail=ОШИБКА - Не удалось найти утечки памяти: Host not instance of StandardHost
managerServlet.findleaksList=OK - Найдены потенциальные утечки памяти в следующих приложениях:
managerServlet.findleaksNone=OK - Не найдено утечек памяти
managerServlet.inService=ОШИБКА - Приложение [{0}] уже обслуживается
managerServlet.invalidCommand=ОШИБКА - Недопустимые параметры, предоставленные для команды [{0}]
managerServlet.invalidPath=ОШИБКА - Указан недопустимый контекстный путь [{0}]
managerServlet.listed=OK - Список приложений для виртуального хоста [{0}]
managerServlet.listitem={0}:{1}:{2}:{3}
managerServlet.mkdirFail=ОШИБКА - Не удалось создать директорию [{0}]
managerServlet.noCommand=ОШИБКА - Команда не указана.
managerServlet.noContext=ОШИБКА - Контекст не существует [{0}]
managerServlet.noGlobal=ОШИБКА - Глобальные ресурсы JNDI недоступны
managerServlet.noManager=ОШИБКА - Отсутствует менеджер для пути [{0}]
managerServlet.noSelf=ОШИБКА - Менеджер не может перезагрузить, развернуть, остановить или удалить себя
managerServlet.noWrapper=Контейнер не вызвал setWrapper() для этого сервлета
managerServlet.notDeployed=ОШИБКА - [{0}] определен в файле server.xml и не может быть развёрнут
managerServlet.notSslConnector=Протокол SSL/TLS для этого коннектора не включен
managerServlet.objectNameFail=ОШИБКА - Не удалось зарегистрировать имя объекта [{0}] для Manager Servlet
managerServlet.postCommand=ОШИБКА - Попытка использовать команду [{0}] через запрос GET но требуется POST
managerServlet.reloaded=OK - Приложение по пути контекста [{0}] было перезагружено
managerServlet.renameFail=ОШИБКА - Невозможно переименовать [{0}] в [{1}]. Это может вызвать проблемы для будущих развертываний.
managerServlet.resourcesAll=OK - Перечислены глобальные ресурсы всех видов
managerServlet.resourcesType=OK - Перечислены глобальные ресурсы вида [{0}]
managerServlet.saveFail=ОШИБКА - Не удалось сохранить настройки: [{0}]
managerServlet.saved=OK - Конфигурация сервера сохранена
managerServlet.savedContext=OK - Контекстные настройки для [{0}] сохранены
managerServlet.sessiondefaultmax=Стандартный максимальный период неактивного сеанса: [{0}] минут
managerServlet.sessions=OK - Информация о сеансах приложения по пути контекста [{0}]
managerServlet.sessiontimeout=Неактивные [{0}] минут: [{1}] сеанс(ов)
managerServlet.sessiontimeout.expired=Неактивные [{0}] минут: [{1}] сеанс(ов) были завершены
managerServlet.sessiontimeout.unlimited=Неограниченное время: [{0}] сеансов
managerServlet.sslConnectorCerts=OK - Информация о цепочке сертификатов
managerServlet.sslConnectorCiphers=OK - Информация о шифровании SSL
managerServlet.sslConnectorTrustedCerts=OK - Информация о доверенном сертификате безопасности
managerServlet.sslReload=OK - Перезагрузка конфигурации TLS для [{0}]
managerServlet.sslReloadAll=OK - Перезагрузка конфигурации TLS для всех виртуальных хостов TLS
managerServlet.sslReloadFail=ОШИБКА - Не удалось перезагрузить конфигурацию TLS
managerServlet.startFailed=ОШИБКА - Application at context path [{0}] could not be started
managerServlet.started=OK - Запущено приложение по пути контекста [{0}]
managerServlet.stopped=OK - Остановлено приложение по пути контекста [{0}]
managerServlet.storeConfig.noMBean=ОШИБКА - Нет StoreConfig MBean, зарегистрированный на [{0}]
managerServlet.threaddump=OK - JVM thread dump
managerServlet.trustedCertsNotConfigured=Для этого виртуального хоста не настроены доверенные сертификаты безопасности
managerServlet.undeployed=OK - Удалено приложение по пути контекста [{0}]
managerServlet.unknownCommand=ОШИБКА - Неизвестная команда [{0}]
managerServlet.vminfo=OK - VM инфо
statusServlet.complete=Подробный отчёт о состоянии
statusServlet.title=Состояние сервера

View File

@@ -0,0 +1,176 @@
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
htmlManagerServlet.appsAvailable=运行中
htmlManagerServlet.appsExpire=过期会话
htmlManagerServlet.appsName=显示.名称
htmlManagerServlet.appsPath=路径
htmlManagerServlet.appsReload=重新加载
htmlManagerServlet.appsSessions=会话
htmlManagerServlet.appsStart=启动
htmlManagerServlet.appsStop=停止
htmlManagerServlet.appsTasks=命令
htmlManagerServlet.appsTitle=应用程序
htmlManagerServlet.appsUndeploy=卸载
htmlManagerServlet.appsVersion=版本号
htmlManagerServlet.configReloadButton=重复读
htmlManagerServlet.configSslHostName=TLS 主机名字(可选)
htmlManagerServlet.configSslReloadTitle=重新读取 TLS 配置文件
htmlManagerServlet.configTitle=配置
htmlManagerServlet.connectorStateAliveSocketCount=存活套接字总数:
htmlManagerServlet.connectorStateBytesRecieved=收到字节:
htmlManagerServlet.connectorStateBytesSent=发送.字节:
htmlManagerServlet.connectorStateErrorCount=错误数:
htmlManagerServlet.connectorStateHint=P解析和准备request S服务 F结束 R就绪 K存活
htmlManagerServlet.connectorStateMaxProcessingTime=最大处理时间:
htmlManagerServlet.connectorStateMaxThreads=最大线程:
htmlManagerServlet.connectorStateProcessingTime=处理时间:
htmlManagerServlet.connectorStateRequestCount=请求总数:
htmlManagerServlet.connectorStateTableTitleBRecv=接收字节
htmlManagerServlet.connectorStateTableTitleBSent=发送字节:
htmlManagerServlet.connectorStateTableTitleClientAct=客户端(实际)
htmlManagerServlet.connectorStateTableTitleClientForw=客户端(转发)
htmlManagerServlet.connectorStateTableTitleRequest=请求
htmlManagerServlet.connectorStateTableTitleStage=阶段
htmlManagerServlet.connectorStateTableTitleTime=时间
htmlManagerServlet.connectorStateTableTitleVHost=虚拟主机
htmlManagerServlet.connectorStateThreadBusy=当前线程繁忙:
htmlManagerServlet.connectorStateThreadCount=当前线程数:
htmlManagerServlet.deployButton=:)部署
htmlManagerServlet.deployConfig=XML配置文件路径
htmlManagerServlet.deployServer=服务器上.部署的目录或WAR文件
htmlManagerServlet.deployTitle=部署
htmlManagerServlet.deployUpload=要部署的WAR文件
htmlManagerServlet.deployUploadFail=失败 - 部署上传失败,异常信息:[{0}]
htmlManagerServlet.deployUploadFile=选择要上传的WAR文件
htmlManagerServlet.deployUploadInServerXml=失败 - 如果context是定义在server.xml中War文件[{0}]无法上传
htmlManagerServlet.deployUploadNoFile=失败 - 文件上传失败,没有文件
htmlManagerServlet.deployUploadNotWar=失败 - 上传的文件[{0}]必须是一个.war文件
htmlManagerServlet.deployUploadWarExists=失败 - War文件 [{0}] 已存在于服务器上
htmlManagerServlet.deployWar=WAR文件或文件夹路径
htmlManagerServlet.diagnosticsLeak=检查Web应用程序是否在停止、重新加载或取消部署时导致内存泄漏
htmlManagerServlet.diagnosticsLeakButton=发现泄漏
htmlManagerServlet.diagnosticsLeakWarning=诊断检查将触发完整的垃圾收集,在生产系统中使用时要格外小心。
htmlManagerServlet.diagnosticsSsl=TLS连接器配置诊断
htmlManagerServlet.diagnosticsSslConnectorCertsButton=证书
htmlManagerServlet.diagnosticsSslConnectorCertsText=列出已配置的TLS虚拟主机以及各自的证书链
htmlManagerServlet.diagnosticsSslConnectorCipherButton=密.码
htmlManagerServlet.diagnosticsSslConnectorCipherText=列出每个配置好的TLS虚拟主机和密码。
htmlManagerServlet.diagnosticsSslConnectorTrustedCertsButton=认证证书
htmlManagerServlet.diagnosticsSslConnectorTrustedCertsText=列出每个配置好的TLS虚拟主机和认证证书。
htmlManagerServlet.diagnosticsTitle=诊断
htmlManagerServlet.expire.explain=闲置 &ge;
htmlManagerServlet.expire.unit=分钟
htmlManagerServlet.findleaksList=以下web应用程序已停止重新加载、卸载但是它们的类仍然加载在内存中因此导致了内存泄漏使用分析器确认
htmlManagerServlet.findleaksNone=似乎没有任何Web应用程序在停止、重新加载或取消部署时触发内存泄漏。
htmlManagerServlet.helpHtmlManager=HTML管理器帮助
htmlManagerServlet.helpHtmlManagerFile=../docs/html-manager-howto.html
htmlManagerServlet.helpManager=管理者帮助
htmlManagerServlet.helpManagerFile=../docs/manager-howto.html
htmlManagerServlet.jvmFreeMemory=剩余内存:
htmlManagerServlet.jvmMaxMemory=最大内存
htmlManagerServlet.jvmTableTitleInitial=初始化
htmlManagerServlet.jvmTableTitleMaximum=最大.值
htmlManagerServlet.jvmTableTitleMemoryPool=内存.池
htmlManagerServlet.jvmTableTitleTotal=总共
htmlManagerServlet.jvmTableTitleType=类型
htmlManagerServlet.jvmTableTitleUsed=已用
htmlManagerServlet.jvmTotalMemory=总内存
htmlManagerServlet.list=应用程序列表
htmlManagerServlet.manager=管理器
htmlManagerServlet.messageLabel=消息:
htmlManagerServlet.noManager=-
htmlManagerServlet.noVersion=未指定
htmlManagerServlet.osAvailableMemory=可用内存:
htmlManagerServlet.osFreePageFile=可用页文件:
htmlManagerServlet.osKernelTime=内核处理时间:
htmlManagerServlet.osMemoryLoad=加载内存:
htmlManagerServlet.osPhysicalMemory=物理内存
htmlManagerServlet.osTotalPageFile=最大页文件:
htmlManagerServlet.osUserTime=用户态处理实际:
htmlManagerServlet.serverHostname=主机名
htmlManagerServlet.serverIPAddress=IP地址
htmlManagerServlet.serverJVMVendor=JVM提供商
htmlManagerServlet.serverJVMVersion=JVM.版本
htmlManagerServlet.serverOSArch=操作系统架构
htmlManagerServlet.serverOSName=OS.名称
htmlManagerServlet.serverOSVersion=操作系统版本
htmlManagerServlet.serverTitle=服务器信息
htmlManagerServlet.serverVersion=Tomcat.版本
htmlManagerServlet.title=Tomcat Web应用程序管理者
managerServlet.alreadyContext=失败 - 应用程序已存在于路径 [{0}]
managerServlet.certsNotAvailable=在运行期,无法从连接器中获取认证信息
managerServlet.deleteFail=失败 - 不能删除[{0}]。这个文件一直存在会出现问题。
managerServlet.deployFailed=FAIL - 在上下文路径[{0}]下部署应用失败
managerServlet.deployed=OK - 以应用path [{0}] 部署应用
managerServlet.deployedButNotStarted=失败 - 在上下文[{0}]下部署应用程序,但是上下文启动失败。
managerServlet.exception=失败 - 发生异常[{0}]
managerServlet.findleaksFail=失败 - 查找泄漏失败主机非StandardHost示例
managerServlet.findleaksList=OK - 在以下应用程序中发现潜在的内存泄漏
managerServlet.findleaksNone=OK - 没有发现内存泄漏
managerServlet.inService=失败 - 应用程序[{0}]已服务
managerServlet.invalidCommand=失败 - 无效参数,命令[{0}]
managerServlet.invalidPath=失败 - 指定了无效到上下文路径[{0}]
managerServlet.listed=OK - 虚拟主机[{0}]下的应用程序列表
managerServlet.listitem={0}:{1}:{2}:{3}
managerServlet.mkdirFail=失败 - 无法创建目录 [{0}]
managerServlet.noCommand=失败 - 未指定命令
managerServlet.noContext=失败 - 上下文环境[{0}]不存在
managerServlet.noGlobal=失败 - 没有可用的全局 JNDI 资源
managerServlet.noManager=失败 - 路径[{0}]下无管理器存在
managerServlet.noSelf=失败 - 管理器不能重新加载、卸载、停止或者卸载它自身
managerServlet.noWrapper=容器未为当前servlet调用setWrapper()
managerServlet.notDeployed=失败 - 上下文[{0}]定义在server.xml中且可能未卸载
managerServlet.notSslConnector=不允许SSL连接
managerServlet.objectNameFail=FAIL - 不能将为Manager Servlet 注册 object name [{0}]
managerServlet.postCommand=失败 - 尝试通过GET请求使用命令[{0}]但需要POST
managerServlet.reloaded=OK - 上下文路径[{0}]重新加载应用程序
managerServlet.renameFail=失败 - 无法重命名[{0}]为[{1}],这可能这未来部署时出现问题。
managerServlet.resourcesAll=OK - 列出所有类型的全部资源
managerServlet.resourcesType=OK - [{0}]类型全局资源列入清单
managerServlet.saveFail=失败 - 配置保存失败:[{0}]
managerServlet.saved=OK - 服务器配置已保存
managerServlet.savedContext=OK - 上下文[{0}]配置已保存
managerServlet.serverInfo=OK - 服务器信息\n\
Tomcat版本: [{0}]\n\
操作系统名称: [{1}]\n\
操作系统版本: [{2}]\n\
操作系统架构: [{3}]\n\
JVM版本: [{4}]\n\
JVM提供商: [{5}]
managerServlet.sessiondefaultmax=最大会话时间失活间隔是[{0}]分钟
managerServlet.sessions=OK - 上下文路径[{0}]的会话信息
managerServlet.sessiontimeout=失活[{0}]分钟:[{1}]会话
managerServlet.sessiontimeout.expired=失活[{0}]分钟:[{1}]会话过期
managerServlet.sessiontimeout.unlimited=无限制到时间:[{0}]会话
managerServlet.sslConnectorCerts=OK - 连接器/认证链信息
managerServlet.sslConnectorCiphers=OK - Connector/SSL 密码.信息
managerServlet.sslConnectorTrustedCerts=OK - 连接器/认证证书信息
managerServlet.sslReload=OK - 为[{0}]重新加载TLS配置
managerServlet.sslReloadAll=OK - 未所有TLS虚拟主机重新加载TLS配置
managerServlet.sslReloadFail=FAIL - 重新加载TLS配制失败
managerServlet.startFailed=失败 - 上下文路径[{0}]下,应用程序无法启动
managerServlet.started=OK - 在上下文路径[{0}]下启动应用程序
managerServlet.stopped=OK - 上下文路径[{0}]下停止应用程序
managerServlet.storeConfig.noMBean=失败 - [{0}]未发现注册的StoreConfig MBean注册一般是由StoreConfigLifecycleListener执行的。
managerServlet.threaddump=OK - JVM线程转储
managerServlet.trustedCertsNotConfigured=没有为此虚拟主机配置受信任的证书
managerServlet.undeployed=OK - 未部署的应用位于上下文路径[{0}]
managerServlet.unknownCommand=FAIL - 未知命令 [{0}]
managerServlet.vminfo=OK - VM信息
statusServlet.complete=完整的服务器状态
statusServlet.title=服务器状态

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,407 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.catalina.manager;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Set;
import java.util.Vector;
import javax.management.MBeanServer;
import javax.management.MBeanServerNotification;
import javax.management.Notification;
import javax.management.NotificationListener;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.catalina.util.ServerInfo;
import org.apache.tomcat.util.modeler.Registry;
import org.apache.tomcat.util.res.StringManager;
/**
* This servlet will display a complete status of the HTTP/1.1 connector.
*
* @author Remy Maucherat
*/
public class StatusManagerServlet
extends HttpServlet implements NotificationListener {
private static final long serialVersionUID = 1L;
// ----------------------------------------------------- Instance Variables
/**
* MBean server.
*/
protected MBeanServer mBeanServer = null;
/**
* Vector of protocol handlers object names.
*/
protected final Vector<ObjectName> protocolHandlers = new Vector<>();
/**
* Vector of thread pools object names.
*/
protected final Vector<ObjectName> threadPools = new Vector<>();
/**
* Vector of request processors object names.
*/
protected final Vector<ObjectName> requestProcessors = new Vector<>();
/**
* Vector of global request processors object names.
*/
protected final Vector<ObjectName> globalRequestProcessors = new Vector<>();
/**
* The string manager for this package.
*/
protected static final StringManager sm =
StringManager.getManager(Constants.Package);
// --------------------------------------------------------- Public Methods
/**
* Initialize this servlet.
*/
@Override
public void init() throws ServletException {
// Retrieve the MBean server
mBeanServer = Registry.getRegistry(null, null).getMBeanServer();
try {
// Query protocol handlers
String onStr = "*:type=ProtocolHandler,*";
ObjectName objectName = new ObjectName(onStr);
Set<ObjectInstance> set = mBeanServer.queryMBeans(objectName, null);
Iterator<ObjectInstance> iterator = set.iterator();
while (iterator.hasNext()) {
ObjectInstance oi = iterator.next();
protocolHandlers.addElement(oi.getObjectName());
}
// Query Thread Pools
onStr = "*:type=ThreadPool,*";
objectName = new ObjectName(onStr);
set = mBeanServer.queryMBeans(objectName, null);
onStr = "*:type=ThreadPool,*,subType=SocketProperties";
objectName = new ObjectName(onStr);
Set<ObjectInstance> set2 = mBeanServer.queryMBeans(objectName, null);
iterator = set.iterator();
while (iterator.hasNext()) {
ObjectInstance oi = iterator.next();
if (!set2.contains(oi)) {
threadPools.addElement(oi.getObjectName());
}
}
// Query Global Request Processors
onStr = "*:type=GlobalRequestProcessor,*";
objectName = new ObjectName(onStr);
set = mBeanServer.queryMBeans(objectName, null);
iterator = set.iterator();
while (iterator.hasNext()) {
ObjectInstance oi = iterator.next();
globalRequestProcessors.addElement(oi.getObjectName());
}
// Query Request Processors
onStr = "*:type=RequestProcessor,*";
objectName = new ObjectName(onStr);
set = mBeanServer.queryMBeans(objectName, null);
iterator = set.iterator();
while (iterator.hasNext()) {
ObjectInstance oi = iterator.next();
requestProcessors.addElement(oi.getObjectName());
}
// Register with MBean server
onStr = "JMImplementation:type=MBeanServerDelegate";
objectName = new ObjectName(onStr);
mBeanServer.addNotificationListener(objectName, this, null, null);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Finalize this servlet.
*/
@Override
public void destroy() {
// Unregister with MBean server
String onStr = "JMImplementation:type=MBeanServerDelegate";
ObjectName objectName;
try {
objectName = new ObjectName(onStr);
mBeanServer.removeNotificationListener(objectName, this, null, null);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Process a GET request for the specified resource.
*
* @param request The servlet request we are processing
* @param response The servlet response we are creating
*
* @exception IOException if an input/output error occurs
* @exception ServletException if a servlet-specified error occurs
*/
@Override
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
StringManager smClient = StringManager.getManager(
Constants.Package, request.getLocales());
// mode is flag for HTML or XML output
int mode = 0;
// if ?XML=true, set the mode to XML
if (request.getParameter("XML") != null
&& request.getParameter("XML").equals("true")) {
mode = 1;
}
StatusTransformer.setContentType(response, mode);
PrintWriter writer = response.getWriter();
boolean completeStatus = false;
if ((request.getPathInfo() != null)
&& (request.getPathInfo().equals("/all"))) {
completeStatus = true;
}
// use StatusTransformer to output status
Object[] args = new Object[1];
args[0] = request.getContextPath();
StatusTransformer.writeHeader(writer,args,mode);
// Body Header Section
args = new Object[2];
args[0] = request.getContextPath();
if (completeStatus) {
args[1] = smClient.getString("statusServlet.complete");
} else {
args[1] = smClient.getString("statusServlet.title");
}
// use StatusTransformer to output status
StatusTransformer.writeBody(writer,args,mode);
// Manager Section
args = new Object[9];
args[0] = smClient.getString("htmlManagerServlet.manager");
args[1] = response.encodeURL(request.getContextPath() + "/html/list");
args[2] = smClient.getString("htmlManagerServlet.list");
args[3] = // External link
(request.getContextPath() + "/" +
smClient.getString("htmlManagerServlet.helpHtmlManagerFile"));
args[4] = smClient.getString("htmlManagerServlet.helpHtmlManager");
args[5] = // External link
(request.getContextPath() + "/" +
smClient.getString("htmlManagerServlet.helpManagerFile"));
args[6] = smClient.getString("htmlManagerServlet.helpManager");
if (completeStatus) {
args[7] = response.encodeURL
(request.getContextPath() + "/status");
args[8] = smClient.getString("statusServlet.title");
} else {
args[7] = response.encodeURL
(request.getContextPath() + "/status/all");
args[8] = smClient.getString("statusServlet.complete");
}
// use StatusTransformer to output status
StatusTransformer.writeManager(writer,args,mode);
// Server Header Section
args = new Object[9];
args[0] = smClient.getString("htmlManagerServlet.serverTitle");
args[1] = smClient.getString("htmlManagerServlet.serverVersion");
args[2] = smClient.getString("htmlManagerServlet.serverJVMVersion");
args[3] = smClient.getString("htmlManagerServlet.serverJVMVendor");
args[4] = smClient.getString("htmlManagerServlet.serverOSName");
args[5] = smClient.getString("htmlManagerServlet.serverOSVersion");
args[6] = smClient.getString("htmlManagerServlet.serverOSArch");
args[7] = smClient.getString("htmlManagerServlet.serverHostname");
args[8] = smClient.getString("htmlManagerServlet.serverIPAddress");
// use StatusTransformer to output status
StatusTransformer.writePageHeading(writer,args,mode);
// Server Row Section
args = new Object[8];
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");
try {
InetAddress address = InetAddress.getLocalHost();
args[6] = address.getHostName();
args[7] = address.getHostAddress();
} catch (UnknownHostException e) {
args[6] = "-";
args[7] = "-";
}
// use StatusTransformer to output status
StatusTransformer.writeServerInfo(writer, args, mode);
try {
// Display operating system statistics using APR if available
args = new Object[7];
args[0] = smClient.getString("htmlManagerServlet.osPhysicalMemory");
args[1] = smClient.getString("htmlManagerServlet.osAvailableMemory");
args[2] = smClient.getString("htmlManagerServlet.osTotalPageFile");
args[3] = smClient.getString("htmlManagerServlet.osFreePageFile");
args[4] = smClient.getString("htmlManagerServlet.osMemoryLoad");
args[5] = smClient.getString("htmlManagerServlet.osKernelTime");
args[6] = smClient.getString("htmlManagerServlet.osUserTime");
StatusTransformer.writeOSState(writer, mode, args);
// Display virtual machine statistics
args = new Object[9];
args[0] = smClient.getString("htmlManagerServlet.jvmFreeMemory");
args[1] = smClient.getString("htmlManagerServlet.jvmTotalMemory");
args[2] = smClient.getString("htmlManagerServlet.jvmMaxMemory");
args[3] = smClient.getString("htmlManagerServlet.jvmTableTitleMemoryPool");
args[4] = smClient.getString("htmlManagerServlet.jvmTableTitleType");
args[5] = smClient.getString("htmlManagerServlet.jvmTableTitleInitial");
args[6] = smClient.getString("htmlManagerServlet.jvmTableTitleTotal");
args[7] = smClient.getString("htmlManagerServlet.jvmTableTitleMaximum");
args[8] = smClient.getString("htmlManagerServlet.jvmTableTitleUsed");
// use StatusTransformer to output status
StatusTransformer.writeVMState(writer,mode, args);
Enumeration<ObjectName> enumeration = threadPools.elements();
while (enumeration.hasMoreElements()) {
ObjectName objectName = enumeration.nextElement();
String name = objectName.getKeyProperty("name");
args = new Object[19];
args[0] = smClient.getString("htmlManagerServlet.connectorStateMaxThreads");
args[1] = smClient.getString("htmlManagerServlet.connectorStateThreadCount");
args[2] = smClient.getString("htmlManagerServlet.connectorStateThreadBusy");
args[3] = smClient.getString("htmlManagerServlet.connectorStateAliveSocketCount");
args[4] = smClient.getString("htmlManagerServlet.connectorStateMaxProcessingTime");
args[5] = smClient.getString("htmlManagerServlet.connectorStateProcessingTime");
args[6] = smClient.getString("htmlManagerServlet.connectorStateRequestCount");
args[7] = smClient.getString("htmlManagerServlet.connectorStateErrorCount");
args[8] = smClient.getString("htmlManagerServlet.connectorStateBytesRecieved");
args[9] = smClient.getString("htmlManagerServlet.connectorStateBytesSent");
args[10] = smClient.getString("htmlManagerServlet.connectorStateTableTitleStage");
args[11] = smClient.getString("htmlManagerServlet.connectorStateTableTitleTime");
args[12] = smClient.getString("htmlManagerServlet.connectorStateTableTitleBSent");
args[13] = smClient.getString("htmlManagerServlet.connectorStateTableTitleBRecv");
args[14] = smClient.getString("htmlManagerServlet.connectorStateTableTitleClientForw");
args[15] = smClient.getString("htmlManagerServlet.connectorStateTableTitleClientAct");
args[16] = smClient.getString("htmlManagerServlet.connectorStateTableTitleVHost");
args[17] = smClient.getString("htmlManagerServlet.connectorStateTableTitleRequest");
args[18] = smClient.getString("htmlManagerServlet.connectorStateHint");
// use StatusTransformer to output status
StatusTransformer.writeConnectorState
(writer, objectName,
name, mBeanServer, globalRequestProcessors,
requestProcessors, mode, args);
}
if ((request.getPathInfo() != null)
&& (request.getPathInfo().equals("/all"))) {
// Note: Retrieving the full status is much slower
// use StatusTransformer to output status
StatusTransformer.writeDetailedState
(writer, mBeanServer, mode);
}
} catch (Exception e) {
throw new ServletException(e);
}
// use StatusTransformer to output status
StatusTransformer.writeFooter(writer, mode);
}
// ------------------------------------------- NotificationListener Methods
@Override
public void handleNotification(Notification notification,
java.lang.Object handback) {
if (notification instanceof MBeanServerNotification) {
ObjectName objectName =
((MBeanServerNotification) notification).getMBeanName();
if (notification.getType().equals
(MBeanServerNotification.REGISTRATION_NOTIFICATION)) {
String type = objectName.getKeyProperty("type");
if (type != null) {
if (type.equals("ProtocolHandler")) {
protocolHandlers.addElement(objectName);
} else if (type.equals("ThreadPool")) {
threadPools.addElement(objectName);
} else if (type.equals("GlobalRequestProcessor")) {
globalRequestProcessors.addElement(objectName);
} else if (type.equals("RequestProcessor")) {
requestProcessors.addElement(objectName);
}
}
} else if (notification.getType().equals
(MBeanServerNotification.UNREGISTRATION_NOTIFICATION)) {
String type = objectName.getKeyProperty("type");
if (type != null) {
if (type.equals("ProtocolHandler")) {
protocolHandlers.removeElement(objectName);
} else if (type.equals("ThreadPool")) {
threadPools.removeElement(objectName);
} else if (type.equals("GlobalRequestProcessor")) {
globalRequestProcessors.removeElement(objectName);
} else if (type.equals("RequestProcessor")) {
requestProcessors.removeElement(objectName);
}
}
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,91 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.catalina.manager.host;
public class Constants {
public static final String Package = "org.apache.catalina.manager.host";
public static final String REL_EXTERNAL = org.apache.catalina.manager.Constants.REL_EXTERNAL;
public static final String MESSAGE_SECTION =
"<table border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\n" +
" <tr>\n" +
" <td class=\"row-left\" width=\"10%\">" +
"<small><strong>{0}</strong></small>&nbsp;</td>\n" +
" <td class=\"row-left\"><pre>{1}</pre></td>\n" +
" </tr>\n" +
"</table>\n" +
"<br>\n" +
"\n";
public static final String MANAGER_SECTION =
"<table border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\n" +
"<tr>\n" +
" <td colspan=\"4\" class=\"title\">{0}</td>\n" +
"</tr>\n" +
" <tr>\n" +
" <td class=\"row-left\"><a href=\"{1}\">{2}</a></td>\n" +
" <td class=\"row-center\"><a href=\"{3}\" " + REL_EXTERNAL + ">{4}</a></td>\n" +
" <td class=\"row-center\"><a href=\"{5}\" " + REL_EXTERNAL + ">{6}</a></td>\n" +
" <td class=\"row-right\"><a href=\"{7}\">{8}</a></td>\n" +
" </tr>\n" +
"</table>\n" +
"<br>\n" +
"\n";
public static final String SERVER_HEADER_SECTION =
"<table border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\n" +
"<tr>\n" +
" <td colspan=\"6\" class=\"title\">{0}</td>\n" +
"</tr>\n" +
"<tr>\n" +
" <td class=\"header-center\"><small>{1}</small></td>\n" +
" <td class=\"header-center\"><small>{2}</small></td>\n" +
" <td class=\"header-center\"><small>{3}</small></td>\n" +
" <td class=\"header-center\"><small>{4}</small></td>\n" +
" <td class=\"header-center\"><small>{5}</small></td>\n" +
" <td class=\"header-center\"><small>{6}</small></td>\n" +
"</tr>\n";
public static final String SERVER_ROW_SECTION =
"<tr>\n" +
" <td class=\"row-center\"><small>{0}</small></td>\n" +
" <td class=\"row-center\"><small>{1}</small></td>\n" +
" <td class=\"row-center\"><small>{2}</small></td>\n" +
" <td class=\"row-center\"><small>{3}</small></td>\n" +
" <td class=\"row-center\"><small>{4}</small></td>\n" +
" <td class=\"row-center\"><small>{5}</small></td>\n" +
"</tr>\n" +
"</table>\n" +
"<br>\n" +
"\n";
public static final String HTML_TAIL_SECTION =
"<hr size=\"1\" noshade=\"noshade\">\n" +
"<center><font size=\"-1\" color=\"#525D76\">\n" +
" <em>Copyright &copy; 1999-2020, Apache Software Foundation</em>" +
"</font></center>\n" +
"\n" +
"</body>\n" +
"</html>";
public static final String CHARSET="utf-8";
}

View File

@@ -0,0 +1,598 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.catalina.manager.host;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.URLEncoder;
import java.text.MessageFormat;
import java.util.Map;
import java.util.TreeMap;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.catalina.Container;
import org.apache.catalina.Host;
import org.apache.catalina.util.ServerInfo;
import org.apache.tomcat.util.res.StringManager;
import org.apache.tomcat.util.security.Escape;
/**
* Servlet that enables remote management of the virtual hosts deployed
* on the server. Normally, this functionality will be protected by a security
* constraint in the web application deployment descriptor. However,
* this requirement can be relaxed during testing.
* <p>
* The difference between the <code>HostManagerServlet</code> and this
* Servlet is that this Servlet prints out a HTML interface which
* makes it easier to administrate.
* <p>
* However if you use a software that parses the output of
* <code>HostManagerServlet</code> you won't be able to upgrade
* to this Servlet since the output are not in the
* same format as from <code>HostManagerServlet</code>
*
* @author Bip Thelin
* @author Malcolm Edgar
* @author Glenn L. Nielsen
* @author Peter Rossbach
* @see org.apache.catalina.manager.ManagerServlet
*/
public final class HTMLHostManagerServlet extends HostManagerServlet {
private static final long serialVersionUID = 1L;
// --------------------------------------------------------- Public Methods
/**
* Process a GET request for the specified resource.
*
* @param request The servlet request we are processing
* @param response The servlet response we are creating
*
* @exception IOException if an input/output error occurs
* @exception ServletException if a servlet-specified error occurs
*/
@Override
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
StringManager smClient = StringManager.getManager(
Constants.Package, request.getLocales());
// Identify the request parameters that we need
String command = request.getPathInfo();
// 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) {
// No command == list
} else if (command.equals("/list")) {
// Nothing to do - always generate list
} else if (command.equals("/add") || command.equals("/remove") ||
command.equals("/start") || command.equals("/stop") ||
command.equals("/persist")) {
message = smClient.getString(
"hostManagerServlet.postCommand", command);
} else {
message = smClient.getString(
"hostManagerServlet.unknownCommand", command);
}
list(request, response, message, smClient);
}
/**
* Process a POST request for the specified resource.
*
* @param request The servlet request we are processing
* @param response The servlet response we are creating
*
* @exception IOException if an input/output error occurs
* @exception ServletException if a servlet-specified error occurs
*/
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
StringManager smClient = StringManager.getManager(
Constants.Package, request.getLocales());
// Identify the request parameters that we need
String command = request.getPathInfo();
String name = request.getParameter("name");
// 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) {
// No command == list
} else if (command.equals("/add")) {
message = add(request, name, smClient);
} else if (command.equals("/remove")) {
message = remove(name, smClient);
} else if (command.equals("/start")) {
message = start(name, smClient);
} else if (command.equals("/stop")) {
message = stop(name, smClient);
} else if (command.equals("/persist")) {
message = persist(smClient);
} else {
//Try GET
doGet(request, response);
}
list(request, response, message, smClient);
}
/**
* Add a host using the specified parameters.
*
* @param request The Servlet request
* @param name Host name
* @param smClient StringManager for the client's locale
* @return output
*/
protected String add(HttpServletRequest request,String name,
StringManager smClient) {
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
super.add(request,printWriter,name,true, smClient);
return stringWriter.toString();
}
/**
* Remove the specified host.
*
* @param name Host name
* @param smClient StringManager for the client's locale
* @return output
*/
protected String remove(String name, StringManager smClient) {
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
super.remove(printWriter, name, smClient);
return stringWriter.toString();
}
/**
* Start the host with the specified name.
*
* @param name Host name
* @param smClient StringManager for the client's locale
* @return output
*/
protected String start(String name, StringManager smClient) {
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
super.start(printWriter, name, smClient);
return stringWriter.toString();
}
/**
* Stop the host with the specified name.
*
* @param name Host name
* @param smClient StringManager for the client's locale
* @return output
*/
protected String stop(String name, StringManager smClient) {
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
super.stop(printWriter, name, smClient);
return stringWriter.toString();
}
/**
* Persist the current configuration to server.xml.
*
* @param smClient i18n resources localized for the client
* @return output
*/
protected String persist(StringManager smClient) {
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
super.persist(printWriter, smClient);
return stringWriter.toString();
}
/**
* Render a HTML list of the currently active Contexts in our virtual host,
* and memory and server status information.
*
* @param request The request
* @param response The response
* @param message a message to display
* @param smClient StringManager for the client's locale
* @throws IOException An IO error occurred
*/
public void list(HttpServletRequest request,
HttpServletResponse response,
String message,
StringManager smClient) throws IOException {
if (debug >= 1) {
log(sm.getString("hostManagerServlet.list", engine.getName()));
}
PrintWriter writer = response.getWriter();
// HTML Header Section
writer.print(org.apache.catalina.manager.Constants.HTML_HEADER_SECTION);
// Body Header Section
Object[] args = new Object[2];
args[0] = request.getContextPath();
args[1] = smClient.getString("htmlHostManagerServlet.title");
writer.print(MessageFormat.format(
org.apache.catalina.manager.Constants.BODY_HEADER_SECTION, args));
// Message Section
args = new Object[3];
args[0] = smClient.getString("htmlHostManagerServlet.messageLabel");
if (message == null || message.length() == 0) {
args[1] = "OK";
} else {
args[1] = Escape.htmlElementContent(message);
}
writer.print(MessageFormat.format(Constants.MESSAGE_SECTION, args));
// Manager Section
args = new Object[9];
args[0] = smClient.getString("htmlHostManagerServlet.manager");
args[1] = response.encodeURL(request.getContextPath() + "/html/list");
args[2] = smClient.getString("htmlHostManagerServlet.list");
args[3] = // External link
(request.getContextPath() + "/" +
smClient.getString("htmlHostManagerServlet.helpHtmlManagerFile"));
args[4] = smClient.getString("htmlHostManagerServlet.helpHtmlManager");
args[5] = // External link
(request.getContextPath() + "/" +
smClient.getString("htmlHostManagerServlet.helpManagerFile"));
args[6] = smClient.getString("htmlHostManagerServlet.helpManager");
args[7] = response.encodeURL("/manager/status");
args[8] = smClient.getString("statusServlet.title");
writer.print(MessageFormat.format(Constants.MANAGER_SECTION, args));
// Hosts Header Section
args = new Object[3];
args[0] = smClient.getString("htmlHostManagerServlet.hostName");
args[1] = smClient.getString("htmlHostManagerServlet.hostAliases");
args[2] = smClient.getString("htmlHostManagerServlet.hostTasks");
writer.print(MessageFormat.format(HOSTS_HEADER_SECTION, args));
// Hosts Row Section
// Create sorted map of host names.
Container[] children = engine.findChildren();
String hostNames[] = new String[children.length];
for (int i = 0; i < children.length; i++)
hostNames[i] = children[i].getName();
TreeMap<String,String> sortedHostNamesMap = new TreeMap<>();
for (int i = 0; i < hostNames.length; i++) {
String displayPath = hostNames[i];
sortedHostNamesMap.put(displayPath, hostNames[i]);
}
String hostsStart =
smClient.getString("htmlHostManagerServlet.hostsStart");
String hostsStop =
smClient.getString("htmlHostManagerServlet.hostsStop");
String hostsRemove =
smClient.getString("htmlHostManagerServlet.hostsRemove");
String hostThis =
smClient.getString("htmlHostManagerServlet.hostThis");
for (Map.Entry<String, String> entry : sortedHostNamesMap.entrySet()) {
String hostName = entry.getKey();
Host host = (Host) engine.findChild(hostName);
if (host != null ) {
args = new Object[2];
args[0] = // External link
Escape.htmlElementContent(hostName);
String[] aliases = host.findAliases();
StringBuilder buf = new StringBuilder();
if (aliases.length > 0) {
buf.append(aliases[0]);
for (int j = 1; j < aliases.length; j++) {
buf.append(", ").append(aliases[j]);
}
}
if (buf.length() == 0) {
buf.append("&nbsp;");
args[1] = buf.toString();
} else {
args[1] = Escape.htmlElementContent(buf.toString());
}
writer.print
(MessageFormat.format(HOSTS_ROW_DETAILS_SECTION, args));
args = new Object[5];
if (host.getState().isAvailable()) {
args[0] = response.encodeURL
(request.getContextPath() +
"/html/stop?name=" +
URLEncoder.encode(hostName, "UTF-8"));
args[1] = hostsStop;
} else {
args[0] = response.encodeURL
(request.getContextPath() +
"/html/start?name=" +
URLEncoder.encode(hostName, "UTF-8"));
args[1] = hostsStart;
}
args[2] = response.encodeURL
(request.getContextPath() +
"/html/remove?name=" +
URLEncoder.encode(hostName, "UTF-8"));
args[3] = hostsRemove;
args[4] = hostThis;
if (host == this.installedHost) {
writer.print(MessageFormat.format(
MANAGER_HOST_ROW_BUTTON_SECTION, args));
} else {
writer.print(MessageFormat.format(
HOSTS_ROW_BUTTON_SECTION, args));
}
}
}
// Add Section
args = new Object[6];
args[0] = smClient.getString("htmlHostManagerServlet.addTitle");
args[1] = smClient.getString("htmlHostManagerServlet.addHost");
args[2] = response.encodeURL(request.getContextPath() + "/html/add");
args[3] = smClient.getString("htmlHostManagerServlet.addName");
args[4] = smClient.getString("htmlHostManagerServlet.addAliases");
args[5] = smClient.getString("htmlHostManagerServlet.addAppBase");
writer.print(MessageFormat.format(ADD_SECTION_START, args));
args = new Object[3];
args[0] = smClient.getString("htmlHostManagerServlet.addAutoDeploy");
args[1] = "autoDeploy";
args[2] = "checked";
writer.print(MessageFormat.format(ADD_SECTION_BOOLEAN, args));
args[0] = smClient.getString(
"htmlHostManagerServlet.addDeployOnStartup");
args[1] = "deployOnStartup";
args[2] = "checked";
writer.print(MessageFormat.format(ADD_SECTION_BOOLEAN, args));
args[0] = smClient.getString("htmlHostManagerServlet.addDeployXML");
args[1] = "deployXML";
args[2] = "checked";
writer.print(MessageFormat.format(ADD_SECTION_BOOLEAN, args));
args[0] = smClient.getString("htmlHostManagerServlet.addUnpackWARs");
args[1] = "unpackWARs";
args[2] = "checked";
writer.print(MessageFormat.format(ADD_SECTION_BOOLEAN, args));
args[0] = smClient.getString("htmlHostManagerServlet.addManager");
args[1] = "manager";
args[2] = "checked";
writer.print(MessageFormat.format(ADD_SECTION_BOOLEAN, args));
args[0] = smClient.getString("htmlHostManagerServlet.addCopyXML");
args[1] = "copyXML";
args[2] = "";
writer.print(MessageFormat.format(ADD_SECTION_BOOLEAN, args));
args = new Object[1];
args[0] = smClient.getString("htmlHostManagerServlet.addButton");
writer.print(MessageFormat.format(ADD_SECTION_END, args));
// Persist Configuration Section
args = new Object[4];
args[0] = smClient.getString("htmlHostManagerServlet.persistTitle");
args[1] = response.encodeURL(request.getContextPath() + "/html/persist");
args[2] = smClient.getString("htmlHostManagerServlet.persistAllButton");
args[3] = smClient.getString("htmlHostManagerServlet.persistAll");
writer.print(MessageFormat.format(PERSIST_SECTION, args));
// Server Header Section
args = new Object[7];
args[0] = smClient.getString("htmlHostManagerServlet.serverTitle");
args[1] = smClient.getString("htmlHostManagerServlet.serverVersion");
args[2] = smClient.getString("htmlHostManagerServlet.serverJVMVersion");
args[3] = smClient.getString("htmlHostManagerServlet.serverJVMVendor");
args[4] = smClient.getString("htmlHostManagerServlet.serverOSName");
args[5] = smClient.getString("htmlHostManagerServlet.serverOSVersion");
args[6] = smClient.getString("htmlHostManagerServlet.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();
}
// ------------------------------------------------------ Private Constants
// These HTML sections are broken in relatively small sections, because of
// limited number of substitutions MessageFormat can process
// (maximum of 10).
private static final String HOSTS_HEADER_SECTION =
"<table border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\n" +
"<tr>\n" +
" <td colspan=\"5\" class=\"title\">{0}</td>\n" +
"</tr>\n" +
"<tr>\n" +
" <td class=\"header-left\"><small>{0}</small></td>\n" +
" <td class=\"header-center\"><small>{1}</small></td>\n" +
" <td class=\"header-center\"><small>{2}</small></td>\n" +
"</tr>\n";
private static final String HOSTS_ROW_DETAILS_SECTION =
"<tr>\n" +
" <td class=\"row-left\"><small><a href=\"http://{0}\" "
+ Constants.REL_EXTERNAL + ">{0}</a>" +
"</small></td>\n" +
" <td class=\"row-center\"><small>{1}</small></td>\n";
private static final String MANAGER_HOST_ROW_BUTTON_SECTION =
" <td class=\"row-left\">\n" +
" <small>{4}</small>\n" +
" </td>\n" +
"</tr>\n";
private static final String HOSTS_ROW_BUTTON_SECTION =
" <td class=\"row-left\" NOWRAP>\n" +
" <form class=\"inline\" method=\"POST\" action=\"{0}\">" +
" <small><input type=\"submit\" value=\"{1}\"></small>" +
" </form>\n" +
" <form class=\"inline\" method=\"POST\" action=\"{2}\">" +
" <small><input type=\"submit\" value=\"{3}\"></small>" +
" </form>\n" +
" </td>\n" +
"</tr>\n";
private static final String ADD_SECTION_START =
"</table>\n" +
"<br>\n" +
"<table border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\n" +
"<tr>\n" +
" <td colspan=\"2\" class=\"title\">{0}</td>\n" +
"</tr>\n" +
"<tr>\n" +
" <td colspan=\"2\" class=\"header-left\"><small>{1}</small></td>\n" +
"</tr>\n" +
"<tr>\n" +
" <td colspan=\"2\">\n" +
"<form method=\"post\" action=\"{2}\">\n" +
"<table cellspacing=\"0\" cellpadding=\"3\">\n" +
"<tr>\n" +
" <td class=\"row-right\">\n" +
" <small>{3}</small>\n" +
" </td>\n" +
" <td class=\"row-left\">\n" +
" <input type=\"text\" name=\"name\" size=\"20\">\n" +
" </td>\n" +
"</tr>\n" +
"<tr>\n" +
" <td class=\"row-right\">\n" +
" <small>{4}</small>\n" +
" </td>\n" +
" <td class=\"row-left\">\n" +
" <input type=\"text\" name=\"aliases\" size=\"64\">\n" +
" </td>\n" +
"</tr>\n" +
"<tr>\n" +
" <td class=\"row-right\">\n" +
" <small>{5}</small>\n" +
" </td>\n" +
" <td class=\"row-left\">\n" +
" <input type=\"text\" name=\"appBase\" size=\"64\">\n" +
" </td>\n" +
"</tr>\n" ;
private static final String ADD_SECTION_BOOLEAN =
"<tr>\n" +
" <td class=\"row-right\">\n" +
" <small>{0}</small>\n" +
" </td>\n" +
" <td class=\"row-left\">\n" +
" <input type=\"checkbox\" name=\"{1}\" {2}>\n" +
" </td>\n" +
"</tr>\n" ;
private static final String ADD_SECTION_END =
"<tr>\n" +
" <td class=\"row-right\">\n" +
" &nbsp;\n" +
" </td>\n" +
" <td class=\"row-left\">\n" +
" <input type=\"submit\" value=\"{0}\">\n" +
" </td>\n" +
"</tr>\n" +
"</table>\n" +
"</form>\n" +
"</td>\n" +
"</tr>\n" +
"</table>\n" +
"<br>\n" +
"\n";
private static final String PERSIST_SECTION =
"<table border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\n" +
"<tr>\n" +
" <td class=\"title\">{0}</td>\n" +
"</tr>\n" +
"<tr>\n" +
" <td class=\"row-left\">\n" +
" <form class=\"inline\" method=\"POST\" action=\"{1}\">" +
" <small><input type=\"submit\" value=\"{2}\"></small>" +
" </form> {3}\n" +
" </td>\n" +
"</tr>\n" +
"</table>\n" +
"<br>\n" +
"\n";
}

View File

@@ -0,0 +1,706 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.catalina.manager.host;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.lang.management.ManagementFactory;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.StringTokenizer;
import javax.management.InstanceNotFoundException;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.servlet.ServletException;
import javax.servlet.UnavailableException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.catalina.Container;
import org.apache.catalina.ContainerServlet;
import org.apache.catalina.Context;
import org.apache.catalina.Engine;
import org.apache.catalina.Host;
import org.apache.catalina.Wrapper;
import org.apache.catalina.core.ContainerBase;
import org.apache.catalina.core.StandardHost;
import org.apache.catalina.startup.HostConfig;
import org.apache.tomcat.util.ExceptionUtils;
import org.apache.tomcat.util.buf.StringUtils;
import org.apache.tomcat.util.res.StringManager;
/**
* Servlet that enables remote management of the virtual hosts installed
* on the server. Normally, this functionality will be protected by
* a security constraint in the web application deployment descriptor.
* However, this requirement can be relaxed during testing.
* <p>
* This servlet examines the value returned by <code>getPathInfo()</code>
* and related query parameters to determine what action is being requested.
* The following actions and parameters (starting after the servlet path)
* are supported:
* <ul>
* <li><b>/add?name={host-name}&amp;aliases={host-aliases}&amp;manager={manager}</b> -
* Create and add a new virtual host. The <code>host-name</code> attribute
* indicates the name of the new host. The <code>host-aliases</code>
* attribute is a comma separated list of the host alias names.
* The <code>manager</code> attribute is a boolean value indicating if the
* webapp manager will be installed in the newly created host (optional,
* false by default).</li>
* <li><b>/remove?name={host-name}</b> - Remove a virtual host.
* The <code>host-name</code> attribute indicates the name of the host.
* </li>
* <li><b>/list</b> - List the virtual hosts installed on the server.
* Each host will be listed with the following format
* <code>host-name#host-aliases</code>.</li>
* <li><b>/start?name={host-name}</b> - Start the virtual host.</li>
* <li><b>/stop?name={host-name}</b> - Stop the virtual host.</li>
* </ul>
* <p>
* <b>NOTE</b> - Attempting to stop or remove the host containing
* this servlet itself will not succeed. Therefore, this servlet should
* generally be deployed in a separate virtual host.
* <p>
* The following servlet initialization parameters are recognized:
* <ul>
* <li><b>debug</b> - The debugging detail level that controls the amount
* of information that is logged by this servlet. Default is zero.
* </ul>
*
* @author Craig R. McClanahan
* @author Remy Maucherat
*/
public class HostManagerServlet
extends HttpServlet implements ContainerServlet {
private static final long serialVersionUID = 1L;
// ----------------------------------------------------- Instance Variables
/**
* The Context container associated with our web application.
*/
protected transient Context context = null;
/**
* The debugging detail level for this servlet.
*/
protected int debug = 1;
/**
* The associated host.
*/
protected transient Host installedHost = null;
/**
* The associated engine.
*/
protected transient Engine engine = null;
/**
* The string manager for this package.
*/
protected static final StringManager sm =
StringManager.getManager(Constants.Package);
/**
* The Wrapper container associated with this servlet.
*/
protected transient Wrapper wrapper = null;
// ----------------------------------------------- ContainerServlet Methods
/**
* Return the Wrapper with which we are associated.
*/
@Override
public Wrapper getWrapper() {
return this.wrapper;
}
/**
* Set the Wrapper with which we are associated.
*
* @param wrapper The new wrapper
*/
@Override
public void setWrapper(Wrapper wrapper) {
this.wrapper = wrapper;
if (wrapper == null) {
context = null;
installedHost = null;
engine = null;
} else {
context = (Context) wrapper.getParent();
installedHost = (Host) context.getParent();
engine = (Engine) installedHost.getParent();
}
}
// --------------------------------------------------------- Public Methods
/**
* Finalize this servlet.
*/
@Override
public void destroy() {
// No actions necessary
}
/**
* Process a GET request for the specified resource.
*
* @param request The servlet request we are processing
* @param response The servlet response we are creating
*
* @exception IOException if an input/output error occurs
* @exception ServletException if a servlet-specified error occurs
*/
@Override
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
StringManager smClient = StringManager.getManager(
Constants.Package, request.getLocales());
// Identify the request parameters that we need
String command = request.getPathInfo();
if (command == null)
command = request.getServletPath();
String name = request.getParameter("name");
// Prepare our output writer to generate the response message
response.setContentType("text/plain; charset=" + Constants.CHARSET);
// Stop older versions of IE thinking they know best. We set text/plain
// in the line above for a reason. IE's behaviour is unwanted at best
// and dangerous at worst.
response.setHeader("X-Content-Type-Options", "nosniff");
PrintWriter writer = response.getWriter();
// Process the requested command
if (command == null) {
writer.println(smClient.getString("hostManagerServlet.noCommand"));
} else if (command.equals("/add")) {
add(request, writer, name, false, smClient);
} else if (command.equals("/remove")) {
remove(writer, name, smClient);
} else if (command.equals("/list")) {
list(writer, smClient);
} else if (command.equals("/start")) {
start(writer, name, smClient);
} else if (command.equals("/stop")) {
stop(writer, name, smClient);
} else if (command.equals("/persist")) {
persist(writer, smClient);
} else {
writer.println(smClient.getString("hostManagerServlet.unknownCommand",
command));
}
// Finish up the response
writer.flush();
writer.close();
}
/**
* Add host with the given parameters.
*
* @param request The request
* @param writer The output writer
* @param name The host name
* @param htmlMode Flag value
* @param smClient StringManager for the client's locale
*/
protected void add(HttpServletRequest request, PrintWriter writer,
String name, boolean htmlMode, StringManager smClient) {
String aliases = request.getParameter("aliases");
String appBase = request.getParameter("appBase");
boolean manager = booleanParameter(request, "manager", false, htmlMode);
boolean autoDeploy = booleanParameter(request, "autoDeploy", true, htmlMode);
boolean deployOnStartup = booleanParameter(request, "deployOnStartup", true, htmlMode);
boolean deployXML = booleanParameter(request, "deployXML", true, htmlMode);
boolean unpackWARs = booleanParameter(request, "unpackWARs", true, htmlMode);
boolean copyXML = booleanParameter(request, "copyXML", false, htmlMode);
add(writer, name, aliases, appBase, manager,
autoDeploy,
deployOnStartup,
deployXML,
unpackWARs,
copyXML,
smClient);
}
/**
* Extract boolean value from checkbox with default.
* @param request The Servlet request
* @param parameter The parameter name
* @param theDefault Default value
* @param htmlMode Flag value
* @return the boolean value for the parameter
*/
protected boolean booleanParameter(HttpServletRequest request,
String parameter, boolean theDefault, boolean htmlMode) {
String value = request.getParameter(parameter);
boolean booleanValue = theDefault;
if (value != null) {
if (htmlMode) {
if (value.equals("on")) {
booleanValue = true;
}
} else if (theDefault) {
if (value.equals("false")) {
booleanValue = false;
}
} else if (value.equals("true")) {
booleanValue = true;
}
} else if (htmlMode)
booleanValue = false;
return booleanValue;
}
@Override
public void init() throws ServletException {
// Ensure that our ContainerServlet properties have been set
if ((wrapper == null) || (context == null))
throw new UnavailableException
(sm.getString("hostManagerServlet.noWrapper"));
// Set our properties from the initialization parameters
String value = null;
try {
value = getServletConfig().getInitParameter("debug");
debug = Integer.parseInt(value);
} catch (Throwable t) {
ExceptionUtils.handleThrowable(t);
}
}
// -------------------------------------------------------- Private Methods
/**
* Add a host using the specified parameters.
*
* @param writer Writer to render results to
* @param name host name
* @param aliases comma separated alias list
* @param appBase application base for the host
* @param manager should the manager webapp be deployed to the new host ?
* @param autoDeploy Flag value
* @param deployOnStartup Flag value
* @param deployXML Flag value
* @param unpackWARs Flag value
* @param copyXML Flag value
* @param smClient StringManager for the client's locale
*/
protected synchronized void add
(PrintWriter writer, String name, String aliases, String appBase,
boolean manager,
boolean autoDeploy,
boolean deployOnStartup,
boolean deployXML,
boolean unpackWARs,
boolean copyXML,
StringManager smClient) {
if (debug >= 1) {
log(sm.getString("hostManagerServlet.add", name));
}
// Validate the requested host name
if ((name == null) || name.length() == 0) {
writer.println(smClient.getString(
"hostManagerServlet.invalidHostName", name));
return;
}
// Check if host already exists
if (engine.findChild(name) != null) {
writer.println(smClient.getString(
"hostManagerServlet.alreadyHost", name));
return;
}
// Validate and create appBase
File appBaseFile = null;
File file = null;
String applicationBase = appBase;
if (applicationBase == null || applicationBase.length() == 0) {
applicationBase = name;
}
file = new File(applicationBase);
if (!file.isAbsolute())
file = new File(engine.getCatalinaBase(), file.getPath());
try {
appBaseFile = file.getCanonicalFile();
} catch (IOException e) {
appBaseFile = file;
}
if (!appBaseFile.mkdirs() && !appBaseFile.isDirectory()) {
writer.println(smClient.getString(
"hostManagerServlet.appBaseCreateFail",
appBaseFile.toString(), name));
return;
}
// Create base for config files
File configBaseFile = getConfigBase(name);
// Copy manager.xml if requested
if (manager) {
if (configBaseFile == null) {
writer.println(smClient.getString(
"hostManagerServlet.configBaseCreateFail", name));
return;
}
try (InputStream is = getServletContext().getResourceAsStream("/manager.xml")) {
Path dest = (new File(configBaseFile, "manager.xml")).toPath();
Files.copy(is, dest);
} catch (IOException e) {
writer.println(smClient.getString("hostManagerServlet.managerXml"));
return;
}
}
StandardHost host = new StandardHost();
host.setAppBase(applicationBase);
host.setName(name);
host.addLifecycleListener(new HostConfig());
// Add host aliases
if ((aliases != null) && !("".equals(aliases))) {
StringTokenizer tok = new StringTokenizer(aliases, ", ");
while (tok.hasMoreTokens()) {
host.addAlias(tok.nextToken());
}
}
host.setAutoDeploy(autoDeploy);
host.setDeployOnStartup(deployOnStartup);
host.setDeployXML(deployXML);
host.setUnpackWARs(unpackWARs);
host.setCopyXML(copyXML);
// Add new host
try {
engine.addChild(host);
} catch (Exception e) {
writer.println(smClient.getString("hostManagerServlet.exception",
e.toString()));
return;
}
host = (StandardHost) engine.findChild(name);
if (host != null) {
writer.println(smClient.getString("hostManagerServlet.addSuccess", name));
} else {
// Something failed
writer.println(smClient.getString(
"hostManagerServlet.addFailed", name));
}
}
/**
* Remove the specified host.
*
* @param writer Writer to render results to
* @param name host name
* @param smClient StringManager for the client's locale
*/
protected synchronized void remove(PrintWriter writer, String name,
StringManager smClient) {
if (debug >= 1) {
log(sm.getString("hostManagerServlet.remove", name));
}
// Validate the requested host name
if ((name == null) || name.length() == 0) {
writer.println(smClient.getString(
"hostManagerServlet.invalidHostName", name));
return;
}
// Check if host exists
if (engine.findChild(name) == null) {
writer.println(smClient.getString(
"hostManagerServlet.noHost", name));
return;
}
// Prevent removing our own host
if (engine.findChild(name) == installedHost) {
writer.println(smClient.getString(
"hostManagerServlet.cannotRemoveOwnHost", name));
return;
}
// Remove host
// Note that the host will not get physically removed
try {
Container child = engine.findChild(name);
engine.removeChild(child);
if ( child instanceof ContainerBase ) ((ContainerBase)child).destroy();
} catch (Exception e) {
writer.println(smClient.getString("hostManagerServlet.exception",
e.toString()));
return;
}
Host host = (StandardHost) engine.findChild(name);
if (host == null) {
writer.println(smClient.getString(
"hostManagerServlet.removeSuccess", name));
} else {
// Something failed
writer.println(smClient.getString(
"hostManagerServlet.removeFailed", name));
}
}
/**
* Render a list of the currently active Contexts in our virtual host.
*
* @param writer Writer to render to
* @param smClient StringManager for the client's locale
*/
protected void list(PrintWriter writer, StringManager smClient) {
if (debug >= 1) {
log(sm.getString("hostManagerServlet.list", engine.getName()));
}
writer.println(smClient.getString("hostManagerServlet.listed",
engine.getName()));
Container[] hosts = engine.findChildren();
for (int i = 0; i < hosts.length; i++) {
Host host = (Host) hosts[i];
String name = host.getName();
String[] aliases = host.findAliases();
writer.println(smClient.getString("hostManagerServlet.listitem",
name, StringUtils.join(aliases)));
}
}
/**
* Start the host with the specified name.
*
* @param writer Writer to render to
* @param name Host name
* @param smClient StringManager for the client's locale
*/
protected void start(PrintWriter writer, String name,
StringManager smClient) {
if (debug >= 1) {
log(sm.getString("hostManagerServlet.start", name));
}
// Validate the requested host name
if ((name == null) || name.length() == 0) {
writer.println(smClient.getString(
"hostManagerServlet.invalidHostName", name));
return;
}
Container host = engine.findChild(name);
// Check if host exists
if (host == null) {
writer.println(smClient.getString(
"hostManagerServlet.noHost", name));
return;
}
// Prevent starting our own host
if (host == installedHost) {
writer.println(smClient.getString(
"hostManagerServlet.cannotStartOwnHost", name));
return;
}
// Don't start host if already started
if (host.getState().isAvailable()) {
writer.println(smClient.getString(
"hostManagerServlet.alreadyStarted", name));
return;
}
// Start host
try {
host.start();
writer.println(smClient.getString(
"hostManagerServlet.started", name));
} catch (Exception e) {
getServletContext().log
(sm.getString("hostManagerServlet.startFailed", name), e);
writer.println(smClient.getString(
"hostManagerServlet.startFailed", name));
writer.println(smClient.getString(
"hostManagerServlet.exception", e.toString()));
}
}
/**
* Stop the host with the specified name.
*
* @param writer Writer to render to
* @param name Host name
* @param smClient StringManager for the client's locale
*/
protected void stop(PrintWriter writer, String name,
StringManager smClient) {
if (debug >= 1) {
log(sm.getString("hostManagerServlet.stop", name));
}
// Validate the requested host name
if ((name == null) || name.length() == 0) {
writer.println(smClient.getString(
"hostManagerServlet.invalidHostName", name));
return;
}
Container host = engine.findChild(name);
// Check if host exists
if (host == null) {
writer.println(smClient.getString("hostManagerServlet.noHost",
name));
return;
}
// Prevent stopping our own host
if (host == installedHost) {
writer.println(smClient.getString(
"hostManagerServlet.cannotStopOwnHost", name));
return;
}
// Don't stop host if already stopped
if (!host.getState().isAvailable()) {
writer.println(smClient.getString(
"hostManagerServlet.alreadyStopped", name));
return;
}
// Stop host
try {
host.stop();
writer.println(smClient.getString("hostManagerServlet.stopped",
name));
} catch (Exception e) {
getServletContext().log(sm.getString(
"hostManagerServlet.stopFailed", name), e);
writer.println(smClient.getString("hostManagerServlet.stopFailed",
name));
writer.println(smClient.getString("hostManagerServlet.exception",
e.toString()));
}
}
/**
* Persist the current configuration to server.xml.
*
* @param writer Writer to render to
* @param smClient i18n resources localized for the client
*/
protected void persist(PrintWriter writer, StringManager smClient) {
if (debug >= 1) {
log(sm.getString("hostManagerServlet.persist"));
}
try {
MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer();
ObjectName oname = new ObjectName(engine.getDomain() + ":type=StoreConfig");
platformMBeanServer.invoke(oname, "storeConfig", null, null);
writer.println(smClient.getString("hostManagerServlet.persisted"));
} catch (Exception e) {
getServletContext().log(sm.getString("hostManagerServlet.persistFailed"), e);
writer.println(smClient.getString("hostManagerServlet.persistFailed"));
// catch InstanceNotFoundException when StoreConfig is not enabled instead of printing
// the failure message
if (e instanceof InstanceNotFoundException) {
writer.println("Please enable StoreConfig to use this feature.");
} else {
writer.println(smClient.getString("hostManagerServlet.exception", e.toString()));
}
return;
}
}
// -------------------------------------------------------- Support Methods
/**
* Get config base.
* @param hostName The host name
* @return the config base for the host
*/
protected File getConfigBase(String hostName) {
File configBase = new File(context.getCatalinaBase(), "conf");
if (!configBase.exists()) {
return null;
}
if (engine != null) {
configBase = new File(configBase, engine.getName());
}
if (installedHost != null) {
configBase = new File(configBase, hostName);
}
if (!configBase.mkdirs() && !configBase.isDirectory()) {
return null;
}
return configBase;
}
}

View File

@@ -0,0 +1,90 @@
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
hostManagerServlet.add=add: Adding host [{0}]
hostManagerServlet.addFailed=FAIL - Failed to add host [{0}]
hostManagerServlet.addSuccess=OK - Host [{0}] added
hostManagerServlet.alreadyHost=FAIL - Host already exists with host name [{0}]
hostManagerServlet.alreadyStarted=FAIL - Host [{0}] is already started
hostManagerServlet.alreadyStopped=FAIL - Host [{0}] is already stopped
hostManagerServlet.appBaseCreateFail=FAIL - Failed to create appBase directory [{0}] for host [{1}]
hostManagerServlet.cannotRemoveOwnHost=FAIL - Cannot remove your own host [{0}]
hostManagerServlet.cannotStartOwnHost=FAIL - Cannot start your own host [{0}]
hostManagerServlet.cannotStopOwnHost=FAIL - Cannot stop your own host [{0}]
hostManagerServlet.configBaseCreateFail=FAIL - Failed to identify configBase directory for host [{0}]
hostManagerServlet.exception=FAIL - Encountered exception [{0}]
hostManagerServlet.invalidHostName=FAIL - Invalid host name [{0}] was specified
hostManagerServlet.list=list: Listing hosts for engine [{0}]
hostManagerServlet.listed=OK - Listed hosts
hostManagerServlet.listitem=[{0}]:[{1}]
hostManagerServlet.managerXml=FAIL - Couldn't install manager.xml
hostManagerServlet.noCommand=FAIL - No command was specified
hostManagerServlet.noHost=FAIL - Host name [{0}] does not exist
hostManagerServlet.noWrapper=Container has not called setWrapper() for this servlet
hostManagerServlet.persist=persist: Persisting current configuration
hostManagerServlet.persistFailed=FAIL - Failed to persist configuration
hostManagerServlet.persisted=OK - Configuration persisted
hostManagerServlet.postCommand=FAIL - Tried to use command [{0}] via a GET request but POST is required
hostManagerServlet.remove=remove: Removing host [{0}]
hostManagerServlet.removeFailed=FAIL - Failed to remove host [{0}]
hostManagerServlet.removeSuccess=OK - Removed host [{0}]
hostManagerServlet.start=start: Starting host with name [{0}]
hostManagerServlet.startFailed=FAIL - Failed to start host [{0}]
hostManagerServlet.started=OK - Host [{0}] started
hostManagerServlet.stop=stop: Stopping host with name [{0}]
hostManagerServlet.stopFailed=FAIL - Failed to stop host [{0}]
hostManagerServlet.stopped=OK - Host [{0}] stopped
hostManagerServlet.unknownCommand=FAIL - Unknown command [{0}]
htmlHostManagerServlet.addAliases=Aliases:
htmlHostManagerServlet.addAppBase=App base:
htmlHostManagerServlet.addAutoDeploy=AutoDeploy
htmlHostManagerServlet.addButton=Add
htmlHostManagerServlet.addCopyXML=CopyXML
htmlHostManagerServlet.addDeployOnStartup=DeployOnStartup
htmlHostManagerServlet.addDeployXML=DeployXML
htmlHostManagerServlet.addHost=Host
htmlHostManagerServlet.addManager=Manager App
htmlHostManagerServlet.addName=Name:
htmlHostManagerServlet.addTitle=Add Virtual Host
htmlHostManagerServlet.addUnpackWARs=UnpackWARs
htmlHostManagerServlet.helpHtmlManager=HTML Host Manager Help
htmlHostManagerServlet.helpHtmlManagerFile=../docs/html-host-manager-howto.html
htmlHostManagerServlet.helpManager=Host Manager Help
htmlHostManagerServlet.helpManagerFile=../docs/host-manager-howto.html
htmlHostManagerServlet.hostAliases=Host aliases
htmlHostManagerServlet.hostName=Host name
htmlHostManagerServlet.hostTasks=Commands
htmlHostManagerServlet.hostThis=Host Manager installed - commands disabled
htmlHostManagerServlet.hostsRemove=Remove
htmlHostManagerServlet.hostsStart=Start
htmlHostManagerServlet.hostsStop=Stop
htmlHostManagerServlet.list=List Virtual Hosts
htmlHostManagerServlet.manager=Host Manager
htmlHostManagerServlet.messageLabel=Message:
htmlHostManagerServlet.persistAll=Save current configuration (including virtual hosts) to server.xml and per web application context.xml files
htmlHostManagerServlet.persistAllButton=All
htmlHostManagerServlet.persistTitle=Persist configuration
htmlHostManagerServlet.serverJVMVendor=JVM Vendor
htmlHostManagerServlet.serverJVMVersion=JVM Version
htmlHostManagerServlet.serverOSArch=OS Architecture
htmlHostManagerServlet.serverOSName=OS Name
htmlHostManagerServlet.serverOSVersion=OS Version
htmlHostManagerServlet.serverTitle=Server Information
htmlHostManagerServlet.serverVersion=Tomcat Version
htmlHostManagerServlet.title=Tomcat Virtual Host Manager
statusServlet.complete=Complete Server Status
statusServlet.title=Server Status

View File

@@ -0,0 +1,36 @@
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
hostManagerServlet.listed=OK - Hosts aufgelistet
hostManagerServlet.managerXml=FAIL - Konnte manager.xml nicht installieren
hostManagerServlet.start=start: Starte Host mit Name [{0}]
hostManagerServlet.stopFailed=FEHLER - der Host [{0}] konnte nicht gestoppt werden
htmlHostManagerServlet.addAutoDeploy=AutoDeploy
htmlHostManagerServlet.addDeployOnStartup=DeployOnStartup
htmlHostManagerServlet.addHost=Host
htmlHostManagerServlet.addManager=Manager-Anwendung
htmlHostManagerServlet.addTitle=Füge virtuellen Host hinzu
htmlHostManagerServlet.helpHtmlManager=HTML Host-Manager-Hilfe
htmlHostManagerServlet.helpHtmlManagerFile=../docs/html-host-manager-howto.html
htmlHostManagerServlet.helpManager=Host-Manager-Hilfe
htmlHostManagerServlet.hostName=Hostname
htmlHostManagerServlet.hostTasks=Kommandos
htmlHostManagerServlet.hostsRemove=Entferne
htmlHostManagerServlet.hostsStart=Start
htmlHostManagerServlet.hostsStop=Stopp
htmlHostManagerServlet.manager=Host-Manager
htmlHostManagerServlet.messageLabel=Nachricht:
htmlHostManagerServlet.serverOSArch=Betriebssystemarchitektur

View File

@@ -0,0 +1,84 @@
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
hostManagerServlet.add=añadir: Añadiendo máquina [{0}]
hostManagerServlet.addFailed=FALLO - No pude añadir máquina [{0}]
hostManagerServlet.addSuccess=OK - Máquina añadida [{0}]
hostManagerServlet.alreadyHost=FALLO - Ya existe máquina con nombre de máquina [{0}]
hostManagerServlet.alreadyStarted=FALLO - La máqiuina [{0}] ya ha arrancado
hostManagerServlet.alreadyStopped=FALLO - La máquina [{0}] ya se ha parado
hostManagerServlet.appBaseCreateFail=FALLO - No pude crear appBase [{0}] para la máquina [{1}]
hostManagerServlet.cannotRemoveOwnHost=FALLO - No puedo quitar máquina propia [{0}]
hostManagerServlet.cannotStartOwnHost=FALLO - No puedo empezar máquina propia [{0}]
hostManagerServlet.cannotStopOwnHost=FALLO - No puedo para máquina propia [{0}]
hostManagerServlet.configBaseCreateFail=FALLO - No pude identificar configBase para la máquina [{0}]
hostManagerServlet.exception=FALLO - Encontrada excepción [{0}]
hostManagerServlet.invalidHostName=FALLO - Se ha especificado un nombre inválido de máquina [{0}]
hostManagerServlet.list=listar: Listando máquinas para motor [{0}]
hostManagerServlet.listed=OK - Máquinas listadas
hostManagerServlet.listitem=[{0}]:[{1}]
hostManagerServlet.managerXml=FALLO - no pude instalar manager.xml
hostManagerServlet.noCommand=FALLO - No se ha especificado comando
hostManagerServlet.noHost=FALLO - El nombre de máquina [{0}] no existe
hostManagerServlet.noWrapper=El contenedor no ha llamado a setWrapper() para este servlet
hostManagerServlet.postCommand=FALLO - Intenté usar el comando [{0}] vía un requerimiento GET pero es necesario POST
hostManagerServlet.remove=quitar: Quitando máquina [{0}]
hostManagerServlet.removeFailed=FALLO - No pude quitar máquina [{0}]
hostManagerServlet.removeSuccess=OK - Máquina removida [{0}]
hostManagerServlet.start=arrancar: Arrancando máquina con nombre [{0}]
hostManagerServlet.startFailed=FALLO - No pude arrancar máquina [{0}]
hostManagerServlet.started=OK - Máquina [{0}] arrancada
hostManagerServlet.stop=parar: Parando máquina con nombre [{0}]
hostManagerServlet.stopFailed=FALLO - No pude parar máquina [{0}]
hostManagerServlet.stopped=OK - Máquina [{0}] parada
hostManagerServlet.unknownCommand=FALLO - Comando desconocido [{0}]
htmlHostManagerServlet.addAliases=Aliases:
htmlHostManagerServlet.addAppBase=App base:
htmlHostManagerServlet.addAutoDeploy=AutoDeploy
htmlHostManagerServlet.addButton=Añadir
htmlHostManagerServlet.addDeployOnStartup=DeployOnStartup
htmlHostManagerServlet.addDeployXML=DeployXML
htmlHostManagerServlet.addHost=Maquina
htmlHostManagerServlet.addManager=App de Gestor
htmlHostManagerServlet.addName=Nombre:
htmlHostManagerServlet.addTitle=Añadir Máquina Virtual
htmlHostManagerServlet.addUnpackWARs=UnpackWARs
htmlHostManagerServlet.helpHtmlManager=Ayuda de Gestor de Máquina HTML (¡En breve!)
htmlHostManagerServlet.helpHtmlManagerFile=html-host-manager-howto.html
htmlHostManagerServlet.helpManager=Ayuda de Gestor de Máquina
htmlHostManagerServlet.helpManagerFile=../docs/host-manager-howto.html
htmlHostManagerServlet.hostAliases=Aliases de Máquina
htmlHostManagerServlet.hostName=Nombre de Máquina
htmlHostManagerServlet.hostTasks=Comandos
htmlHostManagerServlet.hostThis=Instalado Gestor de Máquinas - comandos deactivados
htmlHostManagerServlet.hostsRemove=Quitar
htmlHostManagerServlet.hostsStart=Iniciar
htmlHostManagerServlet.hostsStop=Parar
htmlHostManagerServlet.list=Lista de Máquinas Virtuales
htmlHostManagerServlet.manager=Gestor de Máquina
htmlHostManagerServlet.messageLabel=Mensaje:
htmlHostManagerServlet.persistTitle=Configuración peristente
htmlHostManagerServlet.serverJVMVendor=Vendedor JVM
htmlHostManagerServlet.serverJVMVersion=Versión de JVM
htmlHostManagerServlet.serverOSArch=Arquitectura del SO
htmlHostManagerServlet.serverOSName=Nombre de SO
htmlHostManagerServlet.serverOSVersion=Versión de SO
htmlHostManagerServlet.serverTitle=Información de Servidor
htmlHostManagerServlet.serverVersion=Versión de Tomcat
htmlHostManagerServlet.title=Gestor de Máquina Virtual de Tomcat
statusServlet.complete=Completar Estado de Servidor
statusServlet.title=Estado de Servidor

View File

@@ -0,0 +1,90 @@
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
hostManagerServlet.add=add: Ajouter l''hôte [{0}]
hostManagerServlet.addFailed=ECHEC - L''hôte [{0}] n''a pas pu être ajouté
hostManagerServlet.addSuccess=OK - L''hôte [{0}] a été ajouté
hostManagerServlet.alreadyHost=ECHEC - Un hôte existe déjà pour le nom [{0}]
hostManagerServlet.alreadyStarted=ECHEC - L''hôte [{0}] est déjà démarré
hostManagerServlet.alreadyStopped=ECHEC - L''hôte [{0}] est déjà arrêté
hostManagerServlet.appBaseCreateFail=ECHEC - Echec de création du répertoire de base (appBase) [{0}] de l''hôte [{1}]
hostManagerServlet.cannotRemoveOwnHost=ECHEC - Impossible de retirer son propre hôte
hostManagerServlet.cannotStartOwnHost=ECHEC - Ne peut pas démarrer son propre hôte
hostManagerServlet.cannotStopOwnHost=ECHEC - Impossible d'arrêter son propre hôte
hostManagerServlet.configBaseCreateFail=ECHEC - N''a pas pu trouver le configBase de l''hôte [{0}]
hostManagerServlet.exception=ECHEC - Exception [{0}]
hostManagerServlet.invalidHostName=ECHEC - Un nom d''hôte [{0}] invalide a été spécifié
hostManagerServlet.list=list: Liste des hôte pour le moteur [{0}]
hostManagerServlet.listed=OK - Liste des hôtes
hostManagerServlet.listitem=[{0}]:[{1}]
hostManagerServlet.managerXml=ECHEC - "manager.xml" n'a pas pu être installé
hostManagerServlet.noCommand=ECHEC - Aucune commande n'a été spécifiée
hostManagerServlet.noHost=ECHEC - Le nom d''hôte [{0}] n''existe pas
hostManagerServlet.noWrapper=Le conteneur n'a pas appelé setWrapper() pour ce Servlet
hostManagerServlet.persist=persist: Persister la configuration actuelle
hostManagerServlet.persistFailed=ECHEC - N'a pas pu persister la configuration
hostManagerServlet.persisted=OK - Configuration persistée
hostManagerServlet.postCommand=ECHEC - Essai d''utilisation de GET pour la commande [{0}] mais POST est nécessaire
hostManagerServlet.remove=supprimer: suppression de l''hôte [{0}]
hostManagerServlet.removeFailed=ECHEC - N''a pas pu retirer l''hôte [{0}]
hostManagerServlet.removeSuccess=OK - L''hôte [{0}] a été enlevé
hostManagerServlet.start=start: Démarrage de l''hôte [{0}]
hostManagerServlet.startFailed=ECHEC - Impossible de démarrer l''hôte [{0}]
hostManagerServlet.started=OK - L''hôte [{0}] est démarré
hostManagerServlet.stop=stop: Arrêt de l''hôte [{0}]
hostManagerServlet.stopFailed=ECHEC - L''arrêt de l''hôte [{0}] a échoué
hostManagerServlet.stopped=OK - L''hôte [{0}] est arrêté
hostManagerServlet.unknownCommand=ECHEC - Commande inconnue [{0}]
htmlHostManagerServlet.addAliases=Alias:
htmlHostManagerServlet.addAppBase=Répertoire de base:
htmlHostManagerServlet.addAutoDeploy=Déploiement automatique
htmlHostManagerServlet.addButton=Ajouter
htmlHostManagerServlet.addCopyXML=Copier le XML
htmlHostManagerServlet.addDeployOnStartup=Déploiement au démarrage
htmlHostManagerServlet.addDeployXML=Déployer le XML
htmlHostManagerServlet.addHost=Hôte
htmlHostManagerServlet.addManager=App gestionnaire
htmlHostManagerServlet.addName=Nom:
htmlHostManagerServlet.addTitle=Ajouter un hôte virtuel (Virtual Host)
htmlHostManagerServlet.addUnpackWARs=Décompresser les WARs
htmlHostManagerServlet.helpHtmlManager=Aide HTML du manager d'hôte
htmlHostManagerServlet.helpHtmlManagerFile=../docs/html-host-manager-howto.html
htmlHostManagerServlet.helpManager=Aide du Gestionnaire d'Hôtes
htmlHostManagerServlet.helpManagerFile=../docs/host-manager-howto.html
htmlHostManagerServlet.hostAliases=Alias de l'hôte
htmlHostManagerServlet.hostName=Nom d'hôte
htmlHostManagerServlet.hostTasks=Commandes
htmlHostManagerServlet.hostThis=Gestionnaire d'Hôtes installé, commandes désactivées
htmlHostManagerServlet.hostsRemove=Retirer
htmlHostManagerServlet.hostsStart=Démarrer
htmlHostManagerServlet.hostsStop=Arrêt
htmlHostManagerServlet.list=Liste des Hôtes Virtuels
htmlHostManagerServlet.manager=Gestionaire d'hôte ("Host Manager")
htmlHostManagerServlet.messageLabel=Message:
htmlHostManagerServlet.persistAll=Enregistrer la configuration, y compris les hôtes virtuels, dans server.xml et les fichiers context.xml pour chaque application
htmlHostManagerServlet.persistAllButton=Tout
htmlHostManagerServlet.persistTitle=Persister la configuration
htmlHostManagerServlet.serverJVMVendor=Fournisseur de la JVM
htmlHostManagerServlet.serverJVMVersion=Version de la JVM
htmlHostManagerServlet.serverOSArch=Architecture du système
htmlHostManagerServlet.serverOSName=Nom de l''OS
htmlHostManagerServlet.serverOSVersion=Version de l'OS
htmlHostManagerServlet.serverTitle=Information sur le serveur
htmlHostManagerServlet.serverVersion=Version de Tomcat
htmlHostManagerServlet.title=Gestionnaire d'Hôtes Virtuels de Tomcat
statusServlet.complete=Etat complet du serveur
statusServlet.title=Etat du serveur

View File

@@ -0,0 +1,90 @@
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
hostManagerServlet.add=addホスト[{0}]を追加
hostManagerServlet.addFailed=FAIL - ホスト [{0}] を追加できません。
hostManagerServlet.addSuccess=OK - ホスト[{0}]を追加しました
hostManagerServlet.alreadyHost=FAIL - ホスト名[{0}]のホストが既に存在します
hostManagerServlet.alreadyStarted=FAIL - ホスト [{0}] はすでに開始しています。
hostManagerServlet.alreadyStopped=FAIL - Host [{0}] はすでに停止しています。
hostManagerServlet.appBaseCreateFail=FAIL - ホスト [{1}] の appBase [{0}] を作成できません。
hostManagerServlet.cannotRemoveOwnHost=FAIL - 自身のホスト[{0}]を削除できません
hostManagerServlet.cannotStartOwnHost=FAIL - 自身のホスト [{0}] は開始できません。
hostManagerServlet.cannotStopOwnHost=FAIL - 自分自身のホスト [{0}] を停止できません。
hostManagerServlet.configBaseCreateFail=FAIL - ホスト [{0}] の configBase が特定できません。
hostManagerServlet.exception=FAIL - 例外[{0}]が発生しました
hostManagerServlet.invalidHostName=FAIL - 無効なホスト名[{0}]が指定されました
hostManagerServlet.list=リストEngine[{0}]のHostのリスト
hostManagerServlet.listed=OK - 列挙されたHost
hostManagerServlet.listitem=[{0}]:[{1}]
hostManagerServlet.managerXml=FAIL - manager.xml をインストールできませんでした。
hostManagerServlet.noCommand=FAIL - コマンドが指定されませんでした。
hostManagerServlet.noHost=FAIL - ホスト名 [{0}] は存在しません。
hostManagerServlet.noWrapper=Container はこのサーブレットの setWrapper() を呼び出していません。
hostManagerServlet.persist=永続化:現在の設定を保持する
hostManagerServlet.persistFailed=FAIL - 構成を永続化できませんでした
hostManagerServlet.persisted=OK - 構成が永続化されました
hostManagerServlet.postCommand=FAIL - コマンド[{0}]をGETリクエストで使用しようとしましたが、POSTが必要です
hostManagerServlet.remove=remove: ホスト [{0}] を削除します。
hostManagerServlet.removeFailed=FAIL - Host [{0}] を削除できません。
hostManagerServlet.removeSuccess=OK - ホスト[{0}]を削除しました
hostManagerServlet.start=開始:名前[{0}]のホストを起動しています
hostManagerServlet.startFailed=FAIL - ホスト[{0}]の起動に失敗しました
hostManagerServlet.started=OK - Host [{0}] を開始しました。
hostManagerServlet.stop=停止:名前[{0}]のホストを停止しています
hostManagerServlet.stopFailed=FAIL- ホスト [{0}] を停止できません。
hostManagerServlet.stopped=OK - Host[{0}]が停止しました
hostManagerServlet.unknownCommand=FAIL - 不明なコマンド[{0}]
htmlHostManagerServlet.addAliases=エイリアス:
htmlHostManagerServlet.addAppBase=App base:
htmlHostManagerServlet.addAutoDeploy=自動デプロイ
htmlHostManagerServlet.addButton=追加
htmlHostManagerServlet.addCopyXML=CopyXML
htmlHostManagerServlet.addDeployOnStartup=DeployOnStartup
htmlHostManagerServlet.addDeployXML=DeployXML
htmlHostManagerServlet.addHost=ホスト
htmlHostManagerServlet.addManager=Manager アプリケーション
htmlHostManagerServlet.addName=名前:
htmlHostManagerServlet.addTitle=仮想ホスト追加
htmlHostManagerServlet.addUnpackWARs=UnpackWARs
htmlHostManagerServlet.helpHtmlManager=HTMLホストマネージャ ヘルプ
htmlHostManagerServlet.helpHtmlManagerFile=../docs/html-host-manager-howto.html
htmlHostManagerServlet.helpManager=Host Manager ヘルプ
htmlHostManagerServlet.helpManagerFile=../docs/host-manager-howto.html
htmlHostManagerServlet.hostAliases=Hostエイリアス
htmlHostManagerServlet.hostName=ホスト名
htmlHostManagerServlet.hostTasks=コマンド
htmlHostManagerServlet.hostThis=Host Managerがインストールされています - コマンドが無効です
htmlHostManagerServlet.hostsRemove=削除
htmlHostManagerServlet.hostsStart=起動
htmlHostManagerServlet.hostsStop=停止
htmlHostManagerServlet.list=仮想ホスト一覧
htmlHostManagerServlet.manager=Host Manager
htmlHostManagerServlet.messageLabel=メッセージ:
htmlHostManagerServlet.persistAll=現在の設定仮想ホストを含むをserver.xmlおよびwebアプリケーションcontext.xmlファイルに保存します。
htmlHostManagerServlet.persistAllButton=全て
htmlHostManagerServlet.persistTitle=構成維持
htmlHostManagerServlet.serverJVMVendor=JVMベンダ
htmlHostManagerServlet.serverJVMVersion=JVM バージョン
htmlHostManagerServlet.serverOSArch=OS アーキテクチャ
htmlHostManagerServlet.serverOSName=OS 名
htmlHostManagerServlet.serverOSVersion=OS バージョン
htmlHostManagerServlet.serverTitle=Server情報
htmlHostManagerServlet.serverVersion=Tomcatバージョン
htmlHostManagerServlet.title=Tomcat仮想ホストマネージャ
statusServlet.complete=完全なサーバステータス
statusServlet.title=サーバステータス

View File

@@ -0,0 +1,90 @@
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
hostManagerServlet.add=추가: 호스트 [{0}]을(를) 추가합니다.
hostManagerServlet.addFailed=실패 - 호스트 [{0}]을(를) 추가하지 못했습니다.
hostManagerServlet.addSuccess=OK - 호스트 [{0}]이(가) 추가되었습니다.
hostManagerServlet.alreadyHost=실패 - 이름이 [{0}]인 호스트가 이미 존재합니다.
hostManagerServlet.alreadyStarted=실패 - 호스트 [{0}]은(는) 이미 시작되었습니다.
hostManagerServlet.alreadyStopped=실패 - 호스트 [{0}]은(는) 이미 중지되었습니다.
hostManagerServlet.appBaseCreateFail=실패 - 호스트 [{1}]을(를) 위한 appBase [{0}]을(를) 생성하지 못했습니다.
hostManagerServlet.cannotRemoveOwnHost=실패 - 자신의 호스트 [{0}]을(를) 제거할 수는 없습니다.
hostManagerServlet.cannotStartOwnHost=실패 - 자기 자신의 호스트 [{0}]을(를) 시작할 수 없습니다.
hostManagerServlet.cannotStopOwnHost=실패 - 자신의 호스트 [{0}]을(를) 중지시킬 수 없습니다.
hostManagerServlet.configBaseCreateFail=실패 - 호스트 [{0}]을(를) 위한 configBase를 식별하지 못했습니다.
hostManagerServlet.exception=실패 - 예외 발생 [{0}]
hostManagerServlet.invalidHostName=실패 - 유효하지 않은 호스트 이름 [{0}]이(가) 지정되었습니다.
hostManagerServlet.list=목록: 엔진 [{0}]을(를) 위한 호스트들의 목록을 표시합니다.
hostManagerServlet.listed=OK - 호스트 목록
hostManagerServlet.listitem=[{0}]:[{1}]
hostManagerServlet.managerXml=실패 - manager.xml을 설치할 수 없었습니다.
hostManagerServlet.noCommand=실패 - 명령이 지정되지 않았습니다.
hostManagerServlet.noHost=실패 - 호스트 이름 [{0}]은(는) 존재하지 않습니다.
hostManagerServlet.noWrapper=이 서블릿을 위해, 컨테이너가 setWrapper()를 호출한 적이 없습니다.
hostManagerServlet.persist=저장: 현재 설정을 저장합니다.
hostManagerServlet.persistFailed=실패 - 설정을 저장하지 못했습니다.
hostManagerServlet.persisted=OK - 설정이 저장되었습니다.
hostManagerServlet.postCommand=실패 - GET 요청을 통해 명령 [{0}]을(를) 사용하려 시도했지만, POST 메소드가 필수적입니다.
hostManagerServlet.remove=제거: 호스트 [{0}]을(를) 제거합니다.
hostManagerServlet.removeFailed=실패 - 호스트 [{0}]을(를) 제거하지 못했습니다.
hostManagerServlet.removeSuccess=OK - 호스트 [{0}]을(를) 제거했습니다.
hostManagerServlet.start=시작: 이름이 [{0}]인 호스트를 시작합니다.
hostManagerServlet.startFailed=실패 - 호스트 [{0}]을(를) 시작하지 못했습니다.
hostManagerServlet.started=OK - 호스트 [{0}](이)가 시작되었습니다.
hostManagerServlet.stop=중지: [{0}](이)라는 이름의 호스트를 중지합니다.
hostManagerServlet.stopFailed=실패 - 호스트 [{0}]을(를) 중지시키지 못했습니다.
hostManagerServlet.stopped=OK - 호스트 [{0}]이(가) 중지되었습니다.
hostManagerServlet.unknownCommand=실패 - 알 수 없는 명령 [{0}]
htmlHostManagerServlet.addAliases=별칭들:
htmlHostManagerServlet.addAppBase=앱 base:
htmlHostManagerServlet.addAutoDeploy=자동배치
htmlHostManagerServlet.addButton=추가
htmlHostManagerServlet.addCopyXML=XML복사
htmlHostManagerServlet.addDeployOnStartup=시작 시 배치하기
htmlHostManagerServlet.addDeployXML=XML배치
htmlHostManagerServlet.addHost=호스트
htmlHostManagerServlet.addManager=매니저 앱
htmlHostManagerServlet.addName=이름:
htmlHostManagerServlet.addTitle=가상 호스트 추가
htmlHostManagerServlet.addUnpackWARs=WAR들의 압축 풀기
htmlHostManagerServlet.helpHtmlManager=HTML 호스트 매니저 도움말
htmlHostManagerServlet.helpHtmlManagerFile=../docs/html-host-manager-howto.html
htmlHostManagerServlet.helpManager=호스트 매니저 도움말
htmlHostManagerServlet.helpManagerFile=../docs/host-manager-howto.html
htmlHostManagerServlet.hostAliases=호스트의 별칭들
htmlHostManagerServlet.hostName=호스트 이름
htmlHostManagerServlet.hostTasks=명령들
htmlHostManagerServlet.hostThis=호스트 매니저가 설치되었습니다 - 명령들은 사용 불능 상태입니다.
htmlHostManagerServlet.hostsRemove=제거
htmlHostManagerServlet.hostsStart=시작
htmlHostManagerServlet.hostsStop=중지
htmlHostManagerServlet.list=가상 호스트들의 목록을 표시
htmlHostManagerServlet.manager=호스트 관리자
htmlHostManagerServlet.messageLabel=메시지:
htmlHostManagerServlet.persistAll=현재 설정을 (가상 호스트들 포함) server.xml과 각 웹 애플리케이션의 context.xml 파일들에 저장합니다.
htmlHostManagerServlet.persistAllButton=전부
htmlHostManagerServlet.persistTitle=저장 환경 설정
htmlHostManagerServlet.serverJVMVendor=JVM 벤더
htmlHostManagerServlet.serverJVMVersion=JVM 버전
htmlHostManagerServlet.serverOSArch=운영체제 아키첵처
htmlHostManagerServlet.serverOSName=운영체제 이름
htmlHostManagerServlet.serverOSVersion=운영체제 버전
htmlHostManagerServlet.serverTitle=서버 정보
htmlHostManagerServlet.serverVersion=Tomcat 버전
htmlHostManagerServlet.title=Tomcat 가상 호스트 매니저
statusServlet.complete=서버 상태 전부
statusServlet.title=서버 상태

View File

@@ -0,0 +1,90 @@
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
hostManagerServlet.add=add: Добавление сервера [{0}]
hostManagerServlet.addFailed=Ошибка - Не удалось добавить сервер [{0}]
hostManagerServlet.addSuccess=OK - Сервер [{0}] добавлен
hostManagerServlet.alreadyHost=Ошибка - Уже есть сервер с таким именем [{0}]
hostManagerServlet.alreadyStarted=Ошибка - Сервер [{0}] уже запущен
hostManagerServlet.alreadyStopped=Ошибка - Сервер [{0}] уже остановлен
hostManagerServlet.appBaseCreateFail=Ошибка - Не удалось создать директорию для приложений (appBase) [{0}] для сервера [{1}]
hostManagerServlet.cannotRemoveOwnHost=Ошибка - Нельзя удалить свой собственный сервер [{0}]
hostManagerServlet.cannotStartOwnHost=Ошибка - Нельзя запустить свой собственный сервер [{0}]
hostManagerServlet.cannotStopOwnHost=Ошибка - Нельзя остановить свой собственный сервер {0}
hostManagerServlet.configBaseCreateFail=Ошибка - Не удалось определить директорию с файлами конфигурации (configBase) для сервера [{0}]
hostManagerServlet.exception=Ошибка - Необычная ситуация [{0}]
hostManagerServlet.invalidHostName=Ошибка - Указано недопустимое имя сервера [{0}]
hostManagerServlet.list=list: Список серверов для движка [{0}]
hostManagerServlet.listed=OK - Список серверов
hostManagerServlet.listitem=[{0}]:[{1}]
hostManagerServlet.managerXml=Ошибка - Не удалось создать файл manager.xml
hostManagerServlet.noCommand=Ошибка - Команда не указана.
hostManagerServlet.noHost=Ошибка - Сервер с указанным именем [{0}] не существует
hostManagerServlet.noWrapper=Метод setWrapper() у данного сервлета ещё не был вызван контейнером
hostManagerServlet.persist=persist: Сохранение текущей конфигурации
hostManagerServlet.persistFailed=Ошибка - Не удалось сохранить конфигурацию
hostManagerServlet.persisted=OK - Конфигурация сохранена
hostManagerServlet.postCommand=Ошибка - Команда [{0}] была подана при помощи запроса GET, но требуется POST
hostManagerServlet.remove=remove: Удаление сервера [{0}]
hostManagerServlet.removeFailed=Ошибка - Не удалось удалить сервер [{0}]
hostManagerServlet.removeSuccess=OK - Сервер удалён [{0}]
hostManagerServlet.start=start: Запуск сервера с именем [{0}]
hostManagerServlet.startFailed=Ошибка - Не удалось запустить сервер [{0}]
hostManagerServlet.started=OK - Сервер [{0}] запущен
hostManagerServlet.stop=stop: Остановка сервера с именем [{0}]
hostManagerServlet.stopFailed=Ошибка - Не удалось остановить сервер [{0}]
hostManagerServlet.stopped=OK - Сервер [{0}] остановлен
hostManagerServlet.unknownCommand=Ошибка - Неизвестная команда [{0}]
htmlHostManagerServlet.addAliases=Псевдонимы:
htmlHostManagerServlet.addAppBase=Директория для приложений (appBase):
htmlHostManagerServlet.addAutoDeploy=Автоматическое развёртывание (AutoDeploy)
htmlHostManagerServlet.addButton=Добавить
htmlHostManagerServlet.addCopyXML=Включить опцию CopyXML
htmlHostManagerServlet.addDeployOnStartup=Развёртывание при старте сервера (DeployOnStartup)
htmlHostManagerServlet.addDeployXML=Включить опцию DeployXML
htmlHostManagerServlet.addHost=Сервер
htmlHostManagerServlet.addManager=Установить приложение Manager
htmlHostManagerServlet.addName=Имя:
htmlHostManagerServlet.addTitle=Добавить виртуальный сервер
htmlHostManagerServlet.addUnpackWARs=Включить опцию UnpackWARs
htmlHostManagerServlet.helpHtmlManager=Справка для пользователей приложения
htmlHostManagerServlet.helpHtmlManagerFile=../docs/html-host-manager-howto.html
htmlHostManagerServlet.helpManager=Справка по API приложения
htmlHostManagerServlet.helpManagerFile=../docs/host-manager-howto.html
htmlHostManagerServlet.hostAliases=Псевдонимы сервера
htmlHostManagerServlet.hostName=Имя сервера
htmlHostManagerServlet.hostTasks=Управление
htmlHostManagerServlet.hostThis=Приложение Host Manager установлено здесь - команды управления не поддерживаются
htmlHostManagerServlet.hostsRemove=Удалить
htmlHostManagerServlet.hostsStart=Старт
htmlHostManagerServlet.hostsStop=Стоп
htmlHostManagerServlet.list=Список виртуальных серверов
htmlHostManagerServlet.manager=Управление cервером
htmlHostManagerServlet.messageLabel=Сообщение:
htmlHostManagerServlet.persistAll=Сохраняет текущие настройки (включая виртуальные хосты) в файл server.xml и в файлы context.xml для веб-приложений
htmlHostManagerServlet.persistAllButton=Сохранить всё
htmlHostManagerServlet.persistTitle=Сохранить настройки
htmlHostManagerServlet.serverJVMVendor=Поставщик JVM
htmlHostManagerServlet.serverJVMVersion=Версия JVM
htmlHostManagerServlet.serverOSArch=Архитектура ОС
htmlHostManagerServlet.serverOSName=ОС
htmlHostManagerServlet.serverOSVersion=Версия ОС
htmlHostManagerServlet.serverTitle=Информация о сервере
htmlHostManagerServlet.serverVersion=Версия Tomcat
htmlHostManagerServlet.title=Управление виртуальными серверами Tomcat
statusServlet.complete=Подробный отчёт о состоянии
statusServlet.title=Состояние сервера

View File

@@ -0,0 +1,90 @@
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
hostManagerServlet.add=添加:添加主机[{0}]
hostManagerServlet.addFailed=失败 - 添加主机 [{0}] 失败
hostManagerServlet.addSuccess=确定-添加主机[{0}]
hostManagerServlet.alreadyHost=失败 - 主机名称[{0}]已经存在
hostManagerServlet.alreadyStarted=失败 - Host[{0}]已经启动。
hostManagerServlet.alreadyStopped=失败 - 主机[{0}]已经停止
hostManagerServlet.appBaseCreateFail=失败 - 创建appBase目录[{0}]失败,主机:[{1}]
hostManagerServlet.cannotRemoveOwnHost=失败 - 无法移除你的主机[{0}]
hostManagerServlet.cannotStartOwnHost=失败 - 无法启动主机[{0}]
hostManagerServlet.cannotStopOwnHost=失败 - 无法停止主机[{0}]
hostManagerServlet.configBaseCreateFail=失败 - 无法识别主机[{0}]的基础配置
hostManagerServlet.exception=失败 - 出现异常[{0}]
hostManagerServlet.invalidHostName=失败 - 指定的主机名称[{0}]无效
hostManagerServlet.list=列表:列出引擎[{0}]的主机
hostManagerServlet.listed=OK - 已列出Host
hostManagerServlet.listitem=[{0}]:[{1}]
hostManagerServlet.managerXml=FAIL - 无法安装manager.xml
hostManagerServlet.noCommand=失败 - 未指定命令
hostManagerServlet.noHost=失败 - 主机名称[{0}]不存在
hostManagerServlet.noWrapper=容器未给当前servlet设置setWrapper()
hostManagerServlet.persist=持久化: 正在持久化当前配置
hostManagerServlet.persistFailed=失败 - 无法持久化配置
hostManagerServlet.persisted=OK - 配置持久化了.
hostManagerServlet.postCommand=失败 - 尝试通过GET请求使用命令[{0}]但是需要使用POST请求
hostManagerServlet.remove=移除:正在移除主机 [{0}]
hostManagerServlet.removeFailed=失败 - 无法移除主机 [{0}]
hostManagerServlet.removeSuccess=确定-已删除主机[{0}]
hostManagerServlet.start=启动:启动主机[{0}]
hostManagerServlet.startFailed=失败 - 无法启动主机 [{0}]
hostManagerServlet.started=OK - 主机 [{0}] 已启动
hostManagerServlet.stop=停止:停止主机[{0}]
hostManagerServlet.stopFailed=失败 - 无法停止主机 [{0}]
hostManagerServlet.stopped=OK - 主机 [{0}] 已停止
hostManagerServlet.unknownCommand=失败 - 未知命令 [{0}]
htmlHostManagerServlet.addAliases=别名:
htmlHostManagerServlet.addAppBase=应用程序库:
htmlHostManagerServlet.addAutoDeploy=自动.部署
htmlHostManagerServlet.addButton=添加
htmlHostManagerServlet.addCopyXML=拷贝XML
htmlHostManagerServlet.addDeployOnStartup=启动.部署
htmlHostManagerServlet.addDeployXML=部署XML
htmlHostManagerServlet.addHost=主机
htmlHostManagerServlet.addManager=管理 App
htmlHostManagerServlet.addName=名称
htmlHostManagerServlet.addTitle=添加.虚拟主机
htmlHostManagerServlet.addUnpackWARs=解压WARs
htmlHostManagerServlet.helpHtmlManager=HTML主机管理器帮助
htmlHostManagerServlet.helpHtmlManagerFile=../docs/html-host-manager-howto.html
htmlHostManagerServlet.helpManager=主机管理器帮助
htmlHostManagerServlet.helpManagerFile=../docs/host-manager-howto.html
htmlHostManagerServlet.hostAliases=主机别名
htmlHostManagerServlet.hostName=主机名称
htmlHostManagerServlet.hostTasks=命令
htmlHostManagerServlet.hostThis=主机管理器已安装 - 命令不可用
htmlHostManagerServlet.hostsRemove=移除
htmlHostManagerServlet.hostsStart=启动
htmlHostManagerServlet.hostsStop=停止
htmlHostManagerServlet.list=列出虚拟主机
htmlHostManagerServlet.manager=主机.管理器
htmlHostManagerServlet.messageLabel=消息:
htmlHostManagerServlet.persistAll=保存当前配置信息包括虚拟主机到server.xml和每个web应用程序context.xml文件里。
htmlHostManagerServlet.persistAllButton=全部
htmlHostManagerServlet.persistTitle=持久化配置
htmlHostManagerServlet.serverJVMVendor=JVM供应商
htmlHostManagerServlet.serverJVMVersion=JVM版本
htmlHostManagerServlet.serverOSArch=操作系统架构
htmlHostManagerServlet.serverOSName=操作系统名称
htmlHostManagerServlet.serverOSVersion=操作系统版本
htmlHostManagerServlet.serverTitle=服务器信息
htmlHostManagerServlet.serverVersion=Tomcat版本
htmlHostManagerServlet.title=Tomcat虚拟主机管理员
statusServlet.complete=服务器全部状态
statusServlet.title=服务器状态

View File

@@ -0,0 +1,52 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.catalina.manager.util;
import java.util.Comparator;
import org.apache.catalina.Session;
/**
* Comparator which permits to compare on a session's content.
*
* @param <T> The type of the session content to be compared
*
* @author C&eacute;drik LIME
*/
public abstract class BaseSessionComparator<T> implements Comparator<Session> {
/**
*
*/
public BaseSessionComparator() {
super();
}
public abstract Comparable<T> getComparableObject(Session session);
/* (non-Javadoc)
* @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
*/
@SuppressWarnings("unchecked")
@Override
public final int compare(Session s1, Session s2) {
Comparable<T> c1 = getComparableObject(s1);
Comparable<T> c2 = getComparableObject(s2);
return c1==null ? (c2==null ? 0 : -1) : (c2==null ? 1 : c1.compareTo((T)c2));
}
}

View File

@@ -0,0 +1,260 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.catalina.manager.util;
import java.lang.reflect.Method;
import java.security.Principal;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.Locale;
import javax.security.auth.Subject;
import javax.servlet.http.HttpSession;
import org.apache.catalina.Session;
import org.apache.tomcat.util.ExceptionUtils;
/**
* Utility methods on HttpSessions...
* @author C&eacute;drik LIME
*/
public class SessionUtils {
/**
*
*/
private SessionUtils() {
super();
}
/**
* The session attributes key under which the user's selected
* <code>java.util.Locale</code> is stored, if any.
*/
// org.apache.struts.Globals.LOCALE_KEY
private static final String STRUTS_LOCALE_KEY = "org.apache.struts.action.LOCALE";//$NON-NLS-1$
// javax.servlet.jsp.jstl.core.Config.FMT_LOCALE
private static final String JSTL_LOCALE_KEY = "javax.servlet.jsp.jstl.fmt.locale";//$NON-NLS-1$
// org.springframework.web.servlet.i18n.SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME
private static final String SPRING_LOCALE_KEY = "org.springframework.web.servlet.i18n.SessionLocaleResolver.LOCALE";//$NON-NLS-1$
/**
* Lower and upper-case strings will be dynamically generated. Put mid-capitalised strings here!
*/
private static final String[] LOCALE_TEST_ATTRIBUTES = new String[] {
STRUTS_LOCALE_KEY, SPRING_LOCALE_KEY, JSTL_LOCALE_KEY, "Locale", "java.util.Locale" };
/**
* For efficient operation, list the attributes here with the typically used
* capitalisation. This will be tried first and then the auto-generated
* upper and lower case versions will be tried.
*/
private static final String[] USER_TEST_ATTRIBUTES = new String[] {
"Login", "User", "userName", "UserName", "Utilisateur",
"SPRING_SECURITY_LAST_USERNAME"};
/**
* Try to get user locale from the session, if possible.
* IMPLEMENTATION NOTE: this method has explicit support for Tapestry 3, Struts 1.x and Spring
* JSF check the browser meta tag "accept languages" to choose what language to display.
* @param in_session The session
* @return the locale
*/
public static Locale guessLocaleFromSession(final Session in_session) {
return guessLocaleFromSession(in_session.getSession());
}
public static Locale guessLocaleFromSession(final HttpSession in_session) {
if (null == in_session) {
return null;
}
try {
Locale locale = null;
// First search "known locations"
for (int i = 0; i < LOCALE_TEST_ATTRIBUTES.length; ++i) {
Object obj = in_session.getAttribute(LOCALE_TEST_ATTRIBUTES[i]);
if (obj instanceof Locale) {
locale = (Locale) obj;
break;
}
obj = in_session.getAttribute(LOCALE_TEST_ATTRIBUTES[i].toLowerCase(Locale.ENGLISH));
if (obj instanceof Locale) {
locale = (Locale) obj;
break;
}
obj = in_session.getAttribute(LOCALE_TEST_ATTRIBUTES[i].toUpperCase(Locale.ENGLISH));
if (obj instanceof Locale) {
locale = (Locale) obj;
break;
}
}
if (null != locale) {
return locale;
}
// Tapestry 3.0: Engine stored in session under "org.apache.tapestry.engine:" + config.getServletName()
// TODO: Tapestry 4+
final List<Object> tapestryArray = new ArrayList<>();
for (Enumeration<String> enumeration = in_session.getAttributeNames(); enumeration.hasMoreElements();) {
String name = enumeration.nextElement();
if (name.indexOf("tapestry") > -1 && name.indexOf("engine") > -1 && null != in_session.getAttribute(name)) {//$NON-NLS-1$ //$NON-NLS-2$
tapestryArray.add(in_session.getAttribute(name));
}
}
if (tapestryArray.size() == 1) {
// found a potential Engine! Let's call getLocale() on it.
Object probableEngine = tapestryArray.get(0);
if (null != probableEngine) {
try {
Method readMethod = probableEngine.getClass().getMethod("getLocale", (Class<?>[])null);//$NON-NLS-1$
// Call the property getter and return the value
Object possibleLocale = readMethod.invoke(probableEngine, (Object[]) null);
if (possibleLocale instanceof Locale) {
locale = (Locale) possibleLocale;
}
} catch (Exception e) {
Throwable t = ExceptionUtils
.unwrapInvocationTargetException(e);
ExceptionUtils.handleThrowable(t);
// stay silent
}
}
}
if (null != locale) {
return locale;
}
// Last guess: iterate over all attributes, to find a Locale
// If there is only one, consider it to be /the/ locale
final List<Object> localeArray = new ArrayList<>();
for (Enumeration<String> enumeration = in_session.getAttributeNames(); enumeration.hasMoreElements();) {
String name = enumeration.nextElement();
Object obj = in_session.getAttribute(name);
if (obj instanceof Locale) {
localeArray.add(obj);
}
}
if (localeArray.size() == 1) {
locale = (Locale) localeArray.get(0);
}
return locale;
} catch (IllegalStateException ise) {
//ignore: invalidated session
return null;
}
}
/**
* Try to get user from the session, if possible.
* @param in_session The session
* @return the user
*/
public static Object guessUserFromSession(final Session in_session) {
if (null == in_session) {
return null;
}
if (in_session.getPrincipal() != null) {
return in_session.getPrincipal().getName();
}
HttpSession httpSession = in_session.getSession();
if (httpSession == null)
return null;
try {
Object user = null;
// First search "known locations"
for (int i = 0; i < USER_TEST_ATTRIBUTES.length; ++i) {
Object obj = httpSession.getAttribute(USER_TEST_ATTRIBUTES[i]);
if (null != obj) {
user = obj;
break;
}
obj = httpSession.getAttribute(USER_TEST_ATTRIBUTES[i].toLowerCase(Locale.ENGLISH));
if (null != obj) {
user = obj;
break;
}
obj = httpSession.getAttribute(USER_TEST_ATTRIBUTES[i].toUpperCase(Locale.ENGLISH));
if (null != obj) {
user = obj;
break;
}
}
if (null != user) {
return user;
}
// Last guess: iterate over all attributes, to find a java.security.Principal or javax.security.auth.Subject
// If there is only one, consider it to be /the/ user
final List<Object> principalArray = new ArrayList<>();
for (Enumeration<String> enumeration = httpSession.getAttributeNames(); enumeration.hasMoreElements();) {
String name = enumeration.nextElement();
Object obj = httpSession.getAttribute(name);
if (obj instanceof Principal || obj instanceof Subject) {
principalArray.add(obj);
}
}
if (principalArray.size() == 1) {
user = principalArray.get(0);
}
if (null != user) {
return user;
}
return user;
} catch (IllegalStateException ise) {
//ignore: invalidated session
return null;
}
}
public static long getUsedTimeForSession(Session in_session) {
try {
long diffMilliSeconds = in_session.getThisAccessedTime() - in_session.getCreationTime();
return diffMilliSeconds;
} catch (IllegalStateException ise) {
//ignore: invalidated session
return -1;
}
}
public static long getTTLForSession(Session in_session) {
try {
long diffMilliSeconds = (1000*in_session.getMaxInactiveInterval()) - (System.currentTimeMillis() - in_session.getThisAccessedTime());
return diffMilliSeconds;
} catch (IllegalStateException ise) {
//ignore: invalidated session
return -1;
}
}
public static long getInactiveTimeForSession(Session in_session) {
try {
long diffMilliSeconds = System.currentTimeMillis() - in_session.getThisAccessedTime();
return diffMilliSeconds;
} catch (IllegalStateException ise) {
//ignore: invalidated session
return -1;
}
}
}