实验六.docx
- 文档编号:20116506
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:29
- 大小:602.13KB
实验六.docx
《实验六.docx》由会员分享,可在线阅读,更多相关《实验六.docx(29页珍藏版)》请在冰豆网上搜索。
实验六
实验六:
JSF、会话Bean和消息驱动Bean应用
6.1实验要求:
(1)利用JSF开发一个模拟登录的例子
(2)利用无状态的会话Bean开发一个HelloWorld的例子
(3)利用有状态的会话Bean开发一个加法的例子
(4)利用消息驱动Bean开发一个PTP消息传递模型的例子
(5)利用消息驱动Bean开发一个Pub/Sub消息传递模型的例子
6.2实验目的:
(1)掌握JSF开发步骤
(2)掌握无状态会话Bean开发步骤
(3)掌握有状态会话Bean开发步骤
(4)掌握消息驱动Bean开发步骤
6.3实验步骤:
6.3.1开发JSF应用
1、新建一个webproject:
myjsf
2、添加JSF开发能力
MyEclipse会生成JSF的配置文件faces-config.xml:
添加成功后的目录结构:
3、增加一个ManagedBean(包:
cn.edu.ujn,Bean名称:
UserBean)
Scope:
request
Class:
cn.edu.ujn.UserBean
Name:
UserBean
4、给该ManagedBean增加属性
增加userName的属性,类型是java.lang.String
5、给该ManagedBean增加一个验证登陆的方法
……
publicStringlogin(){
System.out.println("JSF-login:
"+this.getUserName());
if("liukun".equals(this.getUserName()))
return"success";
else
return"failed";
}
……
6、新建login.jsp和loginsuccess.jsp
注意:
新建页面时,【Templatetouse】属性一定要选择“DefaultJSFtemplate”。
添加成功后,在faces-config.xml中会增加两个JSP页面:
7、给login.jsp和loginsuccess.jsp添加标签
login.jsp中需要添加的标签有:
1个outputLabel标签:
value=“用户姓名”
1个inputText标签:
id=“username”value=“#{UserBean.userName}”
1个commandButton标签:
id=“submit”value=“登录”action=“#{UserBean.login}”
loginsuccess.js中需要添加的标签有:
1个outputText标签:
value="#{UserBean.userName}"
8、添加导航
添加success导航
同样,添加failed导航
9、发布运行(发布到Tomcat中即可)
6.3.2开发无状态会话Bean应用
1、新建一个EJB的project:
helloejb
2、首先我们先定义一个接口:
HelloEjb.java
packagecn.ujn.ejb.slsb;
publicinterfaceHelloEjb{
publicStringhello(Stringname);
}
然后实现该接口:
HelloEjbBean.java(利用新建sessionbean的向导)
HelloEjbBean.java代码如下:
packagecn.ujn.ejb.slsb.impl;
importjavax.ejb.Remote;
importjavax.ejb.Stateless;
importcn.ujn.ejb.slsb.HelloEjb;
@Stateless
@Remote(HelloEjb.class)
publicclassHelloEjbBeanimplementsHelloEjb{
publicStringhello(Stringname){
//TODOAuto-generatedmethodstub
returnname+":
helloStatelessRemoteEJB!
";
}
}
3、打包发布到JBoss中去(copy到JBoss的\server\default\deploy目录下)
启动JBoss,把JAR包拷贝到JBoss的\server\default\deploy目录下,JBoss控制台会显示如下信息:
4、写一个client来测试该SessionEJB
首先要把JBoss中的类库加入到工程的classpath中来,我们见一个UserLibrary:
选择Add Library,选择UserLibrary
选择new,添加一个JBoss的userLibrary:
给JBoss的UserLibrary添加jar包(JBoss的client目录下所有jar包):
选择增加JBoss的UserLibrary:
增加测试类:
TestSLSBClient.java,代码如下:
packagetest;
importjava.util.Properties;
importjavax.naming.InitialContext;
importjavax.naming.NamingException;
importcn.ujn.ejb.slsb.HelloEjb;
publicclassTestSLSBClient{
publicstaticvoidmain(String[]args){
Propertiesprops=newProperties();props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url","localhost:
1099");
InitialContextctx;
try{
ctx=newInitialContext(props);
HelloEjbhelloejb=(HelloEjb)ctx.lookup("HelloEjbBean/remote");
System.out.println(helloejb.hello("刘鹍"));
}catch(NamingExceptione){
System.out.println(e.getMessage());
}
}
}
5、运行,查看结果。
6.3.3开发有状态会话Bean应用
1、新建接口Add.java
packagecn.edu.ujn.ejb.test;
importjava.io.Serializable;
publicinterfaceAddextendsSerializable{
publicintdoAdd(inti,intj);
publicintgetTotal();
}
2、新建实现类AddBean.java
packagecn.ujn.ejb.sfsb.impl;
importjavax.ejb.Remote;
importjavax.ejb.Stateful;
importcn.ujn.ejb.sfsb.Add;
importcn.ujn.ejb.sfsb.HelloSFSBEjb;
@Stateful
@Remote(Add.class)
publicclassAddBeanimplementsAdd{
privateinttotal=0;
privateintaddresult=0;
publicintdoAdd(inti,intj){
addresult=i+j;
returnaddresult;
}
publicintgetTotal(){
total=total+addresult;
returntotal;
}
}
3、打包,部署
4、新建测试类TestStateful.java
…
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
Propertiesprops=newProperties();
props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url","localhost:
1099");
props.setProperty("java.naming.factory.url.pkgs","org.jboss.naming");
InitialContextctx;
try{
ctx=newInitialContext(props);
Addaddejb=(Add)ctx.lookup("AddBean/remote");
System.out.println("addresult:
"+addejb.doAdd(1,2));
System.out.println("total:
"+addejb.getTotal());
System.out.println("------------------------");
Addaddejb1=(Add)ctx.lookup("AddBean/remote");
System.out.println("addresult:
"+addejb1.doAdd(3,4));
System.out.println("total:
"+addejb1.getTotal());
}catch(NamingExceptione){
System.out.println(e.getMessage());
}
}
…
5、运行,看结果。
6.3.4Queue消息的发送与接收
1、新建一个MDB类:
HelloMDB,实现MessageListener接口,类型选择Queue(Point-to-Point)
……
@MessageDriven(activationConfig={
@ActivationConfigProperty(propertyName="acknowledgeMode",propertyValue="Auto-acknowledge"),
@ActivationConfigProperty(propertyName="destinationType",propertyValue="javax.jms.Queue"),
@ActivationConfigProperty(propertyName="destination",propertyValue="queue/myQueue")})
publicclassHelloMDBimplementsMessageListener{
publicvoidonMessage(Messagemsg){
try{
if(msginstanceofTextMessage){
TextMessagetmsg=(TextMessage)msg;
Stringcontent=tmsg.getText();
System.out.println(content);
}
}catch(Exceptione){
e.printStackTrace();
}
}
}
……
2、在project的META-INF下,新建test-service.xml:
xmlversion="1.0"encoding="UTF-8"?
>
name="jboss.mq.destination: service=Queue,name=myQueue"> service=DestinationManager 3、打包,部署到JBoss中 4、编写测试类TestMDB.java …… publicstaticvoidmain(String[]args){ QueueConnectionconn=null; QueueSessionsession=null; Propertiesprops=newProperties(); props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory"); props.setProperty("java.naming.provider.url","localhost: 1099"); props.setProperty("java.naming.factory.url.pkgs","org.jboss.naming: org.jnp.interfaces"); try{ InitialContextctx=newInitialContext(props); QueueConnectionFactoryfactory=(QueueConnectionFactory)ctx.lookup("ConnectionFactory"); conn=factory.createQueueConnection(); session=conn.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE); Destinationdestination=(Queue)ctx.lookup("queue/myQueue"); MessageProducerproducer=session.createProducer(destination); TextMessagemsg=session.createTextMessage("这是我的第一个MessageDrivenBean! "); producer.send(msg); }catch(Exceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }finally{ try{ session.close(); conn.close(); }catch(JMSExceptione){ e.printStackTrace(); } } } …… 5、运行,查看结果。 6.3.5Topic消息的发送与接收 1、下面我们来看一个topic的例子: 新建一个HelloMDBTopicBean.java,类型选择Topic 代码如下: …… @MessageDriven(mappedName="jms/HelloMDBTopicBean",activationConfig={ @ActivationConfigProperty(propertyName="acknowledgeMode",propertyValue="Auto-acknowledge"), @ActivationConfigProperty(propertyName="destinationType",propertyValue="javax.jms.Topic"), @ActivationConfigProperty(propertyName="subscriptionDurability",propertyValue="Durable"), @ActivationConfigProperty(propertyName="clientId",propertyValue="HelloMDBTopicBean"), @ActivationConfigProperty(propertyName="subscriptionName",propertyValue="HelloMDBTopicBean"), @ActivationConfigProperty(propertyName="destination",propertyValue="topic/myTopic")}) publicclassHelloMDBTopicBeanimplementsMessageListener{ publicvoidonMessage(Messagemessage){ try{ TextMessagetopicmsg=(TextMessage)message; Stringcontent=topicmsg.getText(); System.out.println(this.getClass().getName()+": "+content); }catch(Exceptione){ e.printStackTrace(); } } } 2、在META-INF的test-service.xml中配置该消息到达的目标地址 …… name="jboss.mq.destination: service=Topic,name=myTopic"> jboss.mq: service=DestinationManager …… 3、打包,部署。 4、编写测试类: TestMDBTopic.java publicstaticvoidmain(String[]args){ TopicConnectionconn=null; TopicSessionsession=null; try{ InitialContextctx=newInitialContext(); TopicConnectionFactoryfactory=(TopicConnectionFactory)ctx.lookup("TopicConnectionFactory"); conn=factory.createTopicConnection(); session=conn.createTopicSession(false,TopicSession.AUTO_ACKNOWLEDGE); Destinationdestination=(Topic)ctx.lookup("topic/myTopic"); MessageProducerproducer=session.createProducer(destination); TextMessagemsg=session.createTextMessage("你好TopicMDB! "); producer.send(msg); }catch(Exceptione){System.out.println(e.getMessage()); }finally{ try{ session.close(); conn.close(); }catch(JMSExceptione){ e.printStackTrace(); } } } 5、运行,看结果。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验