薄薄的Java
技术本来很广,但我们可以把它变薄!
posts - 0,  comments - 2,  trackbacks - 0

例子使用的工具:MyEclipse6.6,Jboss5.1, Tomcat6.18.
 实现功能描述:通过Struts2调用EJB3.0的远程方法,完成简单的登陆功能,只是简单的字符串比对,未使用持久层。

首先创键EJB project,我的项目名称为:S2Login。然后定义Session Bean   LoginServiceBean实现远程接口LoginServiceBeanRemote,代码如下:

远程接口:

 1 package com.elric.s2login.ejb.sessionbeans;
 2 
 3 import javax.ejb.Remote;
 4 
 5 @Remote
 6 public interface LoginServiceBeanRemote
 7 {
 8   public boolean login(String name,String pwd);
 9 }
10 

实现接口类:
 1 package com.elric.s2login.ejb.sessionbeans;
 2 
 3 import javax.ejb.Remote;
 4 import javax.ejb.Stateless;
 5 
 6 @Stateless
 7 @Remote
 8 public class LoginServiceBean implements LoginServiceBeanRemote
 9 {
10 
11     public boolean login(String name, String pwd)
12     {
13         if (name.equalsIgnoreCase("zhangsan"&& pwd.equalsIgnoreCase("123"))
14             return true;
15         else
16             return false;
17     }
18 
19 }
20 

然后部署到JBoss服务器上,启动服务器,登入查看JNDI信息,记录下来:





接下来,编写客户端部分了。我们使用Struts2来完成登录页面和业务调用,Web.xml、struts.xml、index.jsp、LoginAction的开发配置如下:

web.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 5     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 6     <welcome-file-list>
 7         <welcome-file>index.jsp</welcome-file>
 8     </welcome-file-list>
 9     <!-- 定义Struts 2的FilterDispatcher的Filter -->
10 
11     <filter>
12         <!-- 定义核心Filter的名字 -->
13         <filter-name>struts2</filter-name>
14         <!-- 定义核心Filter的实现类 -->
15         <filter-class>
16             org.apache.struts2.dispatcher.FilterDispatcher
17         </filter-class>
18     </filter>
19 
20     <!-- FilterDispatcher用来初始化Struts 2并且处理所有的Web请求 -->
21     <filter-mapping>
22         <filter-name>struts2</filter-name>
23         <url-pattern>/*</url-pattern>
24     </filter-mapping>
25 
26 </web-app>
27 


struts.xml

 1 <?xml version="1.0" encoding="GBK"?>
 2 
 3 <!-- 指定Struts 2配置文件的DTD信息 -->
 4 
 5 <!DOCTYPE struts PUBLIC
 6 
 7         "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
 8 
 9         "http://struts.apache.org/dtds/struts-2.0.dtd">
10 
11 <!-- struts是Struts 2配置文件的根元素 -->
12 
13 <struts>
14 
15     <!-- Struts 2的Action必须放在指定的包空间下定义 -->
16 
17     <package name="struts2" extends="struts-default">
18 
19         <!-- 定义login的Action,该Action的实现类为lee.Action类 -->
20 
21         <action name="Login" class="com.elric.s2login.actions.LoginAction">
22 
23             <!-- 定义处理结果和资源之间映射关系。 -->
24 
25             <result name="error">/error.jsp</result>
26 
27             <result name="success">/welcome.jsp</result>
28 
29         </action>
30 
31     </package>
32 
33 </struts>
34 
35 
36 

index.jsp
 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
 2 <%@ taglib  uri="/struts-tags" prefix="s"%>
 3 <%
 4 String path = request.getContextPath();
 5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 6 %>
 7 
 8 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 9 <html>
10   <head>
11     <base href="<%=basePath%>">
12     
13     <title>My JSP 'index.jsp' starting page</title>
14     <meta http-equiv="pragma" content="no-cache">
15     <meta http-equiv="cache-control" content="no-cache">
16     <meta http-equiv="expires" content="0">    
17     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
18     <meta http-equiv="description" content="This is my page">
19     <!--
20     <link rel="stylesheet" type="text/css" href="styles.css">
21     -->
22   </head>
23   
24   <body>
25     Struts2结合EJB3.0完成登录操作:
26     <s:form action="Login" method="post">
27     <s:textfield name="username" label="用户名"></s:textfield>
28     <s:password name="password" label="密  码"></s:password>
29     <s:submit value="提交"></s:submit>
30     </s:form>
31   </body>
32 </html>
33 

LoginAction
 1 package com.elric.s2login.actions;
 2 
 3 import com.elric.s2login.biz.BizLogin;
 4 import com.opensymphony.xwork2.ActionSupport;
 5 
 6 public class LoginAction extends ActionSupport
 7 {
 8     /**
 9      * 
10      */
11     private static final long serialVersionUID = 1L;
12     private String username;
13     private String password;
14 
15 
16     public String getUsername()
17     {
18         return username;
19     }
20 
21     public void setUsername(String username)
22     {
23         this.username = username;
24     }
25 
26     public String getPassword()
27     {
28         return password;
29     }
30 
31     public void setPassword(String password)
32     {
33         this.password = password;
34     }
35 
36     // 具体业务实现方法
37     public String execute()
38     {
39 
40         String name = this.getUsername();
41         String pwd = this.getPassword();
42         
43 
44         Boolean b;
45         try
46         {
47             b = new BizLogin().isLogin(name, pwd);
48 
49         } catch (Exception e)
50         {
51             e.printStackTrace();
52             return ERROR;
53         }
54 
55         if (b)
56             return SUCCESS;
57         else
58             return ERROR;
59     }
60 
61     
62 }
63 

