欢迎光临
我们一直在努力

J2EE应用部署(二):-JSP教程,J2EE/EJB/服务器

建站超值云服务器,限时71元/月

一、配置j2ee包

1.1 企业应用的开发过程

1.2 j2ee应用包的结构

1.3 ear部署描述器

二、一个简单的实例

2.1 组件

2.2 装配应用

2.3 部署和运行应用

三、可选的应用部署描述器标记

===================================

正文:

===================================

一、配置j2ee包

在上一篇文章中,我们了解了j2ee应用封装和部署的一些基本知识,包括类装载器的不同角色和行为。接下来就可以配置和部署企业应用。为此,我们必须了解创建ear文件的过程,以及应用部署描述器的内容。

1.1 企业应用的开发过程

构造一个企业应用的过程可以归纳为:

构造各个组件,包括ejb、jsp页面、servlet和资源适配器等。

把这些组件打包成jar文件格式的j2ee模块,同时提供j2ee模块部署描述器。j2ee模块是一种具有相同类型的一个或者多个j2ee组件的集合,也就是说,一个ejb模块可以包含一个以上的ejb,一个web应用模块可以包含多个jsp页面和servlet,一个资源适配器包可以包含多个资源适配器。

结合一个或者多个j2ee模块创建ear文件,同时提供企业应用部署描述器,构造出j2ee应用。最简单的j2ee应用只包含一个j2ee模块,稍微复杂一点的j2ee应用可以由多个j2ee模块构成,更复杂的j2ee应用可以包含多个j2ee模块、模块里面包含的类所用到的依赖库。j2ee应用还可以包含描述部署过程的帮助文件和其他文档。

把j2ee应用部署到j2ee平台上。安装j2ee应用,然后把它与应用服务器提供的基础设施整合。在j2ee应用部署过程中,每一个j2ee模块按照该类模块的部署要求分别部署,每一个组件被部署到适合该组件类型的合适容器。例如,假设有一个my.ear文件,它包含my.jar和my.war。部署应用时,应用服务器的部署工具将把my.ear文件拷贝到应用服务器;接着,应用服务器的部署机制将提取出my.jar和my.war模块,按照当前平台的类装载要求分别部署这两个模块。如果这两个模块都部署成功,则整个j2ee应用部署成功。

j2ee企业应用开发和部署过程可以图示如下:

组件被封装成j2ee模块时带有一个部署描述器,j2ee模块可以通过部署工具创建。部署工具还可以用来部署和“反部署”独立的j2ee模块,用来把一个或者多个j2ee模块和另外的部署描述器封装成j2ee应用,用来把额外的内容加入j2ee应用或从j2ee应用删除某些内容,或者把整个应用部署到应用服务器上。

1.2 j2ee应用包的结构

j2ee企业应用包的结构很简单,它由一个或多个j2ee模块以及一个meta-inf\目录下名为application.xml的部署描述器构成。文件用jar格式打包,存储在扩展名为.ear的文件中。ear文件可以包含依赖库,但这是可选的。ear文件的一般结构是:

ejb .jar文件 web应用.war文件 资源适配器.rar文件 应用客户端.jar文件 依赖库.jar文件 meta-inf\ application.xml

下面是一个ear文件的例子,它包含一个ejb模块、一个web应用模块,不包含依赖库:

myfirstejb.jar myfirstweb.war meta-inf\ application.xml

保存在ear文件中的j2ee模块不一定要在根目录之下。例如,假设一个ear文件包含一个ejb模块、一个资源适配器包,它的结构可以如下:

ejbs\ mysecondejb.jar resources\ mylegacyadapter.rar meta-inf\ application.xml

最后,下面是一个包含许多组件和依赖库的ear文件:

ejbs\ mythirdejb.jar myfourthejb.jar resources\ mylegacyadapter.rar web\ mywebapp1.war mywebapp2.war lib\ myxmlx.jar mycommon.jar meta-inf\ application.xml

ear文件可以用部署工具创建,或者也可以改用jdk提供的jar工具创建。创建步骤为:

创建一个用来容纳ear文件内容的临时目录。

把所有j2ee模块放入临时目录,创建meta-inf\目录。

在meta-inf\目录下创建application.xml部署描述器。

