`
hejin_sl
  • 浏览: 8722 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • J2EE
 
阅读更多

从 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 作为相应的配置

view source print?01.<servlet>02.    <servlet-name>ReportServlet</servlet-name>03.    <servlet-class>com.unmi.ReportServlet</servlet-class>04.</servlet>05. 06..........................................................................................07. 08.<servlet-mapping>09.    <servlet-name>ReportServlet</servlet-name>10.    <url-pattern>/ReportServlet</url-pattern>11.</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 6.0 应用指南

    - 开发工具中内置了一个轻量级的WebSphere Application Server实例,便于开发者进行应用测试和调试。 ##### 1.2 重要的用户界面变化 - WebSphere Application Server 6.0 对其用户界面进行了重大改进,提高了用户...

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

    在本文中,我们将详细介绍 WebSphere Application Server(WAS)启动错误的诊断方法。WAS 是一个复杂的应用服务器,启动过程中可能会出现各种错误,影响服务器的正常运行。了解 WAS 启动过程和诊断技术是确保服务器...

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

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

    WebSphere Application Server9.0.0.2.txt

    WebSphere Application Server9.0.0.2 安装包百度云盘资源地址,非商业用途,仅供学习使用。

    配置websphere application server ssl

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

    WebSphere Application Server V6

    **WebSphere Application Server (WAS) V6** 是IBM提供的一款企业级应用服务器产品,它支持多种应用开发模型,如Java EE、Web Services等。本文将重点介绍在WAS V6环境中如何实现应用程序的自动安装功能。 #### 二...

    IBM 红皮书 WAS WebSphere Application Server

    《IBM 红皮书 WAS WebSphere Application Server Liberty Profile Guide for Developers》是针对开发者的一份详细指南,旨在帮助他们理解并有效地使用WebSphere Application Server (WAS) 的Liberty Profile。WAS是...

    Websphere Application Server 部署Spring Boot项目源码.zip

    在IT行业中,WebSphere Application Server(WAS)是一款由IBM提供的企业级应用服务器,它能够支持各种Java应用程序和服务,如Java EE(Enterprise Edition)应用。本教程将详细讲解如何在WebSphere Application ...

    WebSphere Application Server V6.1 Security Handbook.

    《WebSphere Application Server V6.1 Security Handbook》是一本非常实用的指导手册,它不仅详细介绍了如何配置和管理WebSphere Application Server的安全特性,而且还提供了丰富的示例代码和应用程序,帮助用户更...

    WebSphere Application Server v6.1 应用管理

    【WebSphere Application Server v6.1 应用管理】是IBM提供的一款强大的企业级应用服务器管理平台,主要用于托管、部署和管理Java EE(Java Platform, Enterprise Edition)应用程序。在这个版本中,WebSphere提供了...

    Websphere Application Server 6.1配置JDBC数据源.doc

    在IBM WebSphere Application Server 6.1中配置JDBC数据源是将应用程序连接到数据库的关键步骤。这个过程涉及创建和配置JDBC提供程序、数据源以及相关的认证别名,以确保应用程序能够顺利地访问和操作数据库。以下是...

    WebSphere Application Server文档

    WebSphere Application Server(WAS)是IBM提供的一款强大的企业级应用服务器,它是Java EE(Java Platform, Enterprise Edition)平台的实现,为企业级应用程序提供运行环境。在本文中,我们将深入探讨WebSphere ...

    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应用程序和服务提供了强大的支持。然而,在实际使用过程中,乱码问题常常困扰着开发者和管理员,尤其是在处理不同编码...

    W38S1 Administration of WebSphere Application Server V5.pdf

    根据提供的文档信息,我们可以推断出这是一份关于 IBM WebSphere Application Server V5 管理的培训材料。下面将详细介绍这份文档中的关键知识点。 ### 一、文档概述 此文档名为《W38S1 Administration of ...

    WebSphere Application Server for Developers V8.5.5

    WebSphere Application Server for Developers V8.5.5是供开发人员使用的免费版的was,需要的小伙伴可以本地安装一下 ,部署测试web项目,因为上传空间有限,这里就只上传windows64位的。

    WebServer Plugin for Websphere Application Server 6.1

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

Global site tag (gtag.js) - Google Analytics