这里,我定义了一个BizLogin来完成EJB的远程调用。
Ps:这里发现一个问题,使用Properties文件来配置JNDI会报一个命名空间异常,无法远程调用Jboss上的登陆方法。所以,我在这里只有老老实实的写段Properties代码。

 1 package com.elric.s2login.biz;
 2 
 3 import java.util.Properties;
 4 
 5 import javax.naming.InitialContext;
 6 
 7 import com.elric.s2login.ejb.sessionbeans.LoginServiceBeanRemote;
 8 
 9 public class BizLogin
10 {
11     public boolean isLogin(String name, String pwd)
12             throws Exception
13     {
14         Properties props = new Properties();
15         props.setProperty("java.naming.factory.initial""org.jnp.interfaces.NamingContextFactory");
16         props.setProperty("java.naming.factory.url.pkgs""org.jboss.naming");
17         props.setProperty("java.naming.provider.url""localhost:1099");
18         
19         InitialContext ctx = new InitialContext(props);
20         LoginServiceBeanRemote s = (LoginServiceBeanRemote) ctx
21                 .lookup("LoginServiceBean/remote");
22         System.out.println("是否成功调用远程方法:  "+s.login(name, pwd));
23         return s.login(name, pwd);
24     }
25 }
26 

Lookup方法中使用我们在JBoss中记录下来的命名空间。
这里注意一点,ctx.Lookup(“LoginServiceBean/remote”)方法返回的类型我们强转为LoginServiceBean的接口,也就是其代理类。否则会报个代理错误的异常!

最后,也是最重要的一点,我们还要将Jboss里面client文件夹下的所有jar包都复制进lib下面!这里试过很多办法想去掉些jar,但项目总不能运行,所以全部使用。(光引入Jbossall-client是无效的,它只是个引用其他30多个Jar的只记录了地址信息的Jar包,也试过把它上面引用的Jar统统拷进lib中,但项目依然报错!)

Ok,开发就此完成,部署后成功运行!


posted on 2009-08-04 08:50 Rique 阅读(1939) 评论(2)  编辑  收藏 所属分类: MVC领域Webservices和EJB

FeedBack:
# re: Struts2整合EJB3.0简单实例
# re: Struts2整合EJB3.0简单实例
2012-09-21 17:02 | sss
写的太简单了,能不能写一个更复杂的,最好可以让ejb发挥到他应该发挥的作用  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 

<2012年9月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

留言簿

文章分类

文章档案

收藏夹

搜索

  •  

最新评论