完成上述步骤之后,进入临时目录,运行jar工具创建ear文件。

下面是一个运行jar工具的例子,它对前面例子进行打包:

jar cvf myapplication.ear ejbs resources web lib meta-inf

创建好ear文件之后,我们就可以把j2ee应用部署到应用服务器上。

1.3 ear部署描述器

理想情况下,我们用图形界面的工具编写application.xml文件。然而,有时我们必须手工构造或维护application.xml文件,因此理解application.xml文件用到的标记很重要。

application.xml部署描述器并不复杂,不需要很多标记就可以构造出一个合法的描述器。部署描述器的dtd定义的标记包括:

所有合法的j2ee应用描述器必须包含如下doctype声明:

<!doctype application public "-//sun microsystems, inc.//dtd j2ee application

1.3//en" "http://java.sun.com/dtd/application_1_3.dtd">

配置一个简单的application.xml部署描述器只需如下几步:

用标记声明一个企业应用。标记可以包含、和标记,供部署工具提供有关应用的描述信息使用。这些标记的内容和ejb、web应用、资源适配器部署描述器内的同一标记的内容相同。

企业应用内的每一个模块必须有一个相应的标记描述模块。ejb用标记描述,web应用用标记描述,资源适配器用标记描述,应用客户端程序用标记描述。除了标记之外,其他标记的内容都是指定ear文件内包含j2ee模块的文件的相对uri,该uri必须相对于ear文件的根。

如果企业应用包含一个web应用j2ee模块,则必须提供一个标记和一个标记。标记是一个相对uri,指定ear文件内包含j2ee模块的文件。这个uri和、、标记的uri同属一类。标记指定web应用将在其下运行的上下文的名字。所有针对该web应用内jsp页面和servlet的请求都必须加上该上下文名字作为前缀。例如,如果部署web应用时指定了:

<context-root>web1</context-root>

则所有对jsp页面和servlet的请求必须是如下形式:

http://主机:端口/web1/……

在ear文件内封装的每一个web应用都要有一个唯一的值,任何两个web应用不能有相同的值。如果ear文件只包含一个web应用,的值可以是空字符串。

二、一个简单的实例

在大多数使用ear文件的情形中,企业应用包含一个ejb模块、一个web应用模块,web应用要用到ejb模块里面的ejb组件。下面的例子就属于这种情况,ejb和web应用不需要任何依赖库。下面我们来看看构造这个例子的具体过程。

2.1 组件

在这个例子中,一个servlet在无状态会话ejb的远程接口上调用invoke()方法,servlet和ejb输出一些文字信息表明程序已经成功执行。如果控制台出现异常报告,它很可能意味着组件封装存在问题。本例的所有ejb源文件都属于test包,servlet属于未命名的包。本例用到的java文件包括:

myenterpriseservlet.java:servlet的实现类,执行对ejb的调用

myenterprise.java:ejb的远程接口。

myenterprisehome.java:ejb的home接口。

myenterprisebean.java::ejb的实现类。

myenterprisebean.java的实现代码是:

quote:

——————————————————————————–

package test;

import javax.ejb.*;

public class myenterprisebean implements sessionbean {

private initialcontext ctx;

public void ejbcreate() {}

public void ejbremove() {}

public void ejbactivate() {}

public void ejbpassivate() {}

public void setsessioncontext(sessioncontext c) {}

public void invoke() {

system.out.println("正在执行ejb.");

}

}

myenterpriseservlet.java servlet的实现代码是:

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

import javax.naming.*;

public class myenterpriseservlet extends httpservlet {

public void service(httpservletrequest req, httpservletresponse res)

throws ioexception{

res.setcontenttype("text/html;charset=gb2312");

printwriter out = res.getwriter();

try {

system.out.println("正在服务器上运行servlet");

initialcontext ctx = new initialcontext();

test.myenterprisehome ehome = (test.myenterprisehome)

ctx.lookup("myenterpriseejb");

test.myenterprise e = ehome.create();

e.invoke();

} catch(exception e) {

out.println("异常: " + e);

system.out.println("异常: " + e);

}

out.println("<html><head><title>测试</title></head>");

out.println("<body>");

out.println("<h1>检查控制台确信ejb已经被调用</h1>");

out.println("</body></html>");

}

}

