`

Websphere Application Server (WAS) 中应用的哪一个 web.xml 在起作用

阅读更多

从 Tomcat 再到使用 Webshpere Application Server (WAS) 不光金钱上付出太多(这当然不用我操心),精力上也费神的多,不过收获也不少,特别是商业产品在处理大用户量的并发访问能力是 Tomcat 无法比的。这里记述一个使用 WAS 给应用打补丁时遇到的问题--要更新哪一个 web.xml。

为便于描述,我们假设已在 WAS 下部署了一个名叫 Prod.war 的包(你也可以部署一个 ear 包,部署的 ear 包后的目录名更明确一些),WAS 的安装目录表示为 WAS_HOME,WAS 所在的主机名为 unmi,那么 Prod.war 部署后所在的目录就是

WAS_HOME/installedApps/unmi/Prod_war.ear/Prod.war

用过 WAS 的人都知道,如果是部署后要给应用打补丁的话,和 Tomcat 下的应用一样,也是把类或 JSP 拷到如上相应的目录中就行了,换了类,WAS 会自动重新加载。

可偏偏有一次打补丁,有个同事加的是一个 Servlet 类,如 com.unmi.ReportServlet,并在 web.xml 对这个 Servlet 作为相应的配置

<servlet> 
    <servlet-name>ReportServlet</servlet-name> 
    <servlet-class>com.unmi.ReportServlet</servlet-class> 
</servlet> 
  
.......................................................................................... 
  
<servlet-mapping> 
    <servlet-name>ReportServlet</servlet-name> 
    <url-pattern>/ReportServlet</url-pattern> 
</servlet-mapping>
 

然后把 web.xml 拷贝到 WAS_HOME/installedApps/unmi/Prod_war.ear/Prod.war/WEB-INF/ 中,再把 ReportServlet.class 拷到 WAS_HOME/installedApps/unmi/Prod_war.ear/Prod.war/WEB-INF/classes/com/unmi/ 目录中。

然后无论怎么重启应用还是应用服务器,通过 /ReportServlet 的 URL 总是 404 Not Found,没法进入到 com.unmi.ReportServlet,一时有些不知所措,过后到 WAS 管理控制台下看看该应用的 Web 模块->(点应用名展开)->查看部署描述符,在 Servlet Mappings 中不曾发现有那个 /ReportServlet,原来是没有部署上 ReportServlet 啊。

此时,大家的心都飞到家里去了,本来打补丁就是选择晚上下班后 9 点以后没什么用户访问才进行的,正有些焦头烂额,甚至是考虑发布整个应用,但碍于正式环境上的应用是许久以前发布的,一直是不断打补丁补掇起来的。完全重新发布应用自然是有很大的风险性,本地代码即使是 VSS 代码与正式环境不同步那是常用事(唉,不想扯另一话题的)。差点订下规定说,以后能有别的技术方法实现的,就不要去改 web.xml 文件。

有些当然只是说说罢了,实际摆在面前的是硬着头皮也要上,明天业务不能中断的。

那若不是 WAS_HOME/installedApps/unmi/Prod_war.ear/Prod.war/WEB-INF/web.xml 在起作用,又会是哪个文件呢?于是搜索 WAS_HOME 目录下的所有 xml 文件,看哪个文件中有内容 ReportServlet,终于发现是藏匿在 WAS_HOME/config/cells/unmi/applications/Prod_war.ear/deployments/Prod_war/Prod.war/WEB-INF/ 中,对了,就是这里,把要更新的 web.xml 替换掉这个目录中的 web.xml,然后重启应用,OK,ReportServlet 可用了,一切正常。

细心点你会发现在 WAS_HOME/config/cells/unmi/applications/Prod_war.ear/deployments/Prod_war/Prod.war/WEB-INF/  可以看到你的 war 包中的 WEB-INF 目录下的所有文件,连 struts-config.xml 等都在这里了。其实在这个目录中除 web.xml、ibm-web-bnd.xmi  有关部署描述文件外,实际应用运行是不会使用此目录中的其他文件的,struts-config.xml 等在这里只不过一个摆设;同样不客气的是,在目录 WAS_HOME/installedApps/unmi/Prod_war.ear/Prod.war/WEB-INF 中作客的 web.xml 也只是充个样罢了,毫无用处,还混淆了视听。

前面主戏算是过去了,然余震未断。上面的故事是假设把应用部署在非集群的环境,实际情况是部署在集群环境的。集群环境中 Prod.war 部署后所在的目录就会是 WAS_HOME/installedApps/unmiNetwork/Prod_war.ear/Prod.war,所以,基于这一实际,需要做的就应把 web.xml 覆盖到 WAS_HOME/config/cells/unmiNetwork/applications/Prod_war.ear/deployments/Prod_war/Prod.war/WEB-INF 这个目录中去。

可是有一天,突然发现那个 /ReportServlet 又访问不到了,查看一下 WAS_HOME/config/cells/unmiNetwork/applications/Prod_war.ear/deployments/Prod_war/Prod.war/WEB-INF/web.xml 的内容,发现怎么又恢复成原样了呢?有关 ReportServlet 的配置不见了,顿时不知所以。隐约间还是回想了起来,原来整个应用及 DeploymentManager(DM) 都重启了,肯定是 DeploymentManager 作的怪。找了找,发现在 DM_HOME/config/cells/unmiNetwork/applications/Prod_war.ear/deployments/Prod_war/Prod.war/WEB-INF 中也有一个 web.xml (DM_HOME 代表 DeploymentManager 的安装目录),就它还是老样,重启 DM 肯定又用这个同步到了各节点去的。于是乎把此处的 web.xml 也换成新的了,以后无论是重启应用服务器还是 DM 都不会有问题了。

本文侧重于发现问题及解决问题的过程,过程中才有乐趣,但对于务实且重效率的人固然是看了会眼花。因此最后还是总结一下吧:

WAS 下的 Web 应用,如果要更新 web.xml 文件,该替换哪一个 web.xml 呢?

·非集群环境要更新 WAS_HOME/config/cells/[unmi]/applications/[Prod_war.ear]/deployments/[Prod_war]/[Prod.war]/WEB-INF/ 中的 web.xml  文件

·集群环境则,只是做了上一步,重启应用后确实有效果,但若要在 DM 重启后仍然有效的话,还需更新
    DM_HOME/config/cells/[unmiNetwork]/applications/[Prod_war.ear]/deployments/[Prod_war]/[Prod.war]/WEB-INF 中的 web.xml 文件

·如果只更新 WAS_HOME/installedApps/[unmi]/[Prod_war.ear]/[Prod.war]/WEB-INF/web.xml (非集群环境) 或
    WAS_HOME/installedApps/[unmiNetwork]/[Prod_war.ear]/[Prod.war]/WEB-INF/web.xml (集群环境) 都是无济于事的。

·WAS_HOME 和 DM_HOME 分别代表 AppServer 和 DeploymentManager 的安装目录。集群和非集群情况下有一个目录的差别就是有无 "Network",指默认安装情况了。以上中括号中的内容视你的具体情况而定的,WAS 和 DM 是把部署描述文件和程序文件分离的,其实有时还是有它好处的。非集群环境没怎么感觉到,集群环境还是能感觉到,就是在节点间进行配置同步的时候。 
分享到:
评论

相关推荐

    WebSphere Application Server 启动错误诊断(WAS)

    WAS 是一个复杂的应用服务器,启动过程中可能会出现各种错误,影响服务器的正常运行。了解 WAS 启动过程和诊断技术是确保服务器稳定运行的关键。 一、WAS 启动过程解析 在了解诊断技术之前,首先需要了解 WAS 的...

    WebSphere Application Server Toolkit V6.1 中构建 Web 服务

    5. **发布Web服务**:部署服务到WAS涉及到几个步骤:在WAS管理控制台中创建一个新的Web服务应用,指定EAR文件的位置,设置服务的安全性和性能选项,最后启动服务。发布后,其他应用程序可以通过WSDL来发现和调用这个...

    配置websphere application server ssl

    ### WebSphere Application Server SSL配置详解 #### 一、概述 在现代互联网环境下,为了保障数据的安全性和隐私性,采用SSL/TLS加密已经成为一种普遍做法。本文档将详细介绍如何配置IBM WebSphere Application ...

    WebSphere Application Server for Developers V7

    IBM WebSphere Application Server (WAS) 是一款高性能的企业级应用服务器,适用于构建、部署和管理企业级Java应用程序。本指南旨在帮助开发者全面了解WebSphere Application Server V7,并提供详细的步骤来创建、...

    Websphere Application Server 6.1乱码问题解决办法

    Websphere Application Server 6.1 是 IBM 提供的一个企业级的应用服务器,它为开发和部署Web应用程序和服务提供了强大的支持。然而,在实际使用过程中,乱码问题常常困扰着开发者和管理员,尤其是在处理不同编码...

    WebServer Plugin for Websphere Application Server 6.1

    WebServer Plugin是IBM针对Websphere Application Server (WAS) 的一种组件,它允许将Web请求路由到WAS,以实现更高效的Web服务器与应用程序服务器之间的集成。在本例中,我们关注的是专为WAS 6.1版本设计的Web...

    Web Services Handbook for WebSphere Application Server 6.1红皮书

    《Web Services Handbook for WebSphere Application Server 6.1红皮书》是一份由IBM官方发布的详尽指南,旨在深入解析WebSphere Application Server Version 6.1对于Web服务的支持与应用。该红皮书由Ueli Wahli、...

    IBM WebSphere Application Server v7.0 Security

    为了更好地理解 IBM WAS v7.0 的安全性如何在实际环境中发挥作用,以下是一个示例场景: 假设一个企业正在使用 IBM WAS v7.0 来部署一个关键业务应用程序。管理员希望确保只有经过授权的员工才能访问该应用程序。...

    WebSphere Application Server6.x资源环境提供程序配置

    配置属性可以通过WebSphere管理控制台添加到JNDI中,然后在应用程序中通过JNDI查找获取这些属性。 在WebSphere Application Server 5.x和6.x版本中,可以通过资源环境引用(Resource Environment References)来...

    IBM Websphere application Server 最权威资料

    IBM WebSphere Application Server - The Complete Reference Part I - Getting Started Chapter 1 - What Is WebSphere? Chapter 2 - Installing and Starting WebSphere Chapter 3 - Hello World (Wide ...

    WebSphere Application Server下Struts2.0无法使用解决方案

    在使用WebSphere Application Server(WAS)部署基于Struts2.0的应用时,可能会遇到一些问题导致Struts2无法正常工作。这个问题通常表现为在尝试访问Struts2控制的页面时,返回HTTP 500错误,并且日志中显示"Filter ...

    WAS9或WAS8配置HTTPS证书详细教程

    WebSphere Application Server (WAS) 是一款广泛应用的中间件,用于托管企业级应用程序。在现代网络环境中,为了确保数据传输的安全性,HTTPS 协议变得至关重要。本教程将详细介绍如何在 WAS 9 或 WAS 8 上配置 ...

    WebSphere培训教程(完整版)

     企业版(Enterprise Edition),提供了一个高可靠性的解决方案,能够将电子商务应用移植进关键性的企业环 境,起到平衡现有IT系统的作用。它组合了IBM享誉世界的交易环境TXSeries,和ComponentBroker,IBM的一个支持...

    IBM WebSphere Application ServerProduct Overview

    IBM WebSphere Application Server (WAS) 是一个基于 Java 的应用程序服务器平台,旨在提供一个健壮且灵活的环境来部署和运行 Java 应用程序。WAS 实现了 Java 2 Enterprise Edition (J2EE) 规范,并在此基础上提供...

    was-installer:WebSphere应用程序部署(传统)脚本

    WAS-installer是用于在IBM WebSphere Application Server单元中部署一组应用程序(以EAR形式提供)的工具。 它使用系统目录(最好在dmgr服务器上)作为可部署EAR所在的热文件夹以及描述单元中应用程序拓扑的xml文档...

    WebSphere_Application_Server_V6技术文档

    总结起来,WebSphere Application Server V6是IBM提供的一个强大且成熟的Java应用程序服务器,它集成了多种J2EE功能,支持Web服务,具有高度的可扩展性和可管理性。随着版本的迭代,IBM持续优化了其性能、安全性和...

    Websphere入门之一_WAS6[1].0安装.pdf

    本文档详细介绍了IBM WebSphere Application Server (WAS) 6.0 和 6.1 版本在Windows环境下的安装流程,同时也提供了在Linux和Unix环境下安装的参考指导。尽管主要聚焦于Windows平台,但其核心步骤和注意事项同样...

    IBM Websphere与IBM HttpServer的集成

    IBM Websphere是一个强大的企业级应用服务器,它支持与多种Web服务器的集成,包括IBM HttpServer(IHS),这是一个经过IBM改造的Apache Web服务器,专为与IBM WebSphere产品线的紧密集成而设计。IHS能够通过...

Global site tag (gtag.js) - Google Analytics