创建和配置 Web 应用程序
目录结构
Web 应用程序使用 J2EE 规范中定义的标准目录结构。可以将 Web 应用程序部署为使用此目录结构的文件集合(称为展开的目录格式)或归档文件(称为 WAR 文件)。BEA 建议将展开的 Web 应用程序打包并部署为企业应用程序的一部分。这是 BEA 最佳实践,通过它可以更轻松地执行应用程序迁移、添加和更改操作。此外,通过将 Web 应用程序打包为企业应用程序的一部分,还可以利用拆分的开发目录结构。与传统的单一目录结构相比,这种目录结构具有许多优点。
WEB-INF 目录包含 Web 应用程序的部署描述符(web.xml 和 weblogic.xml)和两个用于存储已编译 Java 类和库 JAR 文件的子目录。这些子目录的名称分别为 classes 和 lib。JSP 标记库存储在位于临时目录顶级的 WEB-INF 目录中。Java 类包括 Servlet、辅助程序类和(如果需要)预编译的 JSP。
属于 Web 应用程序的所有 Servlet、类、静态文件和其他资源都组织在目录层次中。
DefaultWebApp/
DefaultWebApp
,位于 user_domains/mydomain/applications 下。
临时存储整个目录后,会使用 jar 命令将其捆绑到 WAR 文件中。WAR 文件可以单独部署,也可以作为企业应用程序的一部分(建议)与其他应用程序组件(包括其他 Web 应用程序、EJB 组件和 WebLogic Server 组件)一起部署。
JSP 页和 HTTP Servlet 可以访问 WebLogic Server 中可用的所有服务和 API。这些服务包括 EJB、通过 Java 数据库连接(Java Database Connectivity,简称 JDBC)的数据库连接、Java 消息服务 (Java Messaging Service,简称 JMS)、XML 等。
DefaultWebApp
|
|--------------------js
|
|---------------------myjsp
|
|--------------------images
|
|--------------------WEB-INF
| |---------classes
| | |-------package
| | |------MyServlet.class
| |
| |---------web.xml
| |---------weblogic.xml
| |----------lib
|
|-------------------index.jsp
访问 WEB-INF 中的信息
WEB-INF
目录不是应用程序公共文档树的一部分。容器不能将 WEB-INF
目录中包含的任何文件直接提供给客户端。但是,通过对 ServletContext 使用 getResource 和 getResourceAsStream() 方法调用,可以在 Servlet 代码中看到 WEB-INF
目录中的内容;通过使用 RequestDispatcher,可以包括/转发这些内容。因此,如果应用程序开发人员需要从 Servlet 代码访问那些不应直接对 Web 客户端公开的应用程序特定配置信息,则可以将这些信息放置在此目录中。
由于请求以区分大小写的方式匹配到资源映射,因此,(例如)对“/WEB-INF/foo”和“/WEb-iNf/foo”的客户端请求不会导致返回位于 /WEB-INF 下的 Web 应用程序内容,也不会返回该处所列的任何形式的目录。
目录结构示例
以下是 Web 应用程序目录结构的示例,其中 myWebApp/ 是临时目录。
myWebApp/
WEB-INF/
web.xml
weblogic.xml
lib/
MyLib.jar
classes/
MyPackage/
MyServlet.class
index.html
index.jsp
创建和配置 Web 应用程序的主要步骤
以下步骤概括了使用拆分开发目录结构将 Web 应用程序作为企业应用程序的一部分进行创建的过程。请参阅“使用 WebLogic Server 开发应用程序”中的创建拆分开发目录环境、在拆分开发目录中生成应用程序和从拆分开发目录进行部署和打包。
您可能希望使用 WebLogic Server 中包含的开发人员工具来创建和配置 Web 应用程序。请参阅 Web 应用程序开发人员工具。
步骤一:创建企业应用程序包装
-
为根 EAR 文件创建目录: -
按如下所示设置环境: -
按如下所示,将企业应用程序打包在 \src\myEAR\ 目录中:-
将企业应用程序描述符(application.xml
和weblogic-application.xml
)放入 META-INF\ 目录中。请参阅使用 WebLogic Server 开发应用程序中的企业应用程序部署描述符。 -
根据需要编辑部署描述符以微调企业应用程序的行为。请参阅 Web 应用程序开发人员工具。 -
将企业应用程序 .jar 文件放入以下目录中:
-
步骤二:创建 Web 应用程序
-
在 EAR 文件所在的根目录中为 Web 应用程序创建目录: -
按如下所示,将 Web 应用程序打包在 \src\myEAR\myWebApp\ 目录中:-
将 Web 应用程序描述符(web.xml 和 weblogic.xml)放入 \src\myEAR\myWebApp\WEB-INF\ 目录中。请参阅 weblogic.xml 部署描述符元素。 -
根据需要编辑部署描述符以微调企业应用程序的行为。请参阅 Web 应用程序开发人员工具。 -
将 Web 应用程序页引用的所有 HTML 文件、JSP、图像和任何其他文件放入 Web 应用程序的根目录中。 -
将 Web 应用程序 Java 源文件(Servlet、标记库以及 Servlet 或标记库引用的其他类)放入以下目录中:
-
步骤三:创建 build.xml 文件
设置目录结构后,可以使用 weblogic.BuildXMLGen 实用工具创建 build.xml 文件。
步骤四:执行拆分开发目录结构 Ant 任务
-
执行 wlcompile Ant 任务以调用 javac 编译器。这会将 Web 应用程序 Java 组件编译到输出目录 /build/myEAR/WEB-INF/classes 中。 -
执行 wlappc Ant 任务以调用 appc 编译器。这会编译要部署的任何 JSP 和容器特定 EJB 类。 -
执行 wldeploy Ant 任务以将 Web 应用程序作为归档的或展开的 EAR 的一部分部署到 WebLogic Server。 -
如果这是生产环境(而不是开发环境),请执行 wlpackage Ant 任务以将 Web 应用程序打包为归档的或展开的 EAR 的一部分。注意: wlpackage Ant 任务会将已编译的版本的 Java 源文件放入生成目录中。例如:/build/myEAR/myWebApp/classes。
配置客户端访问 Web 应用程序的方式
请使用以下模式构造客户端用来访问 Web 应用程序的 URL:
http://hoststring
/ContextPath
/servletPath
/pathInfo
hoststring
ContextPath
servletPath
pathInfo
如果使用虚拟主机,则可以使用虚拟主机名替换 URL 的 hoststring
部分。
为 Web 应用程序配置虚拟主机
WebLogic Server 支持两种为 Web 应用程序配置虚拟主机的方法:
配置基于通道的虚拟主机
<VirtualHost Name="channel1vh" NetworkAccessPoint="Channel1" Targets="myserver"/>
<VirtualHost Name="channel2vh" NetworkAccessPoint="Channel2" Targets="myserver"/>
其中 Channel1 和 Channel2 是 config.xml 文件中配置的 NetworkAccessPoint 的名称。NetworkAccessPoint 表示虚拟主机为其提供 HTTP 请求服务的专用服务器通道名。如果给定 HTTP 请求的 NetworkAccessPoint 与任何虚拟主机的 NetworkAccessPoint 均不匹配,则会将传入的 HOST 头与 VirtualHostName 进行匹配,以解析正确的虚拟主机。如果传入的请求与虚拟主机不匹配,则将由默认 Web 服务器为请求提供服务。
配置基于主机的虚拟主机
<VirtualHost Name="cokevh"
Targets="myserver" VirtualHostNames="coke"/>
<VirtualHost Name="pepsivh" Targets="myserver" VirtualHostNames="pepsi"/>
将 Web 应用程序定位到虚拟主机
使用 WebLogic 管理控制台可以将 Web 应用程序组件定位到服务器和虚拟主机。
请注意,如果从以前版本的 WebLogic Server 迁移,则必须在 config.xml 文件中的目标特性中指定所有 Web 应用程序目标。目标特性已替换虚拟主机特性,虚拟主机不能与同一域中的服务器或群集同名。以下是如何将 Web 应用程序定位到虚拟主机的示例:
<AppDeployment name=
"test-app" Sourcepath="/myapps/test-app.ear"> <SubDeployment Name="test-webapp1.war" Targets="virutalhost-1"/> <SubDeployment Name="test-webapp2.war" Targets="virtualhost-2"/> ... </AppDeployment>
加载 Servlet、上下文监听器和筛选器
Servlet 和筛选器按照 web.xml
文件中定义它们的相同顺序加载,按照相反顺序卸载。上下文监听器按照以下顺序加载:
共享的 J2EE Web 应用程序库
J2EE Web 应用程序库是部署时使用 J2EE 应用程序容器注册的独立 Web 应用程序模块。使用 WebLogic Server 9.2,多个 Web 应用程序可以轻松共享单个 Web 程序模块或模块集合。
Web 应用程序可以引用一个或多个 Web 应用程序库,但不能引用其他库类型(EJB、EAR 文件和常规 JAR 文件)。
Web 应用程序库是部署为库的 Web 应用程序模块。可以使用用来引用 weblogic-application.xml
文件中的应用程序库的相同语法,从 weblogic.xml
文件引用这些库,只是将忽略 <context-root>
元素。
部署时,会将每个引用的库的类路径追加到 Web 应用程序的类路径。因此,对所有资源和类的搜索将首先发生在原始 Web 应用程序中,然后才发生在引用库中。
部署工具、appc、wlcompile 和 BuildXMLGen 在 Web 应用程序级别支持库的方式与它们在应用程序级别支持库的方式一样。有关共享的 J2EE 库及其部署的详细信息,请参阅“使用 WebLogic Server 开发应用程序”中的创建共享 J2EE 库和可选包。
将 JSF 和 JSTL 用于 Web 应用程序
有三个 JSF (JavaServer™ Faces) 和 JSTL(JSP™ 标准标记库)包已作为 Web 应用程序库与 WebLogic Server 捆绑在一起。使用 JSF 或 JSTL 功能的标准 Web 应用程序可以引用这些库。
有关使用您的 Web 应用程序引用这些 Web 应用程序库的信息,请参阅“使用 WebLogic Server 开发应用程序”中的将 WebApp 库和 Web 应用程序一起使用。
在 9.2 版本中,可以将下面三个包作为 Web 应用程序库使用:
-
MyFaces JSF 库 - http://myfaces.apache.org -
Sun JSF RI 库 - https://javaserverfaces.dev.java.net -
JSTL 库 - http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html
这些库位于 WL_HOME
/common/deployable-libraries
目录中。为方便起见,JSF 库包含了 JSTL JAR 文件,以便在应用程序引用 JSF 库时,它也会自动获取 JSTL 支持。
下表列出了 JSF 和 JSTL 库文件名称及其 MANIFEST
条目: