快速开发EJB和J2EE Web应用

开发 后端
本文详细讲述了如何快速开发EJB和J2EE Web应用,并提供了一系列文件列表以及源文件。

开发J2EE Web应用的准备工作:

先安装JSDK,再安装JBoss.
安装JSDK,必须获得一套对应于用户的操作系统的JDK,
我的安装的文件目录是
Windows2000: d:\s1studio_jdk\j2sdk1.4.1
Linux: /root/s1studio_jdk/j2sdk1.4.1
为了用EJB, 需要一个j2ee-1.3.jar或者j2ee-1.2.jar,
如果安装了Sun One Studio 或者 J2EE (www.sun.com )这个文件已经有.
把这个文件放在classpath路径上.
或者使用jboss-j2ee.jar, 安装JBoss后在$JBoss\client中可找到.
建议安装Sun One Studio, 用Sun One Studio编译Java源程序,
不用设置classpath, 省去不少过程.

安装JBoss:
把JBoss的压缩包解开,放在任一目录上,
我的安装的文件目录是
/dose/jboss-3.0.4_tomcat-4.1.12 (REDHAT8.0)
E:\jboss-3.0.4_tomcat-4.1.12 (WINDOWS2000)
WINDOWS2000, linux共用同一套JBoss.

配置JBoss:
启动JBoss需要执行一个脚本文件:
linux:run.sh
WINDOWS对应的是:run.bat

(1)
在JBoss\bin\run.bat (for Windows)开头插入一行
set JAVA_HOME = d:\s1studio_jdk\j2sdk1.4.1
在JBoss\bin\run.sh (for Linux)开头插入一行
JAVA_HOME="/root/s1studio_jdk/j2sdk1.4.1"

或者
(2)设置系统环境变量JAVA_HOME,指向JDK

运行JBoss, run.sh或者run.bat
当看到启动JBoss的信息时,说明启动了.
服务器简单的测试:
JBoss默认的WEB端口为8080,我们可以在打开一个浏览器输入地址
http://localhost:8080/jmx-console
当在浏览器看到JBoss的信息时,说明安装配置JBoss成功了.

建立下面的目录和文件(注意大小写).

FIRST.EAR
|
|-----META-INF (application.XML)
|
|-----First.jar
| |-----META-INF (ejb-jar.xml,jboss.xml)
| `-----Dev
| |-----First(FirstSession.java, FirstSessionHome.java, FirstSessionBean.java)
| |-----Delegate(NewDelegate.java)
| `-----Dao(MySQLDao.java)
|
`-----First.war(index.JSP)
|
`-----WEB-INF (jboss-web.xml, web.xml)
|-----classes
`-----lib

编译JAVA源程序,生成class文件.
进入JAVA源程序目录, 运行:
javac -classpath %classpath%;%jboss%\server\default\deploy\First.ear\First.jar *.java
或者
javac -classpath %jboss%\server\default\deploy\First.ear\First.jar;%jboss%\client\jboss-j2ee.jar *.java

Copy 目录First.ear to jboss\server\default\deploy.
打开浏览器输入地址 http://localhost:8080/First

到此, 在浏览器看到: Hello! This My Session Bean From Jboss.
说明这个EJB工作了.

如果按按钮, 没反应或出错. 原因没安装配置数据库, 下面安装配置Postgres数据库

For Windows2000
下载 PgSQL731wina1.exe (http://www.postgresql.org ),
Finally you will see the next line, you need enter the password for Administrator
最后你将看下一个行,你必须为用户Administrator输入password.
********************
Enter password of user `.\Administrator´:123456
********************

记下此password, 我的口令是123456.

从开始菜单 > Programm > PostgresSQL > Adjust PostgresSQL Configuration file
它将在Wordpad中打开PostgresSQL Configuration文件, 找到下列行,

#
# Connection Parameters
#
#tcpip_Socket = false
#ssl = false

#max_connections = 32
#superuser_reserved_connections = 2

#port = 5432

修改编辑:
#
# Connection Parameters
#
tcpip_socket = true
#ssl = false

