当前位置: 首页 > news >正文

网站商城运营模式网站建设公司比较

网站商城运营模式,网站建设公司比较,wordpress 上一页 下一页,专业 网站设计【0】README1#xff09;本文部分文字描述转自#xff1a;“深入剖析tomcat”#xff0c;旨在学习“tomcat(19)Manager应用程序的servlet类” 的相关知识#xff1b;2#xff09;Manager应用程序用来管理已经部署的web 应用程序#xff1b;在tomcat7中#xff0c;manage…【0】README1本文部分文字描述转自“深入剖析tomcat”旨在学习“tomcat(19)Manager应用程序的servlet类” 的相关知识2Manager应用程序用来管理已经部署的web 应用程序在tomcat7中manager应用程序位于 %CATALINA_HOME%webapps 目录中【1】使用Manager应用程序1Manager应用程序中的主servlet类是 ManagerServlet类。在tomcat4中 该类位于 org.apache.catalina.servlets包下 而在tomcat5中该类位于 org.apache.catalina.manager下是作为 WEB-INF/lib 目录下的一个JAR 文件部署的?xml version1.0 encodingISO-8859-1? !-- tomcat7 下面的 web.xml --Licensed to the Apache Software Foundation (ASF) under one or morecontributor license agreements. See the NOTICE file distributed withthis 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 withthe License. You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed 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 andlimitations under the License. --web-app xmlnshttp://java.sun.com/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsdversion3.0metadata-completetruedisplay-nameTomcat Manager Application/display-namedescriptionA scriptable management web application for the Tomcat Web Server;Manager lets you view, load/unload/etc particular web applications./descriptionservletservlet-nameManager/servlet-nameservlet-classorg.apache.catalina.manager.ManagerServlet/servlet-classinit-paramparam-namedebug/param-nameparam-value2/param-value/init-param/servletservletservlet-nameHTMLManager/servlet-nameservlet-classorg.apache.catalina.manager.HTMLManagerServlet/servlet-classinit-paramparam-namedebug/param-nameparam-value2/param-value/init-param!-- Uncomment this to show proxy sessions from the Backup manager or aStoreManager in the sessions list for an applicationinit-paramparam-nameshowProxySessions/param-nameparam-valuetrue/param-value/init-param--multipart-config!-- 50MB max --max-file-size52428800/max-file-sizemax-request-size52428800/max-request-sizefile-size-threshold0/file-size-threshold/multipart-config/servletservletservlet-nameStatus/servlet-nameservlet-classorg.apache.catalina.manager.StatusManagerServlet/servlet-classinit-paramparam-namedebug/param-nameparam-value0/param-value/init-param/servletservletservlet-nameJMXProxy/servlet-nameservlet-classorg.apache.catalina.manager.JMXProxyServlet/servlet-class/servlet!-- Define the Manager Servlet Mapping --servlet-mappingservlet-nameManager/servlet-nameurl-pattern/text/*/url-pattern/servlet-mappingservlet-mappingservlet-nameStatus/servlet-nameurl-pattern/status/*/url-pattern/servlet-mappingservlet-mappingservlet-nameJMXProxy/servlet-nameurl-pattern/jmxproxy/*/url-pattern/servlet-mappingservlet-mappingservlet-nameHTMLManager/servlet-nameurl-pattern/html/*/url-pattern/servlet-mappingfilterfilter-nameSetCharacterEncoding/filter-namefilter-classorg.apache.catalina.filters.SetCharacterEncodingFilter/filter-classinit-paramparam-nameencoding/param-nameparam-valueUTF-8/param-value/init-param/filterfilter-mappingfilter-nameSetCharacterEncoding/filter-nameurl-pattern/*/url-pattern/filter-mappingfilterfilter-nameCSRF/filter-namefilter-classorg.apache.catalina.filters.CsrfPreventionFilter/filter-classinit-paramparam-nameentryPoints/param-nameparam-value/html,/html/,/html/list,/index.jsp/param-value/init-param/filterfilter-mappingfilter-nameCSRF/filter-nameservlet-nameHTMLManager/servlet-nameservlet-namejsp/servlet-name/filter-mapping!-- Define a Security Constraint on this Application --!-- NOTE: None of these roles are present in the default users file --security-constraintweb-resource-collectionweb-resource-nameHTML Manager interface (for humans)/web-resource-nameurl-pattern/html/*/url-pattern/web-resource-collectionauth-constraintrole-namemanager-gui/role-name/auth-constraint/security-constraintsecurity-constraintweb-resource-collectionweb-resource-nameText Manager interface (for scripts)/web-resource-nameurl-pattern/text/*/url-pattern/web-resource-collectionauth-constraintrole-namemanager-script/role-name/auth-constraint/security-constraintsecurity-constraintweb-resource-collectionweb-resource-nameJMX Proxy interface/web-resource-nameurl-pattern/jmxproxy/*/url-pattern/web-resource-collectionauth-constraintrole-namemanager-jmx/role-name/auth-constraint/security-constraintsecurity-constraintweb-resource-collectionweb-resource-nameStatus interface/web-resource-nameurl-pattern/status/*/url-pattern/web-resource-collectionauth-constraintrole-namemanager-gui/role-namerole-namemanager-script/role-namerole-namemanager-jmx/role-namerole-namemanager-status/role-name/auth-constraint/security-constraint!-- Define the Login Configuration for this Application --login-configauth-methodBASIC/auth-methodrealm-nameTomcat Manager Application/realm-name/login-config!-- Security roles referenced by this web application --security-roledescriptionThe role that is required to access the HTML Manager pages/descriptionrole-namemanager-gui/role-name/security-rolesecurity-roledescriptionThe role that is required to access the text Manager pages/descriptionrole-namemanager-script/role-name/security-rolesecurity-roledescriptionThe role that is required to access the HTML JMX Proxy/descriptionrole-namemanager-jmx/role-name/security-rolesecurity-roledescriptionThe role that is required to access to the Manager Status pages/descriptionrole-namemanager-status/role-name/security-roleerror-pageerror-code401/error-codelocation/WEB-INF/jsp/401.jsp/location/error-pageerror-pageerror-code403/error-codelocation/WEB-INF/jsp/403.jsp/location/error-pageerror-pageerror-code404/error-codelocation/WEB-INF/jsp/404.jsp/location/error-page/web-app对以上代码的分析AnalysisA1第1个servlet是 org.apache.catalina.manager.ManagerServlet第2个是 org.apache.catalina.manager.HTMLManagerServlet A2org.apache.catalina.manager.ManagerServlet 的函数列表如下 protected void list(PrintWriter writer) {if (debug 1)log(list: Listing contexts for virtual host host.getName() );writer.println(sm.getString(managerServlet.listed,host.getName()));Container[] contexts host.findChildren();for (int i 0; i contexts.length; i) {Context context (Context) contexts[i];String displayPath context.getPath();if( displayPath.equals() )displayPath /;if (context ! null ) {if (context.getAvailable()) {writer.println(sm.getString(managerServlet.listitem,displayPath,running, context.getManager().findSessions().length,context.getDocBase()));} else {writer.println(sm.getString(managerServlet.listitem,displayPath,stopped,0,context.getDocBase()));}}}}protected void reload(PrintWriter writer, String path) {if (debug 1)log(restart: Reloading web application at path );if ((path null) || (!path.startsWith(/) path.equals())) {writer.println(sm.getString(managerServlet.invalidPath,RequestUtil.filter(path)));return;}String displayPath path;if( path.equals(/) )path ;try {Context context (Context) host.findChild(path);if (context null) {writer.println(sm.getString(managerServlet.noContext,RequestUtil.filter(displayPath)));return;}// It isnt possible for the manager to reload itselfif (context.getPath().equals(this.context.getPath())) {writer.println(sm.getString(managerServlet.noSelf));return;}context.reload();writer.println(sm.getString(managerServlet.reloaded, displayPath));} catch (Throwable t) {log(ManagerServlet.reload[ displayPath ], t);writer.println(sm.getString(managerServlet.exception,t.toString()));}}protected void resources(PrintWriter writer, String type) {if (debug 1) {if (type ! null) {log(resources: Listing resources of type type);} else {log(resources: Listing resources of all types);}}// Is the global JNDI resources context available?if (global null) {writer.println(sm.getString(managerServlet.noGlobal));return;}// Enumerate the global JNDI resources of the requested typeif (type ! null) {writer.println(sm.getString(managerServlet.resourcesType,type));} else {writer.println(sm.getString(managerServlet.resourcesAll));}Class clazz null;try {if (type ! null) {clazz Class.forName(type);}} catch (Throwable t) {log(ManagerServlet.resources[ type ], t);writer.println(sm.getString(managerServlet.exception,t.toString()));return;}printResources(writer, , global, type, clazz);}protected void printResources(PrintWriter writer, String prefix,javax.naming.Context namingContext,String type, Class clazz) {try {NamingEnumeration items namingContext.listBindings();while (items.hasMore()) {Binding item (Binding) items.next();if (item.getObject() instanceof javax.naming.Context) {printResources(writer, prefix item.getName() /,(javax.naming.Context) item.getObject(), type, clazz);} else {if ((clazz ! null) (!(clazz.isInstance(item.getObject())))) {continue;}writer.print(prefix item.getName());writer.print(:);writer.print(item.getClassName());// Do we want a description if available?writer.println();}}} catch (Throwable t) {log(ManagerServlet.resources[ type ], t);writer.println(sm.getString(managerServlet.exception,t.toString()));}}protected void roles(PrintWriter writer) {if (debug 1) {log(roles: List security roles from user database);}// Look up the UserDatabase instance we should useUserDatabase database null;try {InitialContext ic new InitialContext();database (UserDatabase) ic.lookup(java:comp/env/users);} catch (NamingException e) {writer.println(sm.getString(managerServlet.userDatabaseError));log(java:comp/env/users, e);return;}if (database null) {writer.println(sm.getString(managerServlet.userDatabaseMissing));return;}// Enumerate the available roleswriter.println(sm.getString(managerServlet.rolesList));Iterator roles database.getRoles();if (roles ! null) {while (roles.hasNext()) {Role role (Role) roles.next();writer.print(role.getRolename());writer.print(:);if (role.getDescription() ! null) {writer.print(role.getDescription());}writer.println();}}}protected void serverinfo(PrintWriter writer) {if (debug 1)log(serverinfo);try {StringBuffer props new StringBuffer();props.append(OK - Server info);props.append(\nTomcat Version: );props.append(ServerInfo.getServerInfo());props.append(\nOS Name: );props.append(System.getProperty(os.name));props.append(\nOS Version: );props.append(System.getProperty(os.version));props.append(\nOS Architecture: );props.append(System.getProperty(os.arch));props.append(\nJVM Version: );props.append(System.getProperty(java.runtime.version));props.append(\nJVM Vendor: );props.append(System.getProperty(java.vm.vendor));writer.println(props.toString());} catch (Throwable t) {getServletContext().log(ManagerServlet.serverinfo,t);writer.println(sm.getString(managerServlet.exception,t.toString()));}}protected void sessions(PrintWriter writer, String path, int idle) {if (debug 1) {log(sessions: Session information for web application at path );if (idle 0)log(sessions: Session expiration for idle minutes path );}if ((path null) || (!path.startsWith(/) path.equals())) {writer.println(sm.getString(managerServlet.invalidPath,RequestUtil.filter(path)));return;}String displayPath path;if( path.equals(/) )path ;try {Context context (Context) host.findChild(path);if (context null) {writer.println(sm.getString(managerServlet.noContext,RequestUtil.filter(displayPath)));return;}Manager manager context.getManager() ;if(manager null) {writer.println(sm.getString(managerServlet.noManager,RequestUtil.filter(displayPath)));return; }int maxCount 60;int maxInactiveInterval manager.getMaxInactiveInterval()/60;int histoInterval maxInactiveInterval / maxCount;if ( histoInterval * maxCount maxInactiveInterval ) histoInterval;maxCount maxInactiveInterval / histoInterval;if ( histoInterval * maxCount maxInactiveInterval ) maxCount;writer.println(sm.getString(managerServlet.sessions, displayPath));writer.println(sm.getString(managerServlet.sessiondefaultmax, maxInactiveInterval));Session [] sessions manager.findSessions();int [] timeout new int[maxCount];int notimeout 0;int expired 0;long now System.currentTimeMillis();for (int i 0; i sessions.length; i) {int time (int)((now-sessions[i].getLastAccessedTimeInternal())/1000);if (idle 0 time idle*60) {sessions[i].expire();idle;}timetime/60/histoInterval;if (time 0)notimeout;else if (time maxCount)timeout[maxCount-1];elsetimeout[time];}if (timeout[0] 0)writer.println(sm.getString(managerServlet.sessiontimeout, histoInterval, timeout[0]));for (int i 1; i maxCount-1; i) {if (timeout[i] 0)writer.println(sm.getString(managerServlet.sessiontimeout, (i)*histoInterval - (i1)*histoInterval, timeout[i]));}if (timeout[maxCount-1] 0)writer.println(sm.getString(managerServlet.sessiontimeout, maxCount*histoInterval, timeout[maxCount-1]));if (notimeout 0)writer.println(sm.getString(managerServlet.sessiontimeout,unlimited, notimeout));if (idle 0)writer.println(sm.getString(managerServlet.sessiontimeout, idle,expired expired));} catch (Throwable t) {log(ManagerServlet.sessions[ displayPath ], t);writer.println(sm.getString(managerServlet.exception,t.toString()));}} protected void undeploy(PrintWriter writer, String path) {if (debug 1)log(undeploy: Undeploying web application at path );if ((path null) || (!path.startsWith(/) path.equals())) {writer.println(sm.getString(managerServlet.invalidPath,RequestUtil.filter(path)));return;}String displayPath path;if( path.equals(/) )path ;try {// Validate the Context of the specified applicationContext context (Context) host.findChild(path);if (context null) {writer.println(sm.getString(managerServlet.noContext,RequestUtil.filter(displayPath)));return;}// Identify the appBase of the owning Host of this Context (if any)String appBase null;File appBaseDir null;if (context.getParent() instanceof Host) {appBase ((Host) context.getParent()).getAppBase();appBaseDir new File(appBase);if (!appBaseDir.isAbsolute()) {appBaseDir new File(System.getProperty(catalina.base),appBase);}}if (!isDeployed(path)) {writer.println(sm.getString(managerServlet.notDeployed,RequestUtil.filter(displayPath)));return;}if (!isServiced(path)) {addServiced(path);try {// Try to stop the context first to be nicer((Lifecycle) context).stop();} catch (Throwable t) {// Ignore}try {File war new File(getAppBase(), getDocBase(path) .war);File dir new File(getAppBase(), getDocBase(path));File xml new File(configBase, getConfigFile(path) .xml);if (war.exists()) {war.delete();} else if (dir.exists()) {undeployDir(dir);} else {xml.delete();}// Perform new deploymentcheck(path);} finally {removeServiced(path);}}writer.println(sm.getString(managerServlet.undeployed,displayPath));} catch (Throwable t) {log(ManagerServlet.undeploy[ displayPath ], t);writer.println(sm.getString(managerServlet.exception,t.toString()));}} 2在部署描述符中还有 security-constraint 元素also tomcat7!-- Define a Security Constraint on this Application --!-- NOTE: None of these roles are present in the default users file --security-constraintweb-resource-collectionweb-resource-nameHTML Manager interface (for humans)/web-resource-nameurl-pattern/html/*/url-pattern/web-resource-collectionauth-constraintrole-namemanager-gui/role-name/auth-constraint/security-constraintsecurity-constraintweb-resource-collectionweb-resource-nameText Manager interface (for scripts)/web-resource-nameurl-pattern/text/*/url-pattern/web-resource-collectionauth-constraintrole-namemanager-script/role-name/auth-constraint/security-constraintsecurity-constraintweb-resource-collectionweb-resource-nameJMX Proxy interface/web-resource-nameurl-pattern/jmxproxy/*/url-pattern/web-resource-collectionauth-constraintrole-namemanager-jmx/role-name/auth-constraint/security-constraintsecurity-constraintweb-resource-collectionweb-resource-nameStatus interface/web-resource-nameurl-pattern/status/*/url-pattern/web-resource-collectionauth-constraintrole-namemanager-gui/role-namerole-namemanager-script/role-namerole-namemanager-jmx/role-namerole-namemanager-status/role-name/auth-constraint/security-constraint对上述代码的分析AnalysisA1上面的配置意思是 整个应用程序被限制为只有带manager前缀的用户角色的用户才能访问 A2auth-login 元素指明了权限认证使用 BASIC 身份验证方式只有当用户输入正确的用户名和密码时才能访问受限资源 login-configauth-methodBASIC/auth-methodrealm-nameTomcat Manager Application/realm-name/login-config 3在tomcat中用户和角色列表都存储在 tomcat-users.xml 中该文件位于 %CATALINA_HOME%/conf 目录下。因此要访问 Manager应用程序必须添加一个 manager角色如manager-gui和一个拥有该角色的用户 例如tomcat-usersrole rolenamespan stylefont-family: Arial, Helvetica, sans-serif;manager-gui/spanspan stylefont-family: Arial, Helvetica, sans-serif;//spanuser usernametomcat passwordtomcat rolesmanager-gui/ /tomcat-users对以上代码的分析Analysis通过这个 tomcat-users.xml 文件就可以以tomcat为用户名以tomcat为密码来访问 Manager 应用程序了【2】ContainerServlet接口org.apache.catalina.ContainerServlet接口1intro实现该接口的 servlet类可以访问表示该 servlet实例的StandardWrapper对象通过访问该Wrapper实例它也就可以访问表示当前 web 应用程序的Context实例以及该Context实例内的部署器StandardHost类的实例等对象public interface ContainerServlet { public Wrapper getWrapper();public void setWrapper(Wrapper wrapper); } 2Catalina实例会调用实现了 ContainerServlet接口的servlet类的 setWrapper方法将该引用传递给表示该servlet类 的 StandardWrapper实例【3】初始化 ManagerServlet1introservlet 对象由一个 org.apache.catalina.core.StandardWrapper 实例表示第一次调用servlet实例时会调用 StandardWrapper.loadServlet()方法然后调用 servlet实例的init()方法下面的图片借用自tomcat(5)servlet容器 章节5.7【4】列出已经部署的web 应用程序 1通过 http://localhost:8888/manager/list 列出已经部署的web 应用程序2上面的URL 会调用 ManagerServlet.list()方法 源码如下protected void list(PrintWriter writer) { // org.apache.catalina.manager.ManagerServlet.list().if (debug 1)log(list: Listing contexts for virtual host deployer.getName() );writer.println(sm.getString(managerServlet.listed,deployer.getName()));String contextPaths[] deployer.findDeployedApps();for (int i 0; i contextPaths.length; i) {Context context deployer.findDeployedApp(contextPaths[i]);String displayPath contextPaths[i];if( displayPath.equals() )displayPath /;if (context ! null ) {if (context.getAvailable()) {writer.println(sm.getString(managerServlet.listitem,displayPath,running, context.getManager().findSessions().length,context.getDocBase()));} else {writer.println(sm.getString(managerServlet.listitem,displayPath,stopped,0,context.getDocBase()));}}}}对以上代码的分析AnalysisA1list()方法会调用部署器的 findDeployedApps()方法来获取catalina中所有已经部署了的 Context的路径 A2然后对path 数组进行迭代获取每一个Context然后检查该 Context是否可用 A3对每个可用的 Contextlist()方法输出上下文路径字符串 running用户session 的数量以及文档的根路径 A4对那些不可用的 Contextlist()方法输出上下文路径字符串 stopped0 以及文档的根路径 【5】启动web 应用程序1使用如下URL 来启动某个web 应用程序 http://localhost:8888/manager/start?pathContextPath 而ContextPath是想要启动web 应用程序的路径2在接收到该URL后会调用 ManagerServlet.start() 方法protected void start(PrintWriter writer, String path) { //org.apache.catalina.manager.ManagerServlet.start().if (debug 1)log(start: Starting web application at path );if ((path null) || (!path.startsWith(/) path.equals())) {writer.println(sm.getString(managerServlet.invalidPath, path));return;}String displayPath path;if( path.equals(/) )path ;try {Context context deployer.findDeployedApp(path); // highlight line.if (context null) {writer.println(sm.getString(managerServlet.noContext, displayPath));return;}deployer.start(path);// highlight line.if (context.getAvailable())writer.println(sm.getString(managerServlet.started, displayPath));elsewriter.println(sm.getString(managerServlet.startFailed, displayPath));} //......} public void start(String contextPath) throws IOException { //org.apahce.catalina.core.StandardHostDeployer.start().// Validate the format and state of our argumentsif (contextPath null)throw new IllegalArgumentException(sm.getString(standardHost.pathRequired));if (!contextPath.equals() !contextPath.startsWith(/))throw new IllegalArgumentException(sm.getString(standardHost.pathFormat, contextPath));Context context findDeployedApp(contextPath);if (context null)throw new IllegalArgumentException(sm.getString(standardHost.pathMissing, contextPath));host.log(standardHost.start contextPath);try {((Lifecycle) context).start(); // highlight line.启动Context容器.} //......}对以上代码的分析Analysis在执行一些检查工作后start()方法会在 try代码块中调用部署器的 findDeployedApp()方法该方法返回参数path 指向的Context对象。如果context不是nullstart()方法调用部署器的start()方法来启动该 web 应用程序【6】关闭web 应用程序 1intro使用如下URL 关闭某个web 应用程序  http://localhost:8888/manager/stop?pathContextPath2在接收到该URL后会调用 ManagerServlet.stop() 方法 protected void stop(PrintWriter writer, String path) { //org.apache.catalina.manager.ManagerServlet.stop().if (debug 1)log(stop: Stopping web application at path );if ((path null) || (!path.startsWith(/) path.equals())) {writer.println(sm.getString(managerServlet.invalidPath, path));return;}String displayPath path;if( path.equals(/) )path ;try {Context context deployer.findDeployedApp(path); //highlight line.if (context null) {writer.println(sm.getString(managerServlet.noContext, displayPath));return;}// It isnt possible for the manager to stop itselfif (context.getPath().equals(this.context.getPath())) {writer.println(sm.getString(managerServlet.noSelf));return;}deployer.stop(path); // highlight line.writer.println(sm.getString(managerServlet.stopped, displayPath));} //.....} public void stop(String contextPath) throws IOException { //org.apahce.catalina.core.StandardHostDeployer.start().// Validate the format and state of our argumentsif (contextPath null)throw new IllegalArgumentException(sm.getString(standardHost.pathRequired));if (!contextPath.equals() !contextPath.startsWith(/))throw new IllegalArgumentException(sm.getString(standardHost.pathFormat, contextPath));Context context findDeployedApp(contextPath);if (context null)throw new IllegalArgumentException(sm.getString(standardHost.pathMissing, contextPath));host.log(standardHost.stop contextPath);try {((Lifecycle) context).stop(); //highlight line. 停止该容器.} catch (LifecycleException e) {host.log(standardHost.stop contextPath : , e);throw new IllegalStateException(standardHost.stop contextPath : e);}} public synchronized void stop() throws LifecycleException { // org.apache.catalina.core.StandardContext.stop().// Validate and update our current component stateif (!started)throw new LifecycleException(sm.getString(containerBase.notStarted, logName()));if (debug 1)log(Stopping);// Notify our interested LifecycleListenerslifecycle.fireLifecycleEvent(BEFORE_STOP_EVENT, null);// Mark this application as unavailable while we shut downsetAvailable(false);// Binding threadClassLoader oldCCL bindThread();// Stop our filtersfilterStop();// Stop our application listenerslistenerStop();// Finalize our character set mappersetCharsetMapper(null);if ((manager ! null) (manager instanceof Lifecycle)) {((Lifecycle) manager).stop();}// Normal container shutdown processingif (debug 1)log(Processing standard container shutdown);// Notify our interested LifecycleListenerslifecycle.fireLifecycleEvent(STOP_EVENT, null);started false;try {// Stop the Valves in our pipeline (including the basic), if anyif (pipeline instanceof Lifecycle) {((Lifecycle) pipeline).stop();}// Stop our child containers, if anyContainer children[] findChildren();for (int i 0; i children.length; i) {if (children[i] instanceof Lifecycle)((Lifecycle) children[i]).stop();}// Stop our Mappers, if anyMapper mappers[] findMappers();for (int i 0; i mappers.length; i) {if (mappers[(mappers.length-1)-i] instanceof Lifecycle)((Lifecycle) mappers[(mappers.length-1)-i]).stop();}// Stop resourcesresourcesStop();if ((realm ! null) (realm instanceof Lifecycle)) {((Lifecycle) realm).stop();}if ((cluster ! null) (cluster instanceof Lifecycle)) {((Lifecycle) cluster).stop();}if ((logger ! null) (logger instanceof Lifecycle)) {((Lifecycle) logger).stop();}if ((loader ! null) (loader instanceof Lifecycle)) {((Lifecycle) loader).stop();}} finally {// Unbinding threadunbindThread(oldCCL);}// Reset application contextcontext null;// Notify our interested LifecycleListenerslifecycle.fireLifecycleEvent(AFTER_STOP_EVENT, null); if (debug 1)log(Stopping complete);}ConclusionC1本文讲解了如何使用一个专用的接口ContainerServlet来创建一个可以访问 Catalina内部类的 servlet类 C2可以用来管理已部署web 应用程序的 Manager应用程序展示了如何从 Wrapper对象中获取其他 Catalina对象
http://www.zqtcl.cn/news/434205/

