之前曾经做过一个使用JBuilder+Weblogic开发的项目(加入项目名字为tsterp),当时对Weblogic以及JBuilder之间的配合不熟悉,对两者的工作原理也不甚了解,只知道在JBuilder下可以非常方便地开发对于Weblogic的应用,直到后来想把项目迁移到tomcat下,发现总是404!当时对这个问题感到很奇怪,以为是tomcat某个配置有问题,由于对tomcat不熟悉,最后也不了了之了。
最近又拿到这个项目,已经将开发工具转换到apusic operamasks中,并将此项目作为一个标准的apusic工程创建完成。而weblogic实在是太慢了,就想把应用服务器迁移到apusic下,发现在apusic下同样是404错误!此时发现报404错误的时候,浏览器的地址栏已经没有此应用的名字(tsterp),而是直接“地址:端口号/页面”,奇怪了!项目名称怎么突然没了呢?难道说非要将此项目设置为默认的项目?先按照项目作为apusic默认的启动项目的配置方法,将此项目配置为apusic下的默认应用,启动后竟然可以正常访问了!看来果然是某个地方的路径出了问题。关于apusic下设置默认应用的方法,如下所示:
- 首先,如果应用是部署在apusic的默认域mydomain下,则需要将此domain下的default应用删除。即将%apusic_home%/domains/mydomain/applications下的default应用移除;
- 然后,在应用根目录下新建META-INF文件夹,文件夹下新建apusic-application.xml文件,该文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE apusic-application PUBLIC "-//Apusic//DTD Apusic Application 4.0.2//EN" "http://www.apusic.com/dtds/apusic-application_4_0_2.dtd"> <apusic-application> <module uri=""> <web> <context-root>/</context-root> </web> </module> </apusic-application>
由于在新建工程时,创建的是标准apusic工程(也就是一个指定了应用服务器为apusic的ear项目),因此,在此工程的根目录下已经默认 创建好,只需要修改apusic-application.xml文件的内容为上面所示。
注意:如果不将default移除,两个默认的应用会发生冲突,最终导致系统无法正常启动。
既然知道是什么原因了,再找一下其他解决方案,仔细看了一下原来的代码,发现有很多调用地址的地方直接写的页面的相对路径,而且这种路径都是按照服务器默认就是当前应用的情况,没有考虑到当前应用不是默认的情形。此时,只需在过滤器及几个相关页面中在路径前加上request.getContextPath()获取的上下文路径。更改完成几个地址调用的路径之后,再访问应用,不再出现404错误了。
由此,也发现了原来由于水平有限以及缺少相关积累,写出了一些灵活性及可移植性比较差的代码。
另外,查看了一下原来使用JBuilder+Weblogic时的项目路径下,有一个名为“weblogic.xml”的文件,在此文件中有一个名为“context-root”的项,估计此项的作用就是指定了Weblogic下的默认的应用。
说完了上述问题,顺便查看了一下opermasks自动生成的META-INF下的application.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd" version="5">
<description>ebserp</description>
<display-name>ebserp</display-name>
<module>
<web>
<web-uri>web.war</web-uri>
<context-root>tsterp</context-root>
</web>
</module>
</application>
此文件中的“web_uri”便是自动生成的apusic-application.xml文件的“module”项的uri的值。而在此应用的缓存%apusic_home%/domains/mydomain/deploy/tsterp/tmpfiles路径下,有一个名为“web.war”的目录,此目录便是对应的application.xml文件中的“web-uri”的值,而之所以名为“web.war”,是因为在创建此ear项目时,web模块的名定义为了“web”。而此domain下的另外一个普通的动态web工程(WebWindTest),其在deploy目录下,直接就一个名为“WebWindTest.war”的目录。
原文链接: http://blog.csdn.net/cyq1984/article/details/5555883