去看PetStore的例子。最好的教材,里面包含了各种设计模式。及优良的架构。

解决方案 »

  1.   

    我都想要一份学习学习:
    [email protected]
      

  2.   

    [email protected]
    谢谢,给我一份!
      

  3.   

    [email protected]
    thank you..
      

  4.   

    能否给我一份啊
    [email protected]
    谢谢了
      

  5.   

    我也想要一份。
    [email protected]
      

  6.   

    怎么成了留email的了,有人能够提供地址也好啊,100分全部奉上
      

  7.   


    一.Enterprise Beans
    在EJB(Enterprise Java Beans)中定义了两种不同类别的Enterprise Bean :
            *会话 Bean (Session Bean)
            *实体Bean (Entity Bean)
    1. 会话 Bean (Session Bean)
    会话 Bean 是调用它的客户端代码要完成的工作。当客户端与服务器建立联系,那么一个会话 Bean 就建立起来了。根据会话 Bean 的状态不同有分为:
    状态会话 Bean (Stateful Session Bean)
    无状态会话 Bean (Stateless Session Bean)
    1.1 状态会话 Bean (Stateful Session Bean)
       当客户机和服务器建立连接之后,状态会话 Bean (Stateful Session Bean) 将一直在客户机和服务器之间保持着用户的某个状态。例如:用户使用银行的ATM时,经过验证之后,用户可以连续执行多次操作,在这个过程当中,用户的合法状态将一直被保留,直到她将信用卡取出,结束这次操作。这时,状态会话 Bean (Stateful Session Bean) 也就被销毁。
    1.2无状态会话 Bean (Stateless Session Bean)
       当客户机和服务器建立连接之后,无状态会话 Bean (Stateless Session Bean)处理单一的用户请求或商务过程。无状态会话 Bean (Stateless Session Bean)不需要从以前的请求中提取任何状态。例如,用户的用户密码确认。用户输入密码后,发送请求。组件返回真或假来确认用户,一旦过程完成,无状态会话 Bean (Stateless Session Bean) 也宣告结束。
    2. 实体Bean (Entity Bean)
        实体Bean (Entity Bean)只是数据模型,它不包括商务逻辑。实体Bean (Entity Bean)可以将关系/对象数据库的数据映射到内存中供其它组件使用。实体Bean (Entity Bean)是一直存在的,而且具有很高的容错性能。实体Bean (Entity Bean)能供允许多用户同时访问。
    二. 会话 Bean (Session Bean)
    Ejb的执行过程是被放在一个EJB容器中进行的,所以客户端不会直接调用我们写好的Enterprise Bean ,而是调用EJB容器生成的一个EJBObject (EJB对象)来实现。那么,我们在编写服务器端的Enterprise Bean 时,就要考虑这点。既然客户端不能直接访问,就由EJBObject来代劳,所以在编写服务器端时,就要编写服务器端的一个接口(Remote)用来与客户机联系,实力化EJBObject。要生成EJBObject 就要调有Home 接口,来建立这个实力。
                                       图一
    以下是会话 Bean 的代码分析:
    A.Enterprise Bean 类:sailorsy.class
    1.setSessionContext(SessionContext ctx)方法
    它是EJB容器和Enterprise Bean互相作用的关口。
    import java.rmi.*;
    import javax.ejb.*;
    public class sailorsy implements SessionBean{
    private SessionContext ctx=null;
    public voic setSessionContext(SessionContext ctx){
    this.ctx=ctx;
    }//setSessionContext
    }//class sailorsy
    2.ejbCreate(…)方法
       它可以初始化Enterprise Bean ,可以定义不同的ejbCreate(…)方法,每个方法所带的参数不同。但是,必许要存在至少一种。
      import java.rmi.*;
      import javax.ejb.*;
    public class sailorsy implements SessionBean{
    private SessionContext ctx=null;
    public voic setSessionContext(SessionContext ctx){
    this.ctx=ctx;
    }//setSessionContext
            public void ejbCreate() {
            }//ejbCreate
    }//class sailorsy
    3.ejbPassivate()方法
     如果初始化的Enterprise Bean 过多,EJB容器将其中的一些挂起(passivate),释放他们所占用的空间。
      import java.rmi.*;
      import javax.ejb.*;
    public class sailorsy implements SessionBean{
    private SessionContext ctx=null;public voic setSessionContext(SessionContext ctx){
    this.ctx=ctx;
    }//setSessionContext        public void ejbCreate() {
            }//ejbCreate
            public void ejbPassivate() {
            }//ejbPassivate}//class sailorsy
    4.ejbActivate()方法
    和ejbPassivate正好相反,它将被挂起的Bean从新调回。
    import java.rmi.*;
      import javax.ejb.*;
    public class sailorsy implements SessionBean{
    private SessionContext ctx=null;public voic setSessionContext(SessionContext ctx){
    this.ctx=ctx;
    }//setSessionContext        public void ejbCreate() {
            }//ejbCreate
            public void ejbPassivate() {
            }//ejbPassivate
            
            public void ejbActivate() {
            }//ejbActivate}//class sailorsy
    5.ejbRemove()方法
    它可以清除EJB容器中的Bean。
      import java.rmi.*;
      import javax.ejb.*;
    public class sailorsy implements SessionBean{
    private SessionContext ctx=null;public voic setSessionContext(SessionContext ctx){
    this.ctx=ctx;
    }//setSessionContext        public void ejbCreate() {
            }//ejbCreate        public void ejbPassivate() {
            }//ejbPassivate
            
            public void ejbActivate() {
            }//ejbActivate        public void ejbRemove() {
            }//ejbRemove
           
             public String showname(){
              return "Hello,my name is sailorsy";
            }//自己的商务方法
    }//class sailorsy
    以上这些是EJB必需的回调方法,我们可以在里面加入自己的方法,加入自己的商务逻辑。
    B.Home 接口: sailorsyHome
       import java.rmi.*;
    import javax.ejb.*;public interface sailorsyHome extends EJBHome {
      public sailorsyRemote create() throws RemoteException, CreateException;
    }
    Remote接口:sailorsyRemote
    import java.rmi.*;
    import javax.ejb.*;public interface sailorsyRemote extends EJBObject {
      public java.lang.String showname() throws RemoteException;
    }
    三.调用会话 Bean:sailorsyTestClient1 
            import javax.naming.*;
    import javax.ejb.*;
    import javax.rmi.PortableRemoteObject;
    import java.rmi.*;public class sailorsyTestClient1 {
      private sailorsyHome sailorsyHomeObject = null;  //Construct the EJB test client
      public sailorsyTestClient1() {
        try {
          //以下是客户端使用JNDI定位Home对象。
          Context ctx = new InitialContext();      //look up jndi name
          Object ref = ctx.lookup("sailorsy");      //cast to Home interface
          sailorsyHomeObject = (sailorsyHome) PortableRemoteObject.narrow(ref, sailorsyHome.class);    }
        catch(Exception e) {
          e.printStackTrace();
        }
      }  //----------------------------------------------------------------------------
      // Utility Methods
      //----------------------------------------------------------------------------  public sailorsyHome getHome() {
        return sailorsyHomeObject;
      }
      //Main method  public static void main(String[] args) throws Exception{
        sailorsyTestClient1 client = new sailorsyTestClient1();
        sailorsyRemote sr=client.getHome() .create() ;
        String s=sr.showname() ;
        System.out.print(s);
        // Use the getHome() method of the client object to call Home interface
        // methods that will return a Remote interface reference.  Then
        // use that Remote interface reference to access the EJB.
      }
    }
    以上的EJB在win2000+jbuilder5/jbuilder6+BAS4.5经过测试。                                          图二
    以下是整个EJB的执行过程:
    客户端通过JNDI检索Home对象的引用;
    JNDI返回Home对象的引用;
    请求创建一个新的EJB对象;
    创建EJB对象;
    返回EJB对象;
    调用商务方法;
    调用Enterprise Bean.
      

  8.   

    J2EE学习笔记
                                              By huihoo.com顾志凌([email protected])注:框架可以用Word菜单中的 “视图/文档结构图” 看到                                         
    J2EE模式
    Value Object(值对象)  用于把数据从某个对象/层传递到其他对象/层的任意Java对象。
    通常不包含任何业务方法。
    也许设计有公共属性,或者提供可以获取属性值的get方法。
    JSP
    1.JSP的基础知识    
                    
                   __  
            _____ |   directive  (指令)
                |     |-- scripting (脚本)
     JSP -------|     |__ action  (动作)
    |
    |_____Template data :除JSP语法外,JSP引擎不能解读的东西
        
    1)在JSP中使用的directive(指令)主要有三个:
    a) page指令
    b) include指令
    c) taglib指令在JSP的任何地方,以任何顺序,一个页面可以包含任意数量的page指令    2)Scripting(脚本)包括三种类型
    a) <%!declaraction  %>
    b) <%  scriptlet     %>
    c) <%= expression   %>3)action(动作)
      标准的动作类型有:
            a)  <jsp:useBean>
    b)  <jsp:setProperty>
    d) <jsp:getProperty>
    e) <jsp:param>
    f) <jsp:include>
    g) <jsp:forward>
    h) <jsp:plugin>1. 注释: <% -----jsp comment-------%>
           <! -----html comment-------%>2. <%@ page session = “true”  import =”java.util.*” %>
    session可以不赋值,默认为true,如果session=”false”,则在JSP页面中,隐含的变量session就不能使用。3. 请求控制器结构(Request Controller)
    也被称之为JSP Model 2 Architecture
    这种途径涉及到使用一个Servlet或一个JSP作为一个应用程序或一组页面的入口点。为创建可维护的JSP系统,Request Controller是最有用的方式之一。不是JSP,而是Java类才是放置控制逻辑的正确的地方。请求控制器的命名模式为: xxxController.jsp
    请求控制器类的命名模式为: xxxRequestController2.JSP中的JavaBean
    JSP三种bean的类型
    1) 页面bean
    2) 会话bean
    3) 应用bean大多数的系统会使用一个会话bean来保持状态,而对每一个页面使用一个页面bean 来对复杂的数据进行表示。页面bean是一个模型,而JSP是一个视图。3.Custom tagbean是信息的携带者,
    而tag更适用于处理信息。标记库包含一个标记库描述符(TLD)和用于实现Custom tag的Java类
    在翻译阶段,JSP容器将使用TLD来验证页面中的所有的tag是否都被正确的使用。
       标记处理程序只是一个简单的适配器,而真正的逻辑是在另一个类中实现的,标记处理程序只是提供了一个供其他的可复用的类的JSP接口
          
    Servlet
    1.ServletConfig
    &#61548; 一个ServletConfig对象是servlet container在servlet initialization的时候传递给servlet的。ServletConfig包涵 ServletContext 和 一些 Name/Value pair (来自于deployment descriptor)&#61548; ServletContext接口封装了Web应用程序的上下文概念。2.会话跟踪
    1) Session
    &#61548; 当一个Client请求多个Servlets时,一个session可以被多个servlet共享。&#61548; 通常情况下,如果server detect到browser支持cookie,那么URL就不会重写。
    2) cookie
    &#61548; 在Java Servlet中,如果你光  Cookie cookie = new Cookie(name,value)
    那么当用户退出Browser时,cookie会被删除掉,而不会被存储在客户端的硬盘上。如果要存储 cookie,需加一句   cookie.setMaxAge(200)&#61548; cookie是跟某一个server相关的,运行在同一个server上的servlet共享一个cookie.3) URL Rewriting
    在使用URL Rewriting来维护Session ID的时候,每一次HTTP请求都需要EncodeURL()
    典型的用在两个地方
    1) out.print(“form action=\” ”);
    out.print(response.encodeURL(“sessionExample”));
    out.print(“form action=\” ”);
    out.print(“method = GET>”);
    2) out.print(“<p><a href=\” ”);
    out.print(response.encodeURL(“SessionExample?database=foo&datavalue=bar”));
    out.println(“\” >URL encoded </a>”);3.SingleThreadModel
    默认的,每一个servlet definition in a container只有一个servlet class的实例。
    只有实现了SingleThreadModel,container才会让servlet有多个实例。Servlet specification上建议,不要使用synchronized,而使用SingleThreadModel。SingleThreadModel(没有方法)
    保证servlet在同一时刻只处理一个客户的请求。
    SingleThreadModel是耗费资源的,特别是当有大量的请求发送给Servlet时,SingleThreadModel的作用是使包容器以同步时钟的方式调用service方法。
    这等同于在servlet的service()方法种使用synchronized.Single Thread Model一般使用在需要响应一个heavy request的时候,比如是一个需要和数据库打交道的连接。
    2. 在重载Servlet地init( )方法后,一定要记得调用super.init( );3. the client通过发送一个blank line表示它已经结束request
    而the server通过关闭the socket来表示response已结束了。4. 一个Http Servlet可以送三种东西给Client
    1) a single status code
    2) any number of http headers
    3) a response body5. Servlet之间信息共享的一个最简单的方法就是
    System.getProperties().put(“key”,”value”);6. Post和Get
    Post:将form内各字段名称和内容放置在html header内传送给server
    Get:  ?之后的查询字符串要使用URLEncode,经过URLEncode后,这个字符串不再带有空格,以后将在server上恢复所带有的空格。
          
    Get是Web上最经常使用的一种请求方法,每个超链接都使用这种方法。7. Web.xml就是Web Applicatin 的deployment descriptor
    作用有:组织各类元素
            设置init param
            设置安全性
     
    8. Request Dispatcher用来把接收到的request forward processing到另一个servlet
    要在一个response里包含另一个servlet的output时,也要用到Request Dispatcher.9. Servlet和Jsp在同一个JVM中,可以通过ServeltContext的
    setAttribute( )
    getAttribute( )
    removeAttribute( )
    来共享对象
    10. 利用request.getParameter( )得到的String存在字符集问题。
    可以用  strTitle = request.getParameter(“title”);
            strTitle = new String(strTitle.getBytes(“8859-1”),”gb2312”);如果你希望得到更大得兼容性
            String encoding = response.getCharacterEncoding();     
    //确定Application server用什么编码来读取输入的。
            strTitle = new String(strTitle.getBytes(encoding),”gb2312”);
    XML
    1.XML基础知识
    1. 一个xml文档可以分成两个基本部分:
    首部( header )
    内容( content )
      

  9.   

    那你打个包发到我的信箱吧,如果你还有其它的EJB资料也给我,我给你50分,还有50分给另外一个已经给我发了的朋友,在这里表示感谢