在项目中遇到了更改部署在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 是把部署描述文件和程序文件分离的,其实有时还是有它好处的。非集群环境没怎么感觉到,集群环境还是能感觉到,就是在节点间进行配置同步的时候。
顺便说一句,就我们的项目来说,DeploymentManager 的安装目录是在前置机上
分享到:
相关推荐
WAS 是一个复杂的应用服务器,启动过程中可能会出现各种错误,影响服务器的正常运行。了解 WAS 启动过程和诊断技术是确保服务器稳定运行的关键。 一、WAS 启动过程解析 在了解诊断技术之前,首先需要了解 WAS 的...
5. **发布Web服务**:部署服务到WAS涉及到几个步骤:在WAS管理控制台中创建一个新的Web服务应用,指定EAR文件的位置,设置服务的安全性和性能选项,最后启动服务。发布后,其他应用程序可以通过WSDL来发现和调用这个...
### WebSphere Application Server SSL配置详解 #### 一、概述 在现代互联网环境下,为了保障数据的安全性和隐私性,采用SSL/TLS加密已经成为一种普遍做法。本文档将详细介绍如何配置IBM WebSphere Application ...
IBM WebSphere Application Server (WAS) 是一款高性能的企业级应用服务器,适用于构建、部署和管理企业级Java应用程序。本指南旨在帮助开发者全面了解WebSphere Application Server V7,并提供详细的步骤来创建、...
Websphere Application Server 6.1 是 IBM 提供的一个企业级的应用服务器,它为开发和部署Web应用程序和服务提供了强大的支持。然而,在实际使用过程中,乱码问题常常困扰着开发者和管理员,尤其是在处理不同编码...
WebServer Plugin是IBM针对Websphere Application Server (WAS) 的一种组件,它允许将Web请求路由到WAS,以实现更高效的Web服务器与应用程序服务器之间的集成。在本例中,我们关注的是专为WAS 6.1版本设计的Web...
《Web Services Handbook for WebSphere Application Server 6.1红皮书》是一份由IBM官方发布的详尽指南,旨在深入解析WebSphere Application Server Version 6.1对于Web服务的支持与应用。该红皮书由Ueli Wahli、...
为了更好地理解 IBM WAS v7.0 的安全性如何在实际环境中发挥作用,以下是一个示例场景: 假设一个企业正在使用 IBM WAS v7.0 来部署一个关键业务应用程序。管理员希望确保只有经过授权的员工才能访问该应用程序。...
配置属性可以通过WebSphere管理控制台添加到JNDI中,然后在应用程序中通过JNDI查找获取这些属性。 在WebSphere Application Server 5.x和6.x版本中,可以通过资源环境引用(Resource Environment References)来...
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(WAS)部署基于Struts2.0的应用时,可能会遇到一些问题导致Struts2无法正常工作。这个问题通常表现为在尝试访问Struts2控制的页面时,返回HTTP 500错误,并且日志中显示"Filter ...
WebSphere Application Server (WAS) 是一款广泛应用的中间件,用于托管企业级应用程序。在现代网络环境中,为了确保数据传输的安全性,HTTPS 协议变得至关重要。本教程将详细介绍如何在 WAS 9 或 WAS 8 上配置 ...
企业版(Enterprise Edition),提供了一个高可靠性的解决方案,能够将电子商务应用移植进关键性的企业环 境,起到平衡现有IT系统的作用。它组合了IBM享誉世界的交易环境TXSeries,和ComponentBroker,IBM的一个支持...
IBM WebSphere Application Server (WAS) 是一个基于 Java 的应用程序服务器平台,旨在提供一个健壮且灵活的环境来部署和运行 Java 应用程序。WAS 实现了 Java 2 Enterprise Edition (J2EE) 规范,并在此基础上提供...
WebSphere Application Server 是一款由 IBM 开发的企业级应用服务器,用于托管Java应用程序和服务。在部署和管理WebSphere的过程中,有时需要更改服务器的主机名,这可能由于网络环境的调整、多域名支持或服务器...
WAS-installer是用于在IBM WebSphere Application Server单元中部署一组应用程序(以EAR形式提供)的工具。 它使用系统目录(最好在dmgr服务器上)作为可部署EAR所在的热文件夹以及描述单元中应用程序拓扑的xml文档...
总结起来,WebSphere Application Server V6是IBM提供的一个强大且成熟的Java应用程序服务器,它集成了多种J2EE功能,支持Web服务,具有高度的可扩展性和可管理性。随着版本的迭代,IBM持续优化了其性能、安全性和...
本文档详细介绍了IBM WebSphere Application Server (WAS) 6.0 和 6.1 版本在Windows环境下的安装流程,同时也提供了在Linux和Unix环境下安装的参考指导。尽管主要聚焦于Windows平台,但其核心步骤和注意事项同样...