——————————————————————————–

编写好ejb和相关的部署描述器(此处不列出)之后,接下来要把ejb封装成myenterprisebean.jar文件。在jndi名称空间配置中,ejb绑定到myenterpriseejb。编写好servlet代码和相关的部署描述器(此处也不列出)之后,servlet应该封装成mywebapp.war文件。

2.2 装配应用

构造好各个组件之后,接下来应该编写企业应用部署描述器。我们必须把ejb和web应用注册为企业应用的模块,还要让web应用的组件在/web/上下文之下执行。这样,本例的application.xml文件应该为:

quote:

——————————————————————————–

<?xml version="1.0" encoding="utf-8"?>

<!doctype application public -//sun microsystems, inc.//dtd j2ee application

1.3//en http://java.sun.com/dtd/application_1_3.dtd>

<application>

<display-name>enterprise application</display-name>

<module>

<ejb>myenterprisebean.jar

</module>

<module>

<web>

<web-uri>mywebapp.war</web-uri>

<context-root>web</context-root>

</web>

</module>

</application>

——————————————————————————–

编写好application.xml部署描述器之后,企业应用的目录将包括:

myenterprisebean.jar mywebapp.war meta-inf\ application.xml

用jar工具创建名为myenterprise.ear的ear文件,控制台命令如下:

jar cvf myenterprise.ear myenterprisebean.jar mywebapp.war meta-inf

值得一提的是,如果使用j2ee参考实现(reference implementation)提供的deploytool,我们不必手工编写ejb-jar.xml、web.xml和application.xml部署描述器,这些文件由deploytool自动生成。在本例的企业应用中,application.xml就是自动生成的。

2.3 部署和运行应用

构造好ear文件之后,接下来该部署它了。记住,具体的部署操作和平台有关,不同的供应商提供了不同的部署工具。例如,j2ee的deploytool能够把企业应用部署到j2ee参考实现上。

成功地部署好企业应用之后,接下来就可以调用servlet了。由于该企业应用上下文的根是/web,servlet作为它的一部分调用。为此,我们在浏览器中输入的地址应该是如下形式:

http://主机:端口/web/myenterpriseservlet/

三、可选的应用部署描述器标记

在某些情形下,有两个可选的部署描述器标记可供使用,它们是和标记。

是的子标记,它的值是一个为模块提供的从ear文件的根开始的uri,指向另一个部署描述器文件。这个文件的命名不必和它在j2ee模块里面时一样。例如,所有ejb模块的部署描述器必须命名为ejb-jar.xml,但如果标记的值指向一个ejb模块的可选部署描述器,文件就可以取ejb-jar.xml以外的名字。

标记中指定的部署描述器文件将覆盖j2ee模块里面包含的描述器,。标记可以用来引用部署描述器的外部版本,当部署者想要使用的部署描述器与包含在ejb、web应用、资源适配器或者应用客户端模块内的描述器不同时,就可以使用这个标记。如果不指定标记的值,部署工具将使用ear文件里面jar、war或rar文件中提供的值。例如,要为web应用指定一个外部的可选部署描述器,假设该描述器在ear文件的根下面,我们指定:

quote:

——————————————————————————–

<module>

<web>

<web-uri>web.war</web-uri>

<context-root>web</context-root>

</web>

<alt-dd>external-web.xml</alt-dd>

</module>

——————————————————————————–

标记用来指定应用级的安全角色,这个安全角色将用于ear文件包含的所有j2ee模块。如果ear文件包含多个ejb模块或多个web应用模块,这些模块都可以有自己的安全角色定义。部署者的责任之一是确保所有j2ee模块中包含的所有安全角色都有一个唯一的名字,而且对于应用整体来说具有实际意义。安全角色可以从j2ee模块级“拉出”到企业应用级,加入到标记。也就是说,如果某个j2ee模块中存在一个重复的安全角色值,该值可以删除,只需在企业应用级提供即可。

标记需要一个子标记指定安全角色的名称。下面是一个配置标记的例子:

quote:

——————————————————————————–

<security-role>

<description>

security role of administrator

</description>

<role-name>administrator</role-name>

</security-role>

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » J2EE应用部署(二):-JSP教程,J2EE/EJB/服务器
分享到: 更多 (0)