相关文章:

  • 东莞网站建设服务商wordpress页面样式
  • 亿星网站建设创业网站怎么做
  • 绿韵建设有限公司网站重庆景点分布图
  • 咨询类网站模板wordpress怎样切换语言
  • 大连网站建设与维护题库网站建设目标是
  • 威海网站开发询广西南宁网站运营
  • 网站的素材做logo长沙专业的网站建设企业
  • 网站显示速度的代码是什么情况专门做中式服装平台的网站
  • 驻马店做网站的公司大连网站模板建站
  • aso如何优化网站优化分析软件
  • IT周末做网站违反制度么wordpress 图床 插件
  • 成都网站建设scjsc888因网站建设关闭的公告
  • 唐山公司建设网站十大牌子网
  • 网站开发的选题依据电子商务网站建设内容
  • 中企动力做的网站被百度屏蔽推销网站话术
  • 四川网站制作广告设计自学网教程
  • 做个简单的企业小网站单纯做网站的公司
  • 河北省建设厅官方网站哈尔滨建设工程招聘信息网站
  • 茂名网站制作网页个人博客登录首页
  • 类似qq空间的网站wordpress 简历主题
  • 专业网站运营制作怎么写代码做网站
  • 安徽免费网站制作西安做行业平台网站的公司
  • 我想做服装网站怎么做网页设计优秀案例分析
  • 网站建设技术教程视频wordpress中文模版
  • 高端企业网站 程序纸牌网站建设
  • html制作网站推广最有效的办法
  • 做网站推广的工作内容凡客诚品创始人
  • 网站开发pc端和手机端外贸建设网站公司
  • 长沙哪家网站设计好上海成品网站
  • wordpress商城插件收费哪里可以做网站优化