#max_connections = 32
#superuser_reserved_connections = 2

port = 5432

接着,保存文件.

起动PostgresSQL服务器:
开始菜单>Programm>PostgresSQL>Utilies>Start PostgresSQL Server
起动命令行:
开始菜单>Programm>PostgresSQL>Utilies>Command Shell


执行下列命令,准备数据,
Administrator@SAN /
$ dir

$ cd bin

$ createdb test

$ psql test

test=# create table users
test-# (name varchar(20),
test(# id varchar(20),
test(# country varchar(20));
test=# insert into users values (´Sam´, ´123´, ´China´);
test=# insert into users values (´Tom´, ´321´, ´USA´);
test=# insert into users values (´Sean´, ´231´, ´France´);

test=# select * from users;
name | id | country
------+-----+---------
Sam | 123 | China
Tom | 321 | USA
Sean | 231 | France
(3 rows)

test=#

到此, 数据准备就绪.

For RedHat:
以root登陆, 执行下列命令,准备数据,

mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

Open and edit /usr/local/pgsql/data/pg_hba.conf

local all trust
host all 127.0.0.1 255.255.255.255 trust

just delete #, and save.

[root@localhost root]# su - postgres
-bash-2.05b$ /usr/bin/postmaster -i -D /usr/local/pgsql/data >logfile 2>&1 &
-bash-2.05b$ /usr/bin/createdb test
-bash-2.05b$ /usr/local/pgsql/bin/psql test
test=# .......the following same as Windows2000

到此, 数据准备就绪.

执行shutdown.bat or shutdown.sh, 停止Jboss Server.

找到JDBC drive.
为了在Jboss中使用连接池,需要拷贝jdbc drive 到Jboss/server/default/deploy , 在linux 我们能找到/usr/share/pgsql/pgjdbc2.jar,在wondows2000,我们能找到PostgreSQL\usr\share\postgresql\java\postgresql.jar
把其中之一复制到Jboss/server/default/deploy

配置Jboss

(1) 复制 $Jboss/examples/jca/postgres-service.xml 到 $Jboss/server/default/deploy/

(2) 打开编辑Jboss/server/default/deploy/postgres-service.xml

PostgresDS


jdbc:postgresql://localhost/test
org.postgresql.Driver

Administrator
123456

在我的例子中,
windows2000, 用户:Administrator,password:123456
Linux(RH8.0), 用户:Postgres, 没有password
因为PostgresSQL和windows2000使用不同的default用户名,所以在linux和window2000中这文件不同.当然,你可以加相同的PostgresSQL用户名和password在linux和window2000中, 这样这文件就相同了.

保存文件.

(3) 打开编辑 $Jboss/server/default/conf/standardjbosscmp-jdbc.xml
找到:
java:/DefaultDS
Hypersonic SQL
加入:
java:/PostgresDS
Postgres
保存文件.

(4) open and edit $Jboss/server/default/conf/standardjaws.xml
找到:
java:/DefaultDS
Hypersonic SQL
false
加入:
java:/PostgresDS
Postgres
false
保存文件.

现在重启JBoss.
打开浏览器输入地址http://localhost:8080/First br> 输入ID,按按钮

#p#

附件:源文件代码

MysqlDao.java  

package Dev.Dao;   
 
import java.sql.Connection;   
import java.sql.SQLException;   
import java.sql.Statement;   
import java.sql.ResultSet;   
 
import javax.naming.InitialContext;   
import javax.sql.DataSource;   
 
 
public class MysqlDao {   
 
    public Connection getConnection() throws Exception {   
 
        InitialContext ctx = new InitialContext();   
 
        DataSource ds = (DataSource) ctx.lookup("java:/PostgresDS");   
 
 
        Connection conn = null;   
        Statement stmt = null;   
 
        try {   
            conn = ds.getConnection();   
 
        } catch (SQLException sqlEx) {   
            System.out.println("Error connect to pool.");   
        }   
 
        return conn;   
    }   
 
    public String getName(String id) throws Exception {   
 
        Connection conn = null;   
        Statement stmt = null;   
        ResultSet rs = null;   
        String name = "";   
 
        try {   
            conn = getConnection();   
            if ( conn !=null )System.out.println("Get conecttion. "+ conn.toString());   
            stmt = conn.createStatement();   
            if ( stmt !=null )System.out.println("Get Statement. "+ stmt.toString());   
            String sql = "SELECT * from users where id = '"+id+"'";   
            System.out.println("Sql from getId(): "+sql);   
           rs = stmt.executeQuery(sql);   
            if ( rs !=null )System.out.println("Get result. ");   
           if (rs.next()){   
            name = rs.getString("name");   
               }   
 
        } catch (Exception sqlEx) {   
        System.out.println("Error from getName().");   
                System.out.println("Error from DAO.getName() :" + sqlEx.getMessage());   
        }finally {   
            if (conn != null) {   
               try { conn.close(); } catch (Exception sqlEx) { }   
            }   
        }   
        return name;   
    }   
 
    public String getCountry(String id) throws Exception {   
 
        Connection conn = null;   
        Statement stmt = null;   
        String name = "";   
 
        try {   
            conn = getConnection();   
            stmt = conn.createStatement();   
            String sql = "SELECT * from users where id = '"+id+"'";   
            System.out.println("Sql from getCountry(): "+sql);   
               java.sql.ResultSet rs = stmt.executeQuery(sql);   
               if (rs.next())   
            {   
                   name = rs.getString("Country");   
              }   
 
        } catch (SQLException sqlEx) {   
            System.out.println("Error from getCountry().");   
        }finally {   
            if (conn != null) {   
               try { conn.close(); } catch (Exception sqlEx) { }   
            }   
        }   
        return name;   
    }   
 
}   
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
/*  
**  
**NewDelegate.java   
**  
*/  
package Dev.Delegate;   
 
import java.lang.*;   
import Dev.First.*;   
 
 
public class NewDelegate {   
 
    Dev.First.FirstSession bean = null;   
       
    public NewDelegate( ){   
       try {   
       javax.naming.InitialContext ctx = new javax.naming.InitialContext();   
       Object objref = ctx.lookup("ejb/FirstSession");   
       Dev.First.FirstSessionHome testBean = (Dev.First.FirstSessionHome)   
          javax.rmi.PortableRemoteObject.narrow   
          (objref,Dev.First.FirstSessionHome.class);   
       bean = testBean.create();   
       System.out.println("From JSP");   
    } catch (Exception NamingException) {   
           NamingException.printStackTrace();   
    }   
    }   
     
    public String Welcome() {   
    String msg = "";   
    try {   
            msg = bean.Welcome();   
    } catch (Exception NamingException) {    
           NamingException.printStackTrace();   
         }   
           return msg;   
    }   
       
    public String getName(String id) {   
    String name = "";   
    try {   
            name = bean.getName(id);   
    } catch (Exception NamingException) { NamingException.printStackTrace();}   
        return name;   
    }    
       
    public String getCountry(String id) {   
    String country = "";   
    try {   
             country = bean.getCountry(id);   
    } catch (Exception NamingException) { NamingException.printStackTrace();}   
        return country;   
    }           
}   
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
/*  
**  
**FirstSession.java   
**  
*/ 
package Dev.First;   
 
import java.lang.*;   
import java.rmi.RemoteException;   
import javax.ejb.CreateException;   
import javax.ejb.EJBException;   
import javax.ejb.SessionBean;   
import javax.ejb.SessionContext;   
 
 
public interface FirstSession extends javax.ejb.EJBObject{   
 
         public String Welcome() throws java.rmi.RemoteException;   
            
         public String getName(String id) throws java.rmi.RemoteException;   
            
         public String getCountry(String id) throws java.rmi.RemoteException;   
 
}   
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
/*  
**  
**FirstSessionHome.java   
**  
*/ 
package Dev.First;   
 
import java.lang.*;   
import java.rmi.RemoteException;   
import javax.ejb.CreateException;   
import javax.ejb.EJBException;   
import javax.ejb.SessionBean;   
import javax.ejb.SessionContext;   
 
 
public interface FirstSessionHome extends javax.ejb.EJBHome{   
 
public FirstSession create() throws javax.ejb.CreateException, java.rmi.RemoteException;   
 
}   
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
/*  
**  
**FirstSessionBean.java   
**  
*/ 
package Dev.First;   
 
import java.rmi.RemoteException;   
import javax.ejb.CreateException;   
import javax.ejb.EJBException;   
import javax.ejb.SessionBean;   
import javax.ejb.SessionContext;   
 
 
public class FirstSessionBean implements SessionBean{   
 
public void ejbCreate() throws CreateException {   
 
}   
 
public String Welcome(){   
      String msg="Hello! This My Session Bean From Jboss.";   
      System.out.println(msg);   
      return msg;   
}   
 
public String getName(String id){   
      String name = "";   
      System.out.println("From bean before getName :"+ name);   
      try{   
      Dev.Dao.MysqlDao dao = new Dev.Dao.MysqlDao();   
      name = dao.getName(id);   
      System.out.println("From bean after getName :"+ name);   
      }catch(Exception e){ System.out.println(e.getMessage());}   
      return name;   
}   
 
public String getCountry(String id){   
      String country = "";   
      try{         
      Dev.Dao.MysqlDao dao = new Dev.Dao.MysqlDao();   
      country = dao.getCountry(id);   
      }catch(Exception e){ }         
      return country;   
}   
 
public void setSessionContext( SessionContext aContext ) throws EJBException {   
 
}   
 
public void ejbActivate() throws EJBException {   
 
}   
 
public void ejbPassivate() throws EJBException {   
 
}   
 
public void ejbRemove() throws EJBException {   
 
}   
 
}   
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
/*不要将下面这行放入index.jsp  
**  
**index.jsp   
**  
*/不要将上面这行放入index.jsp  
< %@page language="java" %>   
 
< %   
 
    String msg = "";   
    String msg1 = "";   
    Dev.Delegate.NewDelegate nn = new Dev.Delegate.NewDelegate();   
    if (request.getParameter("id") != null &&    
           request.getParameter("id") != ""&&    
           !request.getParameter("id").equals("")){   
        String id = request.getParameter("id");   
        String name = "";   
        Dev.Dao.MysqlDao dao = new Dev.Dao.MysqlDao();   
        name = nn.getName(id);      //access database through session bean   
        //name = dao.getName(id);   //access database directly   
        if(name!= null && !name.equals("")){   
            msg1 ="Welcome  " + name +" !     You are from  "+ dao.getCountry(id)+ " .";   
        }else{   
            msg1 ="Please Check Your ID. : " + id;   
        }   
 
    }   
    msg = nn.Welcome() ;   
%>   
< html>   
 
< head>   
< title>Welcome< /title>   
< /head>   
 
< body bgcolor="#FFFFCC">   
< br> < %= msg %> < br>   
 
< FORM ACTION="index.jsp" method="post">   
 
< P>Your ID:   
< INPUT TYPE="TEXT" NAME="id" size = "10">< /P>   
 
 
< P>< INPUT TYPE="SUBMIT" NAME="SUBMIT">< /P>   
< /FORM>   
< br>   
< br>   
 
< %=(msg1 == "")? "":msg1 + "< br> < br> < br>Connect to Database OK." %>   
 
< /body>   
< /html> 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
< !--不要将此以下5行存入文件  
**  
**ejb-jar.xml  
**  
-->不要将此以上5行存入文件, 下同.  
< ?xml version="1.0" encoding="UTF-8"?>   
< !DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN"    
"http://java.sun.com/dtd/ejb-jar_2_0.dtd">   
 
< ejb-jar>   
 
 < description>First< /description>   
 < display-name>First< /display-name>   
 
< enterprise-beans>   
 
< !-- Session Beans -->   
< session id="MyFirstSession">   
     < display-name>My First Session Bean< /display-name>   
     < ejb-name>FirstSession< /ejb-name>   
     < home>Dev.First.FirstSessionHome< /home>   
     < remote>Dev.First.FirstSession< /remote>   
     < ejb-class>Dev.First.FirstSessionBean< /ejb-class>   
     < session-type>Stateless< /session-type>   
     < transaction-type>Container< /transaction-type>   
< /session>   
< /enterprise-beans>   
< assembly-descriptor>   
< /assembly-descriptor>   
< /ejb-jar>   
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.

jboss.xml

< ?xml version="1.0" encoding="UTF-8"?>   
< !DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS//EN" "http://www.jboss.org/j2ee/dtd/jboss.dtd">   
 
< jboss>   
 
< enterprise-beans>   
 
< session>   
< ejb-name>FirstSession< /ejb-name>   
< jndi-name>ejbFirstSession< /jndi-name>   
< /session>   
 
< /enterprise-beans>   
 
< resource-managers>   
< /resource-managers>   
 
< /jboss>   
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.

jboss-web.xml

< ?xml version="1.0" encoding="UTF-8"?>   
< !DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 2.2//EN"    
"http://www.jboss.org/j2ee/dtd/jboss-web.dtd">   
 
< jboss-web>   
 
 
    < resource-ref>   
        < res-ref-name>jdbcPostgresDS< /res-ref-name>   
        < res-type>javax.sql.DataSource< /res-type>   
        < jndi-name>java:/PostgresDS< /jndi-name>   
    < /resource-ref>   
 
< /jboss-web>  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

web.xml

< ?xml version="1.0" encoding="ISO-8859-1"?>   
 
< !DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"   
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">   
 
< web-app>   
 
< resource-ref>   
  < description>Postgresql driver< /description>   
  < res-ref-name>jdbcPostgresDS< /res-ref-name>   
  < res-type>javax.sql.DataSource< /res-type>   
  < res-auth>Container< /res-auth>   
< /resource-ref>   
 
< /web-app>  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

application.xml

< ?xml version="1.0" encoding="ISO-8859-1"?>   
 
< application>   
< display-name>First< /display-name>   
< module>   
< web>   
< web-uri>First.war< /web-uri>   
< context-root>/First< /context-root>   
< /web>   
< /module>   
 
< module>   
< ejb>First.jar< /ejb>   
< /module>   
< /application>  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

【编辑推荐】

  1. 实现数据库表字j2ee应用
  2. J2ee简介
  3. J2EE应用服务器的现状与发展趋势
  4. J2EE、J2SE、J2ME是什么意思?
  5. J2EE的核心技术之JDBC简介篇 

责任编辑:book05 来源: 新浪博客
相关推荐

2009-06-22 10:14:00

J2EE web se

2009-06-12 08:54:22

EJB术语J2EE

2009-06-22 17:05:41

Java EEJava企业应用

2009-06-18 16:13:14

J2EE开发

2009-06-22 17:34:40

J2EE架构

2009-06-16 11:14:00

Hibernate+SJ2EE应用开发

2012-02-21 09:48:10

JavaJ2EE

2009-06-23 08:06:46

J2EE体系架构J2EE模型J2EE设计模式

2009-06-10 14:10:23

J2EE学习J2EE是什么

2009-06-19 17:03:44

J2EE学习

2009-06-22 10:59:00

J2EE web se

2009-06-11 17:06:11

J2EE历史Java EE概述

2009-06-10 13:37:06

J2EE可伸缩性J2EE灵活性J2EE维护

2009-06-22 10:09:00

J2EE web se

2009-06-23 16:48:26

J2EE常见问题J2EE平台

2009-06-22 17:09:00

J2EE项目开发流程

2009-06-08 21:34:09

J2EEJ2SEJ2ME

2009-06-22 09:56:00

J2EE web se

2009-06-18 15:54:57

J2EE下使用JNDI

2009-06-23 08:12:48

J2EE调用存储过程
点赞
收藏

51CTO技术栈公众号