开发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
在我的例子中,
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
找到:
加入:
保存文件.
(4) open and edit $Jboss/server/default/conf/standardjaws.xml
找到:
加入:
保存文件.
现在重启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.
【编辑推荐】