ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>国产免费永久在线观看,男人的天堂在线,日韩精品系列http://www.aygfsteel.com/kim/zh-cnMon, 28 Jul 2025 10:05:07 GMTMon, 28 Jul 2025 10:05:07 GMT60¾_‘Ö¦™çš„SQL语句http://www.aygfsteel.com/kim/archive/2007/01/27/96258.html大熊çŒ?/dc:creator>大熊çŒ?/author>Sat, 27 Jan 2007 04:18:00 GMThttp://www.aygfsteel.com/kim/archive/2007/01/27/96258.htmlhttp://www.aygfsteel.com/kim/comments/96258.htmlhttp://www.aygfsteel.com/kim/archive/2007/01/27/96258.html#Feedback0http://www.aygfsteel.com/kim/comments/commentRss/96258.htmlhttp://www.aygfsteel.com/kim/services/trackbacks/96258.html 转:javathink.org

说明åQšå¤åˆ¶è¡¨(只复制结æž?源表名:a 新表名:b)
select * into b from a where 1<>1


说明åQšæ‹·è´è¡¨(拯‚´æ•°æ®,源表名:a 目标表名åQšb)
insert into b(a, b, c) select d,e,f from b;


说明åQšæ˜¾½Cºæ–‡ç« ã€æäº¤äh和最后回复时é—?br />select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b


说明åQšå¤–˜qžæŽ¥æŸ¥è¯¢(表名1åQša 表名2åQšb)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c


说明åQšæ—¥½E‹å®‰æŽ’提前五分钟提醒
select * from 日程安排 where datediff('minute',f开始时�getdate())>5


说明åQšä¸¤å¼ å…³è”表åQŒåˆ é™¤ä¸»è¡¨ä¸­å·²ç»åœ¨å‰¯è¡¨ä¸­æ²¡æœ‰çš„ä¿¡æ?br />delete from info where not exists ( select * from infobz where info.infid=infobz.infid )


说明åQ?-

SQL:

SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE

FROM TABLE1,

(SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE

FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND

FROM TABLE2

WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X,

(SELECT NUM, UPD_DATE, STOCK_ONHAND

FROM TABLE2

WHERE TO_CHAR(UPD_DATE,'YYYY/MM') =

TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM') || '/01','YYYY/MM/DD') - 1, 'YYYY/MM') ) Y,

WHERE X.NUM = Y.NUM åQ?åQ?

AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) B

WHERE A.NUM = B.NUM


说明åQ?-
select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and ¾pÕd¿U?'"&strdepartmentname&"' and 专业名称='"&strprofessionname&"' order by 性别,生源åœ?高考æ€ÀLˆ¾l?br />

从数据库中去一òq´çš„各单位电话费¾lŸè®¡(电话费定额贺电化肥清单两个表来源åQ?

SELECT a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') AS telyear,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '01', a.factration)) AS JAN,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '02', a.factration)) AS FRI,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '03', a.factration)) AS MAR,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '04', a.factration)) AS APR,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '05', a.factration)) AS MAY,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) AS JUE,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '07', a.factration)) AS JUL,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '08', a.factration)) AS AGU,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '09', a.factration)) AS SEP,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '10', a.factration)) AS OCT,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '11', a.factration)) AS NOV,

SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '12', a.factration)) AS DEC

FROM (SELECT a.userper, a.tel, a.standfee, b.telfeedate, b.factration

FROM TELFEESTAND a, TELFEE b

WHERE a.tel = b.telfax) a

GROUP BY a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy')


说明åQšå››è¡¨è”查问é¢?br />select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....


说明åQšå¾—到表中最ž®çš„æœªä‹É用的IDå?br />

SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) as HandleID FROM Handle WHERE NOT HandleID IN (SELECT a.HandleID - 1 FROM Handle a)


一个SQL语句的问�行列转换
select * from v_temp
上面的视囄¡»“果如ä¸?
user_name role_name
-------------------------
¾pȝ»Ÿ½Ž¡ç†å‘?½Ž¡ç†å‘?
feng ½Ž¡ç†å‘?
feng 一般用�
test 一般用�
æƒÏxŠŠ¾l“果变成˜q™æ ·:
user_name role_name
---------------------------
¾pȝ»Ÿ½Ž¡ç†å‘?½Ž¡ç†å‘?
feng ½Ž¡ç†å‘?一般用æˆ?
test 一般用�br />===================
create table a_test(name varchar(20),role2 varchar(20))
insert into a_test values('æ?,'½Ž¡ç†å‘?)
insert into a_test values('å¼?,'½Ž¡ç†å‘?)
insert into a_test values('�,'一般用�)
insert into a_test values('�,'一般用�)

create function join_str(@content varchar(100))
returns varchar(2000)
as
begin
declare @str varchar(2000)
set @str=''
select @str=@str+','+rtrim(role2) from a_test where [name]=@content
select @str=right(@str,len(@str)-1)
return @str
end
go

--调用åQ?br />select [name],dbo.join_str([name]) role2 from a_test group by [name]

--select distinct name,dbo.uf_test(name) from a_test


快速比较结构相同的两表
¾l“构相同的两表,一表有记录3万条左右åQŒä¸€è¡¨æœ‰è®°å½•2万条左右åQŒæˆ‘怎样快速查找两表的不同记录åQ?br />============================
¾l™ä½ ä¸€ä¸ªæµ‹è¯•方法,从northwind中的orders表取数据ã€?br />select * into n1 from orders
select * into n2 from orders

select * from n1
select * from n2

--æ·ÕdР䏻键åQŒç„¶åŽä¿®æ”¹n1中若òq²å­—ŒD늚„若干æ?br />alter table n1 add constraint pk_n1_id primary key (OrderID)
alter table n2 add constraint pk_n2_id primary key (OrderID)

select OrderID from (select * from n1 union select * from n2) a group by OrderID having count(*) > 1

应该可以åQŒè€Œä¸”ž®†ä¸åŒçš„记录的ID昄¡¤ºå‡ºæ¥ã€?br />下面的适用于双方记录一æ ïLš„æƒ…况åQ?br />
select * from n1 where orderid in (select OrderID from (select * from n1 union select * from n2) a group by OrderID having count(*) > 1)
至于双方互不存在的记录是比较好处理的
--删除n1,n2中若òq²æ¡è®°å½•
delete from n1 where orderID in ('10728','10730')
delete from n2 where orderID in ('11000','11001')

--*************************************************************
-- 双方都有该记录却不完全相�br />select * from n1 where orderid in(select OrderID from (select * from n1 union select * from n2) a group by OrderID having count(*) > 1)
union
--n2中存在但在n1中不存的�0728,10730
select * from n1 where OrderID not in (select OrderID from n2)
union
--n1中存在但在n2中不存的�1000,11001
select * from n2 where OrderID not in (select OrderID from n1)


四种æ–ÒŽ³•取表里n到m条纪录:

1.
select top m * into 临时è¡?或表变量) from tablename order by columnname -- ž®†top m½W”插å…?br />set rowcount n
select * from 表变�order by columnname desc


2.
select top n * from (select top m * from tablename order by columnname) a order by columnname desc


3.如果tablename里没有其他identity列,那么åQ?br />select identity(int) id0,* into #temp from tablename

取n到m条的语句为:
select * from #temp where id0 >=n and id0 <= m

如果你在执行select identity(int) id0,* into #temp from tablename˜q™æ¡è¯­å¥çš„æ—¶å€™æŠ¥é”?é‚£æ˜¯å› äØ“ä½ çš„DB中间的select into/bulkcopy属性没有打开要先执行åQ?br />exec sp_dboption ä½ çš„DB名字,'select into/bulkcopy',true


4.如果表里有identity属性,那么½Ž€å•:
select * from tablename where identitycol between n and m


如何删除一个表中重复的记录åQ?br />create table a_dist(id int,name varchar(20))

insert into a_dist values(1,'abc')
insert into a_dist values(1,'abc')
insert into a_dist values(1,'abc')
insert into a_dist values(1,'abc')

exec up_distinct 'a_dist','id'

select * from a_dist

create procedure up_distinct(@t_name varchar(30),@f_key varchar(30))
--f_key表示是分¾l„å­—ŒDµï¹å³ä¸»é”®å­—ŒD?br />as
begin
declare @max integer,@id varchar(30) ,@sql varchar(7999) ,@type integer
select @sql = 'declare cur_rows cursor for select '+@f_key+' ,count(*) from ' +@t_name +' group by ' +@f_key +' having count(*) > 1'
exec(@sql)
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
select @type = xtype from syscolumns where id=object_id(@t_name) and name=@f_key
if @type=56
select @sql = 'delete from '+@t_name+' where ' + @f_key+' = '+ @id
if @type=167
select @sql = 'delete from '+@t_name+' where ' + @f_key+' = '+''''+ @id +''''
exec(@sql)
fetch cur_rows into @id,@max
end
close cur_rows
deallocate cur_rows
set rowcount 0
end

select * from systypes
select * from syscolumns where id = object_id('a_dist')


查询数据的最大排序问题(只能用一条语句写åQ?
CREATE TABLE hard (qu char (11) ,co char (11) ,je numeric(3, 0))

insert into hard values ('A','1',3)
insert into hard values ('A','2',4)
insert into hard values ('A','4',2)
insert into hard values ('A','6',9)
insert into hard values ('B','1',4)
insert into hard values ('B','2',5)
insert into hard values ('B','3',6)
insert into hard values ('C','3',4)
insert into hard values ('C','6',7)
insert into hard values ('C','2',3)


要求查询出来的结果如下:

qu co je
----------- ----------- -----
A 6 9
A 2 4
B 3 6
B 2 5
C 6 7
C 3 4


ž®±æ˜¯è¦æŒ‰qu分组åQŒæ¯¾l„中取je最大的å‰?位!åQ?br />而且只能用一句sql语句åQï¼åQ?br />select * from hard a where je in (select top 2 je from hard b where a.qu=b.qu order by je)


求删除重复记录的sql语句åQ?
怎样把具有相同字ŒD늚„¾Uªå½•删除åQŒåªç•™ä¸‹ä¸€æ¡ã€?br />例如åQŒè¡¨test里有id,name字段
如果有name相同的记å½?只留下一条,其余的删除ã€?br />name的内容不定,相同的记录数不定ã€?br />有没有这æ ïLš„sql语句åQ?br />==============================
A:一个完整的解决æ–ÒŽ¡ˆåQ?br />
ž®†é‡å¤çš„记录记入temp1è¡?
select [标志字段id],count(*) into temp1 from [表名]
group by [标志字段id]
having count(*)>1

2、将不重复的记录记入temp1�
insert temp1 select [标志字段id],count(*) from [表名] group by [标志字段id] having count(*)=1

3、作一个包含所有不重复记录的表åQ?br />select * into temp2 from [表名] where 标志字段id in(select 标志字段id from temp1)

4、删除重复表:
delete [表名]

5、恢复表åQ?br />insert [表名] select * from temp2

6、删除äÍ时表:
drop table temp1
drop table temp2
================================
B:
create table a_dist(id int,name varchar(20))

insert into a_dist values(1,'abc')
insert into a_dist values(1,'abc')
insert into a_dist values(1,'abc')
insert into a_dist values(1,'abc')

exec up_distinct 'a_dist','id'

select * from a_dist

create procedure up_distinct(@t_name varchar(30),@f_key varchar(30))
--f_key表示是分¾l„å­—ŒDµï¹å³ä¸»é”®å­—ŒD?br />as
begin
declare @max integer,@id varchar(30) ,@sql varchar(7999) ,@type integer
select @sql = 'declare cur_rows cursor for select '+@f_key+' ,count(*) from ' +@t_name +' group by ' +@f_key +' having count(*) > 1'
exec(@sql)
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
select @type = xtype from syscolumns where id=object_id(@t_name) and name=@f_key
if @type=56
select @sql = 'delete from '+@t_name+' where ' + @f_key+' = '+ @id
if @type=167
select @sql = 'delete from '+@t_name+' where ' + @f_key+' = '+''''+ @id +''''
exec(@sql)
fetch cur_rows into @id,@max
end
close cur_rows
deallocate cur_rows
set rowcount 0
end

select * from systypes
select * from syscolumns where id = object_id('a_dist')


行列转换--普�

假设有张学生成ç‡Wè¡?CJ)如下
Name Subject Result
张三 语文 80
张三 数学 90
张三 物理 85
李四 语文 85
李四 数学 92
李四 物理 82

惛_˜æˆ?
姓名 语文 数学 物理
张三 80 90 85
李四 85 92 82

declare @sql varchar(4000)
set @sql = 'select Name'
select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
from (select distinct Subject from CJ) as a
select @sql = @sql+' from test group by name'
exec(@sql)

行列转换--åˆåÆˆ

有表A,
id pid
1 1
1 2
1 3
2 1
2 2
3 1
如何化成表B:
id pid
1 1,2,3
2 1,2
3 1

创徏一个合òq¶çš„函数
create function fmerg(@id int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+cast(pid as varchar) from 表A where id=@id
set @str=right(@str,len(@str)-1)
return(@str)
End
go

--调用自定义函数得到结�
select distinct id,dbo.fmerg(id) from 表A


如何取得一个数据表的所有列�

æ–ÒŽ³•如下åQšå…ˆä»ŽSYSTEMOBJECT¾pȝ»Ÿè¡¨ä¸­å–得数据表的SYSTEMID,然后再SYSCOLUMN表中取得该数据表的所有列名ã€?
SQL语句如下åQ?
declare @objid int,@objname char(40)
set @objname = 'tablename'
select @objid = id from sysobjects where id = object_id(@objname)
select 'Column_name' = name from syscolumns where id = @objid order by colid

�br />
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME ='users'


通过SQL语句来更改用æˆïLš„密码

修改别ähçš?需要sysadmin role
EXEC sp_password NULL, 'newpassword', 'User'

如果帐号为SA执行EXEC sp_password NULL, 'newpassword', sa


怎么判断å‡ÞZ¸€ä¸ªè¡¨çš„哪些字ŒDµä¸å…è®¸ä¸ºç©ºåQ?

select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where IS_NULLABLE='NO' and TABLE_NAME=tablename


如何在数据库里找到含有相同字ŒD늚„表?
a. 查已知列名的情况
SELECT b.name as TableName,a.name as columnname
From syscolumns a INNER JOIN sysobjects b
ON a.id=b.id
AND b.type='U'
AND a.name='你的字段名字'


未知列名查所有在不同表出现过的列�
Select o.name As tablename,s1.name As columnname
From syscolumns s1, sysobjects o
Where s1.id = o.id
And o.type = 'U'
And Exists (
Select 1 From syscolumns s2
Where s1.name = s2.name
And s1.id <> s2.id
)


查询½W¬xxx行数æ?

假设id是主键:
select * from (select top xxx * from yourtable) aa where not exists(select 1 from (select top xxx-1 * from yourtable) bb where aa.id=bb.id)

如果使用游标也是可以�
fetch absolute [number] from [cursor_name]
行数为绝对行�


SQL Server日期计算
a. 一个月的第一�
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
b. 本周的星期一
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
c. 一òq´çš„½W¬ä¸€å¤?
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
d. 季度的第一�
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
e. 上个月的最后一�
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
f. åŽÕd¹´çš„æœ€åŽä¸€å¤?
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
g. 本月的最后一�
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))
h. 本月的第一个星期一
select DATEADD(wk, DATEDIFF(wk,0,
dateadd(dd,6-datepart(day,getdate()),getdate())
), 0)
i. 本年的最后一�
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))�


获取表结构[æŠ?'sysobjects' 替换 æˆ?'tablename' 卛_¯]

SELECT CASE IsNull(I.name, '')
When '' Then ''
Else '*'
End as IsPK,
Object_Name(A.id) as t_name,
A.name as c_name,
IsNull(SubString(M.text, 1, 254), '') as pbc_init,
T.name as F_DataType,
CASE IsNull(TYPEPROPERTY(T.name, 'Scale'), '')
WHEN '' Then Cast(A.prec as varchar)
ELSE Cast(A.prec as varchar) + ',' + Cast(A.scale as varchar)
END as F_Scale,
A.isnullable as F_isNullAble
FROM Syscolumns as A
JOIN Systypes as T
ON (A.xType = T.xUserType AND A.Id = Object_id('sysobjects') )
LEFT JOIN ( SysIndexes as I
JOIN Syscolumns as A1
ON ( I.id = A1.id and A1.id = object_id('sysobjects') and (I.status & 0x800) = 0x800 AND A1.colid <= I.keycnt) )
ON ( A.id = I.id AND A.name = index_col('sysobjects', I.indid, A1.colid) )
LEFT JOIN SysComments as M
ON ( M.id = A.cdefault and ObjectProperty(A.cdefault, 'IsConstraint') = 1 )
ORDER BY A.Colid ASC


提取数据库内所有表的字ŒDµè¯¦¾l†è¯´æ˜Žçš„SQL语句

SELECT
(case when a.colorder=1 then d.name else '' end) N'表名',
a.colorder N'字段序号',
a.name N'字段�,
(case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '�else ''
end) N'标识',
(case when (SELECT count(*)
FROM sysobjects
WHERE (name in
(SELECT name
FROM sysindexes
WHERE (id = a.id) AND (indid in
(SELECT indid
FROM sysindexkeys
WHERE (id = a.id) AND (colid in
(SELECT colid
FROM syscolumns
WHERE (id = a.id) AND (name = a.name))))))) AND
(xtype = 'PK'))>0 then '� else '' end) N'主键',
b.name N'¾cÕdž‹',
a.length N'占用字节�,
COLUMNPROPERTY(a.id,a.name,'PRECISION') as N'长度',
isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as N'ž®æ•°ä½æ•°',
(case when a.isnullable=1 then 'âˆ?else '' end) N'允许½I?,
isnull(e.text,'') N'默认�,
isnull(g.[value],'') AS N'字段说明'
FROM syscolumns a
left join systypes b
on a.xtype=b.xusertype
inner join sysobjects d
on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
left join syscomments e
on a.cdefault=e.id
left join sysproperties g
on a.id=g.id AND a.colid = g.smallid
order by object_name(a.id),a.colorder


快速获取表test的记录æ€ÀL•°[对大定w‡è¡¨éžå¸¸æœ‰æ•ˆ]

快速获取表test的记录æ€ÀL•°:
select rows from sysindexes where id = object_id('test') and indid in (0,1)

update 2 set KHXH=(ID+1)\2 2行递增¾~–号
update [23] set id1 = 'No.'+right('00000000'+id,6) where id not like 'No%' //递增
update [23] set id1= 'No.'+right('00000000'+replace(id1,'No.',''),6) //补位递增
delete from [1] where (id%2)=1
奇数


替换表名字段
update [1] set domurl = replace(domurl,'Upload/Imgswf/','Upload/Photo/') where domurl like '%Upload/Imgswf/%'


截位
SELECT LEFT(表名, 5)


]]>
Java 专业人士必备的书¾cå’Œ¾|‘站列表http://www.aygfsteel.com/kim/archive/2007/01/27/96257.html大熊çŒ?/dc:creator>大熊çŒ?/author>Sat, 27 Jan 2007 04:12:00 GMThttp://www.aygfsteel.com/kim/archive/2007/01/27/96257.htmlhttp://www.aygfsteel.com/kim/comments/96257.htmlhttp://www.aygfsteel.com/kim/archive/2007/01/27/96257.html#Feedback0http://www.aygfsteel.com/kim/comments/commentRss/96257.htmlhttp://www.aygfsteel.com/kim/services/trackbacks/96257.html 转:javathink.org

对于 Javaâ„?语言开发äh员来è¯ß_¼Œä¿¡æ¯˜q‡é‡æ˜¯ä¸€ä¸ªçœŸæ­£çš„问题。每个新入行的程序员都要面äÍ一个ä×o人畏¾~©çš„æŒ‘战åQšè¦˜q›å…¥çš„行业是一个具有æ“v量知识的行业。要了解的东西简直太多了。对于有¾léªŒçš„老手来说åQŒæƒ…况只有些微好转。知识量æ€Õdœ¨å¢žå¤§åQŒä»…仅跟上进度就是一个挑战。如果有一份专业äh士必备的书籍和网站列表该有多好!本文ž®±æ˜¯˜q™ä¸ªåˆ—表。它包含了每个专业的 Java 语言½E‹åºå‘˜åœ¨ä¹¦æž¶æˆ–浏览器书签中必备的最重要的书¾cå’Œ¾|‘ç«™ã€?br />˜q™äº›éƒ½æ˜¯æ‚¨ä¹¦æž¶ä¸Šå¿…å¤‡çš„ä¹¦å’Œåº”è¯¥ç»å¸æ€‹É用的 Web 链接。时间是一™åšw‡è¦çš„资源åQŒæœ¬æ–‡å¸®æ‚¨å›žé‰K‚£äº›åˆ†å¿ƒçš„事情åQŒæŠŠæ—‰™—´ä¸“æ³¨äºŽæœ€æœ‰ç›ŠäºŽæ‚¨ä½œäØ“Java 语言½E‹åºå‘˜èŒä¸šç”Ÿæ¶¯çš„信息源。尽½Ž¡æœ‰å¤šå°‘½E‹åºå‘˜å°±æœ‰å¤šž®‘他们最喜欢的参考资料,但本文收集的˜q™äº›éƒ½æ˜¯ä¼˜ä¸­é€‰ä¼˜åQŒæ¥æºäºŽæˆ‘书架上的私家珍藏和许多 Java 专家的推荐ã€?br />
我考虑了两¿Uç»„¾l‡è¿™ä»½å‚考资料列表的æ–ÒŽ³•。我本可以通过主题领域来组¾l‡ï¼Œ˜q™ä¹Ÿè®¸å¾ˆæœ‰å¸®åŠ©ï¼Œä½†ä¸»é¢˜åˆ—è¡¨å¾ˆå¿«å°±ä¼šå˜å¾—ä¸å®žç”¨ã€‚ç›¸åï¼Œæˆ‘é€‰æ‹©äº†å¦ä¸€¿Uæ–¹æ³•:通过¾cÕdž‹æ¥ç»„¾l‡ï¼Œå³ä¹¦¾cå’Œ Web 站点ã€?br />
æ€Èš„来讲åQŒæœ‰¾léªŒçš„老手们用 Web 站点来跟ítªè¡Œä¸šçš„走势。书¾cã€æ–‡ç« å’Œè®ºæ–‡æœ‰åŠ©äºŽè·Ÿä¸Šæ½®‹¹ï¼Œä½†å®ƒä»¬æ€ÖM½“上更适合于基¼‹€å­¦ä¹ ã€‚极富创造性的书籍偶尔会撼动一两个基础性的东西。这æ ïLš„书也在本列表之列ã€?br />
需要提出的一点警告是åQŒä¸“注于 Java 语言的书¾cå’Œ Web 站点数量巨大。您钟爱的未必在˜q™ä†¾åˆ—表里。那òq¶ä¸æ„å‘³ç€å®ƒä»¬ä¸å¥½ã€‚å®ƒä»¬åªæ˜¯ä¸åœ¨è¿™ä»½åˆ—è¡¨é‡Œè€Œå·²ã€‚å¯èƒ½æ˜¯å› äØ“æˆ‘è¿˜ä¸çŸ¥é“å®ƒä»¬ã€‚ä¹Ÿå¯èƒ½æ˜¯å› ä¸ºæˆ‘ä¸è®¤ä¸ºå®ƒä»¬èƒ½å¤Ÿç®—å¾—ä¸Šæ˜¯é‡è¦èµ„æºã€‚ä¸åŒ…å«ä¸€äº›å‚è€ƒèµ„æ–™æ˜¯ä¸€ä¸ªè¯„åˆ¤é—®é¢˜ï¼Œä½†å¦‚æžœä¸˜q™æ ·çš„话åQŒæ‚¨ä¹Ÿè®¸ž®Þp¦èб几ž®æ—¶æ¥æ‹–动滚动条åQŒè¿˜è¦èŠ±ä¸Šæˆåƒä¸Šä¸‡ç¾Žå…ƒæ¥ä¹îC¹¦ã€‚å¦‚æžœæ‚¨ä½œäØ“ä¸€ä¸ªä¸“ä¸šçš„ Java ½E‹åºå‘˜ï¼Œæœ‰ä¸€äº›å¸¸ç”¨çš„优秀参考资料,一定要让我知道˜q™äº›èµ„料。这份列表一直都在更æ–îC¸­åQŒæ‚¨æå‡ºçš„那些也许就会被收录˜q›åŽ»ã€?br />
书籍

每个½E‹åºå‘˜éƒ½ä¼šæœ‰ä¸€äº›ç”±äºŽç»å¸¸è¢«å½“作专业资料参阅而磨坏的书。下列书¾cåº”该是 Java 语言½E‹åºå‘˜çš„书架上必备的。书很贵åQŒæ‰€ä»¥æˆ‘有意ž®†è¿™ä»½åˆ—表弄得很短,仅限于重要书¾cã€?br />
Thinking in Java (Bruce Eckel)

Thinking in Java, 3rd edition åQˆBruce Eckel; Prentice Hall PTRåQ?002 òqß_¼‰
Java ¾~–程思想åQšç¬¬3ç‰?åQˆé™ˆæ˜Šé¹ ½{‰è¯‘; 机械工业出版½C¾ï¼Œ2005 òqß_¼‰
Eckel 的书对于学习如何åœ?Java 语言环境中ä‹É用好面向对象技术极其实用。书中大量的代码样例解释了他所介绍的概å¿üc€‚æ–‡å­—å‡ºè‡ªä¸€ä¸ªåÆˆä¸è®¤ä¸?Java 技术æ€ÀL˜¯æ­£ç¡®½{”案的ähåQŒæ‰€ä»¥ç›¸å½“地实用。Eckel å…ähœ‰å¤šç§è¯­è¨€çš„大量经验,˜q˜æœ‰ç”¨é¢å‘对象方式进行思考的扎实技能。本书将˜q™äº›æŠ€èƒ½æ”¾åˆ°å®žç”¨çš„ Java 语言环境中。他˜q˜åœ¨å†™ä¸€æœ¬æ–°ä¹¦ï¼ŒåäØ“ Thinking in Enterprise Javaã€?br />
Effective Java (Joshua Bloch)

Effective Java: Programming Language Guide åQˆJoshua Bloch; Addison-WesleyåQ?001 òqß_¼‰
Effective Java 中文ç‰?åQˆæ½˜çˆ±æ°‘ è¯? 机械工业出版½C¾ï¼Œ2003 òqß_¼‰
本书是理解优¿U€ Java ½E‹åºè®¾è®¡åŽŸåˆ™çš„æœ€ä½³ä¹¦¾cã€‚大多数材料从其他的 “学ä¹?Java â€?的书中根本找不到。例如,Bloch 书中关于覆盖 equals() ˜q™ä¸€ç« æ˜¯æˆ‘读˜q‡çš„æœ€å¥½çš„参考资料之一。他也在书中包括了很实用的徏议:用接口替代抽象类和灵‹zÖM‹É用异常。Bloch æ˜?Sun 公司 Java òq›_°åº“的架构师,所以他透彻åœîCº†è§£è¿™é—¨è¯­­a€ã€‚事实上åQŒä»–¾~–写了该语言中大量有用的库。本书必读!

The Java Programming Language (Ken Arnold, James Gosling, David Holmes)

The Java Programming Language åQˆKen ArnoldåQŒJames GoslingåQŒDavid Holmes; Addison-WesleyåQ?000 òqß_¼‰
Java ¾~–程语言åQˆç¬¬ 3 版) åQˆè™žä¸‡è£ ½{‰è¯‘åQŒä¸­å›½ç”µåŠ›å‡ºç‰ˆç¤¾åQ?003 òqß_¼‰
˜q™ä¹Ÿè®¸æ˜¯èƒ½å¼„到的最好的 Java 入门è¯È‰©ã€‚它òq¶ä¸æ˜¯ä¸€ä¸ªæ ‡å‡†è§„范,而是一本介¾læ¯é—¨è¯­­a€ç‰ÒŽ€§çš„可读书籍。这本书在严谨性和教育性方面权衡得很好åQŒèƒ½å¤Ÿè®©æ‡‚ç¼–½E‹çš„äºø™¿…速被 Java 语言åQˆå’Œå…¶ä¸°å¯Œçš„¾cÕdº“åQ‰æ‰€å¸å¼•ã€?br />
Concurrent Programming in Java: Design Principles and Patterns (Doug Lea)

Concurrent Programming in Java: Design Principles and Patterns, 2nd edition åQˆDoug Lea; Addison-WesleyåQ?999 òqß_¼‰
Java òq¶å‘¾~–程—设计原则与模式åQˆç¬¬äºŒç‰ˆåQ?åQˆè™næ¶?½{‰è¯‘åQŒä¸­å›½ç”µåŠ›å‡ºç‰ˆç¤¾åQ?004 òqß_¼‰
不是每个开发äh员都需要如此细致地了解òq¶å‘性,也不是每个工½E‹å¸ˆéƒ½èƒ½è¾‘Öˆ°æœ¬ä¹¦çš„æ°´å‡†ï¼Œä½†å´æ²¡æœ‰æ¯”本书更好的关于òq¶å‘性编½E‹çš„æ¦‚述了。如果您å¯ÒŽ­¤æ„Ÿå…´­‘£ï¼Œè¯·ä»Ž˜q™é‡Œå¼€å§‹ã€‚Lea æ˜?SUNY 的一名专业程序员åQŒä»–的和òq¶å‘性有关的作品和想法都包含在了 JDK 5.0 规范åQˆå¼•è‡?JSR166åQ‰ä¸­åQŒæ‰€ä»¥æ‚¨å¤§å¯æ”‘Ö¿ƒåQŒä»–所说的关于有效使用 Java 语言的徏议是值得一听的。他是一个很善于沟通的人ã€?br />
Expert One-On-One J2EE Design and Development (Rod Johnson)

Expert One-On-One J2EE Design and Development åQˆRod JohnsonåQ?br />WROX: J2EE 设计开发编½E‹æŒ‡å?åQˆé­‹¹¯‚ 译,电子工业出版½C¾ï¼Œ2003 òqß_¼‰
对于刚接è§?J2EE çš„äh来说åQŒè¿™æ˜¯å”¯ä¸€çš„一本如实反映这™åÒŽŠ€æœ¯çš„ä¹¦ã€‚æœ¬ä¹¦æ”¶å½•äº†å¤šå¹´çš„æˆåŠŸç»éªŒå’Œå¤ÞpÓ|¾léªŒåQŒä¸åŒäºŽå…¶ä»–许多作者,Johnson 乐于ž®†å¤±è´¥çš„¾léªŒå…¬è¯¸äºŽä¼—。J2EE 常常都被˜q‡åº¦ä½¿ç”¨ã€‚Johnson 的书能帮您避免这一炏V€?

Refactoring (Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts)

Refactoring: Improving the Design of Existing Code åQˆMartin FowleråQŒKent BeckåQŒJohn BrantåQŒWilliam OpdykeåQŒDon Roberts; Addison-WesleyåQ?999 òqß_¼‰
重构åQšæ”¹å–„æ—¢æœ‰ä»£ç çš„è®¾è®¡åQˆä¸­æ–‡ç‰ˆåQ?åQˆä¾¯æ?½{‰è¯‘åQŒä¸­å›½ç”µåŠ›å‡ºç‰ˆç¤¾ åQ?003 òqß_¼‰
Fowler 写了几本现已出版的最‹¹è¡Œçš„ç¼–½E‹ä¹¦åQŒåŒ…æ‹?Analysis Patterns。他的关于重æž?的书是这一主题的基本书¾cã€‚重构代码是被程序员忽略的训¾lƒï¼Œä½†å´æ˜¯ç¨‹åºå‘˜æœ€ç›´è§‚的想法。重构是在不改变代码¾l“果的前提下改进现有代码的设计。这是保持代码整‹zçš„æœ€ä½Ïx–¹å¼ï¼Œç”¨è¿™¿Uæ–¹æ³•设计的代码æ€ÀL˜¯å¾ˆå®¹æ˜“修攏V€‚什么时候进行重构呢åQŸå½“代码“散发出味道”时。Fowler 的书里满æ˜?Java 语言代码的例子。许å¤?Java 语言集成开发环境(IDEåQ‰ï¼ˆåŒ…括äº?IBM çš?EclipseåQ‰éƒ½ž®?Fowler 的重构包含了˜q›åŽ»åQŒæ¯ä¸€ä¸ªéƒ½ä½¿ç”¨ä»–的重构名命名,所以熟悉如extract method ½{‰é‡æž„方法还是很值得的ã€?br />
Design Patterns (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides)

Design Patterns: Elements of Reusable Object Oriented Software åQˆErich GammaåQŒRichard HelmåQŒRalph JohnsonåQŒJohn Vlissides; Addison-WesleyåQ?997 òqß_¼‰
设计模式åQšå¯å¤ç”¨é¢å‘对象软äšg的基¼‹€ åQˆæŽè‹±å†› ½{‰è¯‘åQŒæœºæ¢°å·¥ä¸šå‡ºç‰ˆç¤¾ åQ?005 òqß_¼‰
˜q™æ˜¯ä¸€æœ¬åœ¨ä¸“业½E‹åºå‘˜åœˆå­é‡Œæ›´äؓ有名的书åQŒåŸºäºŽä½œè€…共同的¾l°å·åQŒè¿™æœ¬ä¹¦è¢«è®¤ä¸ºæ˜¯ “四人帮åQˆGOFåQ‰ä¹‹ä¹¦â€ã€‚模式是思考和解决普通编½E‹é—®é¢˜æ—¶å¯ä»¥é‡ç”¨çš„æ–¹å¼ã€‚学习模式是一门学¿U‘。ä‹É用好模式åQˆæˆ–知道什么时候不 使用模式åQ‰æ˜¯ä¸€™åÒŽŠ€èƒ½ã€‚å¿½ç•¥æ¨¡å¼åˆ™æ˜¯é”™è¯¯çš„ã€‚ä¹¦ä¸­æ‰€æœ‰çš„ä¾‹å­éƒ½ä»¥ C++ 表示åQŒä½† Java 语言是从那里诞生的,è®?Java 语言½E‹åºå‘˜ç”±æ­¤è”¾pÕdˆ°å¦‚何åœ?Java è¯­è¨€ä¸­å®žçŽ°è¿™äº›æ¨¡å¼ç›¸å¯¹ç®€å•ä¸€äº›ã€‚ç†Ÿæ‚‰æ¨¡å¼åÆˆäº†è§£å¦‚ä½•ä½¿ç”¨å¥½æ¨¡å¼ä‹É¾~–程更加½Ž€å•。这使得和其他程序员交流也更½Ž€å•ï¼Œå› äØ“åœ¨é’ˆå¯šw€šç”¨é—®é¢˜çš„通用解决æ–ÒŽ¡ˆä¸­ï¼Œæ¨¡å¼æ˜¯æ˜q°è§£å†Ïx–¹æ¡ˆä¸­å½¼æ­¤åä½œçš„大量相关编½E‹æ¦‚å¿ëŠš„快捷方式。一些更为通用的方式,如工厂方æ³?则是普便存在的,甚至存在äº?Java 语言本èín。关于明æ™ÞZ‹É用模式的˜q™ä¸ªä¸»é¢˜åQŒä¹Ÿå¯ä»¥é˜…读 Joshua Kerievsky çš?Refactoring to PatternsåQŒè¯¥ä¹¦ç§°å¯ä»¥è®©ä»£ç æ¥å‘Šè¯‰æ‚¨ä½•时实现模式ã€?br />
Patterns of Enterprise Application Architecture (Martin Fowler)

Patterns of Enterprise Application Architecture åQˆMartin Fowler; Addison-WesleyåQ?002 òqß_¼‰
企业应用架构模式 åQˆçŽ‹æ€€æ°?½{‰è¯‘åQŒæœºæ¢°å·¥ä¸šå‡ºç‰ˆç¤¾ åQ?004 òqß_¼‰
比è“vž®åž‹ã€ä¸€‹Æ¡æ€§é¡¹ç›®æ¥è¯ß_¼Œä¼ä¸šå¼€å‘当然代表了更大的挑战。那òq¶ä¸æ„å‘³ç€ä¼ä¸šå¼€å‘带来的所有挑战都是新挑战。事实上有些时候,˜q™é¡¹å¼€å‘å·²¾l?是以前完成过的了。Fowler 做了很多个这æ ïLš„™å¹ç›®ã€‚他的书提到了一些通用解决æ–ÒŽ¡ˆåQŒåƈ提供了关于ä‹É用、折中和可选方案的指导。Fowler 在书中包含了一些熟悉的模式åQŒå¦‚模型视图控制器(MVCåQ‰ï¼Œä»–也提供了一些您也许不了解的模式åQŒå¦‚处理 Web ç«™ç‚¹ä¸Šç‰¹å®šé¡µé¢è¯·æ±‚æˆ–è¡ŒäØ“è¯äh±‚çš?Page Controller æ¨¡å¼ã€‚æ­£å¦‚æ‚¨å¯¹å¾…å¤§å¤šæ•°æ¨¡å¼ä¸€æ øP¼Œä¸€æ—¦æ‚¨è¯»è¿‡è®¸å¤šæ¨¡å¼åQŒæ‚¨ž®×ƒ¼šè®¤äØ“ “我已经知道那个模式了â€?。也许是˜q™æ ·åQŒä½†æœ‰ä¸€ä¸ªç”¨æ¥å¼•用模式的通用表达方式˜q˜æ˜¯å¾ˆæœ‰å¸®åŠ©çš„ã€‚åœ¨æœ‰å¤šä¸ªç»„ä»Óž¼ˆç”׃¸åŒäh开发)的大型项目中åQŒè¯¥¾cÕd¼•用是一™å¹å¾ˆå¥½çš„帮助ã€?br />
UML Distilled (Martin Fowler)

UML Distilled: A Brief Guide to the Standard Object Modeling Language åQˆMartin Fowler; Addison-Wesley 2003 òqß_¼‰
UML¾_„¡ÑaåQšæ ‡å‡†å¯¹è±¡è¯­­a€½Ž€æ˜ŽæŒ‡å—(½W?版) åQˆå¾å®¶ç¦ 译,清华大学出版½C?åQ?005 òqß_¼‰
对于专业的程序员来说åQŒUML 是一门很重要的通用可视化沟通语­a€åQŒä½†æ˜¯å®ƒè¢«è¿‡åº¦ä‹É用和草率地滥用了。您无需对ä‹Éç”?UML 沟通了解太多。Martin å¯?UML 的提ç‚égؓ您提供了最核心的东è¥Ñ€‚事实上åQŒå‰åŽçš„ž®é¡µæä¾›äº†å¸¸è§„基¼‹€ä¸Šå¯èƒ½ä‹É用到的所有东è¥Ñ€‚该书中 UML 例子的代码都æ˜?Java 代码ã€?br />
Test-Driven Development: By Example (Kent Beck)

Test-Driven Development: By Example åQˆKent Beck; Addison-Wesley 2002 òqß_¼‰
‹¹‹è¯•驱动开发(中文版) åQˆå´”å‡?译,中国电力出版½C?åQ?004 òqß_¼‰
‹¹‹è¯•优先¾~–程ž®†ä‹É¾~–程发生革命性变化,能助您成为更好的½E‹åºå‘˜ã€‚在写代码之前编写测试开始很难,但却是一™å¹å¨åŠ›å¼ºå¤§çš„æŠ€èƒ½ã€‚é€šè¿‡ä¼˜å…ˆ¾~–写‹¹‹è¯•åQŒå¯ä½¿ä»£ç æ›´åŠ ç®€å•ï¼Œòq¶ç¡®ä¿ä»Žä¸€å¼€å§‹å®ƒž®Þpƒ½å·¥ä½œåQˆBeck 实践着他提倡的‹¹‹è¯•优先åQŒä¸Žäººåˆå†™äº† JUnitåQŒè¿™æ˜?Java 语言最‹¹è¡Œçš„æµ‹è¯•框æžÓž¼‰ã€‚Beck 的书是权威的参考资料,扩展了的 Money 例子也用 Java 语言写成。Beck 详述了如何用‹¹‹è¯•优先˜q›è¡Œ 思考(˜q™ä¹Ÿè®¸æ˜¯è®¸å¤š½E‹åºå‘˜é¦–先遇到的障碍åQ‰ã€?br />
The Pragmatic Programmer: From Journeyman to Master (Andy Hunt and Dave Thomas)

The Pragmatic Programmer: From Journeyman to Master åQˆAndrew Hunt å’?David Thomas; Addison-Wesley 1999 òqß_¼‰
½E‹åºå‘˜ä¿®ç‚ég¹‹é“——从ž®å·¥åˆîC¸“å®?åQˆé©¬¾l´è¾¾ 译,电子工业出版½C?åQ?004 òqß_¼‰
做一个纯¾_¹çš„面向对象开发äh员有其优势所在。在当今复杂的社会中åQŒä½œä¸?Java 语言开发äh员,为完成ä“Q务常要妥协。Hunt å’?Thomas 探讨了如何不ž®†çœŸæ­£é‡è¦çš„东西妥协掉而完成ä“Q务。这不是一本关äº?Java 语言的书åQŒè€Œæ˜¯ Java 语言开发äh员重要的思想è¯È‰©ã€‚例如,我认为没从“要解决问题åQŒè€Œä¸æ˜¯æŽ¨å¸è´£ä» Z€è¿™å¥å¿ ­a€ä¸­å—益的½E‹åºå‘˜ï¼Œä¸èƒ½åƒä¸ªè‡ªè±ªçš„艺术家一样在他的æîC½œä¸Šç­¾ä¸Šå¤§åã€?br />
Peopleware: Productive Projects and Teams (Tom DeMarco and Timothy Lister)

Peopleware: Productive Projects and Teams åQˆTom DeMarcoåQŒTimothy Lister; Dorset HouseåQ?999 òqß_¼‰
äºÞZšgåQˆç¬¬2版) åQˆUMLChina ¾˜»è¯‘¾l?译,清华大学出版½C?åQ?003 òqß_¼‰
˜q™ä†¾åˆ—表中的其他所有书¾céƒ½è‡›_°‘和技术有些相兟뀂这本书却不是。在所有技术行话和首字母羃略词的æ“v‹z‹ä¸­åQŒæœ‰æ—¶èÊY件开发äh员和¾lç†ä»¬ä¼šå¿˜è®°åQšæ˜¯äº?刉™€ äº†è½¯äšg。DeMarco å’?Lister 向我们提醒了˜q™ä¸€äº‹å®žåQŒä¹Ÿå‘我们提醒了形成˜q™ä¸€åŒºåˆ«çš„原因。这不是一本关于一门特定编½E‹è¯­­a€çš„书¾cï¼Œä½†å´æ˜¯æ¯ä¸?Java 语言½E‹åºå‘˜éƒ½åº”该è¯Èš„书。关äº?“篏æ­È¨‹åºå‘˜å¦‚何让经理们适得其反â€?˜q˜æœ‰è®¸å¤šå…¶ä»–的好书,但这是最好的一本ã€?br />


Web 站点

Web 站点的数目浩如烟‹¹øP¼Œå¦‚果您想要消化其中的内容åQŒç©·æ¯•生之力也难以全部访问。包å?Java 语言某方面内容的详尽的网站列表会大得¼›»è°±ã€‚下列站炚wƒ½æ˜¯å¯é ã€çœŸå®žçš„ã€?br />
Sun �Java 技术站�br />
Sun �Java 语言站点
˜q™æ˜¯ Sun çš?Java 语言ä¸È«™ã€‚作ä¸?Java 语言开发äh员,您会发现自己频繁地访问此站点。下列链接特别重要,特别是对新入行的 Java 语言开发äh员:

New to Java Center
New to Java Center
New to Java Center 存放了许多åó@序渐˜q›çš„ Java 技术资源链接。如果您刚接触这门语­a€åQŒè¿™æ˜¯ä¸€ä¸ªå¥½çš„è“v炏V€?
教程和代码库
Java Tutorial
˜q™é‡Œæœ‰å¤§åé¼Žé¼Žçš„ Java TutorialåQŒä»¥åŠå…³äº?Java 语言各个斚w¢åQˆä¾‹å¦?CollectionåQ‰çš„其他教程ã€?

IBM developerWorks

IBM çš?developerWorks
推销自己也许有些厚脸皮,ä½?developerWorks 是一™å¹å·¨å¤§çš„资源åQŒæ”¶å½•了大量 Java 语言工具和技术的教程和文章。其内容从初学者指南到学习˜q™é—¨è¯­è¨€åˆ°é«˜¾U§åƈ发性技术。可以根据主题搜索内容,然后æ ÒŽ®¾cÕdž‹‹¹è§ˆã€?br />
Apache Software Foundation

Apache Software Foundation
Apache 站点是许多可重用库(通用领域åQ‰å’Œå·¥å…·çš„主™åµï¼Œ˜q™äº›åº“和工具帮助 Java 开发äh员进行开发。这里的内容全都是开放源码,所以尽½Ž¡ä¸‹è½½æƒ³è¦çš„吧!许多极其‹¹è¡Œçš?Java 语言库和工具åQˆå¦‚ Struts、Ant å’?TomcatåQ‰éƒ½å§‹äºŽ Apache ™å¹ç›®ã€‚Jakarta 专区汇聚了大多数新兴çš?Java 语言材料ã€?br />
Eclipse.org

Eclipse
有几个好çš?Java 语言集成开发环境(IDEåQ‰ã€‚EclipseåQˆæ¥è‡?IBMåQ‰æ˜¯æœ€æ–°çš„ IDE 之一åQŒå®ƒå¾ˆå¿«æˆäØ“ Java 语言开发的首要 IDE。它完全是开源的åQŒè¿™æ„å‘³ç€å®ƒæ˜¯å…è´¹çš„。该站包含了学习如何有效使用 Eclipse 的各¿Uå‚考资料。这里还有关äº?Standard Widget ToolkitåQˆSWTåQ‰çš„信息åQŒSWT 是相对于 Swing 来说更加轻量¾U§çš„选择ã€?br />
Eclipse 插äšg中心å’?Eclipse 插äšg

Eclipse 插äšg中心 å’?Eclipse 插äšg
Eclipse åŸÞZºŽæ’äšg架构。事实上åQŒæ’件是 Eclipse çš?Java 语言开发组件。但有差不多上千个插ä»Óž¼Œä»?Web 开发的插äšg到在 Eclipse 环境中玩游戏的插件。这两个站点分类列出了大多数插äšgåQŒå¯ä»¥è¿›è¡Œæœç´¢ã€‚它们是很棒的资源。如果您惛_œ¨ Eclipse 开发环境中弄点æ–îC¸œè¥¿ï¼Œòq¸è¿çš„话有某个插件可能已¾lå®žçŽŽÍ¼Œä»Žè¿™ä¸¤ä¸ªç«™ç‚¹èƒ½æ‰¾åˆ°æƒ³è¦çš„æ’äšg。这两个站点都允许评论插ä»Óž¼Œ˜q™æ ·æ‚¨å°±å¯ä»¥çŸ¥é“哪些插äšg好,哪些值得一试ã€?br />
JUnit.org

JUnit.org
Junit æ˜?Java 语言中一个基本的单元‹¹‹è¯•框架。该站点包含äº?Junit 最新最‹‚’的版本åQŒå¤–加大量有å…Ïxµ‹è¯•(Java 语言或者其他语­a€çš„)各个层面上(针对桌面应用½E‹åºã€Web 应用½E‹åºã€J2EE 应用½E‹åº½{‰ï¼‰çš„其他资源。如果您æƒÏx‰¾‹¹‹è¯•资源åQŒè¿™é‡Œå°±æ˜¯æœ€ä½Œ™“v炏V€?

TheServerSide.com

TheServerSide.com
如果您要(或将è¦?从事服务器端 Java 语言的开发,此站ç‚ÒŽ˜¯ä¸€å¤„ä‹D­‘Œ™½»é‡çš„资源。您可以到这里找到有å…?JBoss、J2EE、LDAP、Struts 和大量其他主题的文章åQŒåƈ且都是完全可‹‚€ç´¢çš„。这些文章不仅仅是简单描˜q?Java 语言的特征或者支持的库。它们更˜q›ä¸€æ­¥åœ°æè¿°äº†åº“的新奇用法(如ä‹Éç”?Jakarta Velocity ä½œäØ“è§„åˆ™å¼•æ“ŽåQŒè€Œä¸æ˜¯æ¨¡æ¿å¼•擎)。它们也提供了有å…?Java 语言现状的连¾l­è¯„论(当前的一½‹‡æ–‡ç« æ˜¯ç”?Tim Bray 所写的 Java is boring åQ‰ã€‚该站点更好的通用功能之一是对 Java 语言工具和äñ”品(应用服务器等åQ‰çš„矩阵式比较ã€?

Bruce Eckel's MindView, Inc.

Bruce Eckel's MindView, Inc.
Eckel 写了几本 “用 …â€?˜q›è¡Œæ€è€ƒâ€?的书åQŒå†…容关äº?Java 语言、Python å’?C++ åQŒå½“我学ä¹?Java 语言æ—Óž¼Œä»–çš„ Thinking in Java å¯ÒŽˆ‘ž®¤å…¶æœ‰å¸®åŠ©ã€‚å®ƒå¾ˆå®žç”¨åÆˆåˆ‡ä¸­è¦å®³åQŒåœ¨â€œåœ¨ Java 语言环境中如何面向对象思考”方面具有卓识。您可以从此站点免费下蝲他所有书¾cçš„电子版。他也写了许多好文章åQŒåƈ且他把这些文章的链接都放åˆîCº†˜q™é‡ŒåQˆåŒ…括关äº?Jython、Java å’?.NET 比较½{‰å†…容的文章åQ‰ã€?br />
ONJava.com

ONJava.com
O'Reilley 历年来出版了一些有关编½E‹è¯­­a€å’Œå·¥å…ïLš„优秀书籍。他们的专注äº?Java 语言的网站也不错。它有些有关各种 Java 语言工具åQˆå¦‚ JDOM å’?HibernateåQ‰ã€Java òq›_°åQˆå¦‚ J2SE å’?J2EEåQ‰ä¸åŒé¢†åŸŸä¸åŒéƒ¨åˆ†çš„æ–‡ç« ã€‚全部都可以被检索到。他们有优秀的文章和教程。该站点按主题排列。例如有 Java å’?XML、Java Security、Wireless Java å’?Java SysAdmin。该站点也有åˆ?O'Reilley Learning Lab 的链接,在那里您能获得在¾U¿å‚考资料(Java 语言相关和其他的åQ‰ã€‚那些不是免费的åQŒä½†æ˜¯è®¸å¤šéƒ½é¢å‘大学认证。因此您可以以一¿Uå¾ˆæ–¹ä¾¿çš„æ–¹å¼æ¥å­¦ä¹ æŠ€èƒ½ï¼Œòq¶å¾—åˆîC¸€äº›è®¤è¯ã€?

java.net

java.net ½C‘ÖŒº
java.net ½C‘ÖŒºæœ‰å¤šä¸ªâ€œç¤¾åŒºâ€ï¼Œæœ‰ç‰¹å®šäºŽä¸»é¢˜çš„论坛和文章。例å¦?Java Desktop ½C‘ÖŒºæœ‰å„¾cÖM¸Ž Java 语言桌面开发相关的资料。Java Patterns ½C‘ÖŒºä½œäØ“ä¸€ä¸ªé—¨æˆøP¼Œä¹Ÿè®¸å¯ÒŽä¾?Java 语言的模式资源相当感兴趣。还有一ä¸?Java User Groups (JUG) ½C‘ÖŒºåQŒåœ¨é‚£é‡Œèƒ½æ‰¾åˆ°æœ‰å…›_ˆ›å»ºã€åŠ å…¥å’Œ½Ž¡ç†ä¸€ä¸?JUG 的信息ã€?




¾l“束è¯?br />
ä»ÖM½• “好的”、“关键性的â€?或è€?“重要的â€?参考资料列表都注定是不完整的,本文的列表也未能例外ã€?Java 语言的书¾cæ•°ç›®ä¼—多,当然åQŒä¸‡¾l´ç½‘也很庞大。除本文所列的参考资料之外,˜q˜æœ‰å¾ˆå¤šç”¨äºŽå­¦ä¹  Java 语言的参考资料。但如果您拥有了˜q™é‡Œæ‰€æåˆ°çš„æ‰€æœ‰ä¹¦¾cã€ç½‘站、文章或者教½E‹ï¼Œæ‚¨åº”当已¾læ‹¥æœ‰äº†ä¸€ä¸ªä‹Éæ‚¨è‰¯å¥½å¼€ç«¯åÆˆåŠ©æ‚¨ç™Õd ‚入室的实用宝库ã€?br />
最后,要成ä¸ÞZ¸€ä¸ªèƒ½åŠ›æ—¥å¢žå’Œé«˜æ•ˆçš?Java 语言开发äh员,æ–ÒŽ³•ž®±æ˜¯ç”¨å®ƒå·¥ä½œåQŒåŠ¨æ‰‹æ¥ž®è¯•。如果有一个教½E‹è¯¦¾l†ä»‹¾läº†æ‰€éœ€åˆ›å¾çš„èÊY件的每一部分åQŒæ‚¨å¾ˆå¯èƒ½åƈ没得到多ž®‘好处。有æ—Óž¼Œæ‚¨å¯èƒ½å¾—走自å·Þqš„路。在成功地尝试了一些新的东西之后,您可能想要写一½‹‡æ–‡ç« ã€æ•™½E‹æˆ–者一本书来分享您所学到的ã€?/font>

]]>
JSP生成静态页实践及其设计思想http://www.aygfsteel.com/kim/archive/2007/01/10/92858.html大熊�/dc:creator>大熊�/author>Wed, 10 Jan 2007 03:38:00 GMThttp://www.aygfsteel.com/kim/archive/2007/01/10/92858.htmlhttp://www.aygfsteel.com/kim/comments/92858.htmlhttp://www.aygfsteel.com/kim/archive/2007/01/10/92858.html#Feedback1http://www.aygfsteel.com/kim/comments/commentRss/92858.htmlhttp://www.aygfsteel.com/kim/services/trackbacks/92858.html 转:

引子åQ?br />æˆ‘ä»¬ä»¥ä¸¤ä¸ªå¤§åž‹ç½‘ç«™äØ“ä¾‹ä½œæ¯”è¾ƒåQ?br />51job和智联招聘(先声明我不是ä¸ÞZ»–们作òq¿å‘ŠåQŒä»…ä»¥ä»–ä»¬äØ“ä¾‹ä½œæŠ€æœ¯ä¸Šçš„æ¯”è¾ƒï¼‰
51job采用的是比较“先˜q›â€çš„php技术,而智联用的是比较落后的asp.但我们可能会明显的感觉到51jobçš„ååº”é€Ÿåº¦ç›¸æ¯”æ™ø™”招聘实在是太慢了åQŒäؓ什么会˜q™æ ·åQŸç»†å¿ƒçš„人可能会察觉åˆîCº†ã€‚智联虽然用的是asp,但他采用了另一¿Uæ›´å·§å¦™çš„æŠ€æœ?-asp生成静态页技术。所有的动态页基本上都转换成了html静态页åQŒä¸ç”¨è®¿é—®æ•°æ®åº“åQŒå½“然反应快了ã€?br />下面我们讨论一下jsp怎么转换成html??
首先要做一个模æÑ€‚后¾~€ä¸é™åQŒä½†ä¸€èˆ¬éƒ½ç”?.template例子
<html>
<head>
<title>#title#</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<LINK href="../css.css" rel=stylesheet type=text/css>
</head>

<body>
<P align="center">
#title#<BR><BR><BR>
作者:#author#<BR><BR>
<BR>
#content#<BR><BR><BR><BR>
</P>
</body>
</html>
做一个处理模板的¾cÀLˆ–者jspæ–‡äšgã€?䏸™¯´æ˜Žé—®é¢˜æˆ‘们从½Ž€å•入手以一个jspæ–‡äšgä¸ÞZ¾‹)
?filePath = request.getRealPath("/")+"WEB-INF/templates/template.htm";
?out.print(filePath);
?String templateContent="";
?FileInputStream fileinputstream = new FileInputStream(filePath);//è¯Õd–模块文äšg
?int lenght = fileinputstream.available();
?byte bytes[] = new byte[lenght];
?fileinputstream.read(bytes);
?fileinputstream.close();
?templateContent = new String(bytes);
?out.print("以下是模板内容:<br>"+templateContent+"<br> 以下是置换以后的html内容<br><hr>");
?templateContent=templateContent.replaceAll("#title#",title);
?templateContent=templateContent.replaceAll("#author#",editer);//替换掉模块中相应的地�br />?templateContent=templateContent.replaceAll("#content#",content);
?// æ ÒŽ®æ—‰™—´å¾—文件名
?Calendar calendar = Calendar.getInstance();
?String fileame = String.valueOf(calendar.getTimeInMillis()) +".html";
?fileame = request.getRealPath("/")+fileame;//生成的htmlæ–‡äšg保存路径

?out.print(templateContent);
?FileOutputStream fileoutputstream = new FileOutputStream(fileame);//建立文äšg输出‹¹?br />?byte tag_bytes[] = templateContent.getBytes();
?fileoutputstream.write(tag_bytes);
?fileoutputstream.close();
嗯,核心技术就是这样了åQŒå¦‚果大家要求的性能更高åQŒå¯ä»¥æ”¹ç”¨freemarker做模æÑ€‚freemarkerçš„ä‹É用方法可以参阅我的另一½‹‡æ–‡ç« ã€ŠFreemarker 模板工具的作用及使用ã€?/font>
转自JavaThink

]]>
åŸÞZºŽJavaçš„Web应用开发规èŒ?/title><link>http://www.aygfsteel.com/kim/archive/2007/01/10/92856.html</link><dc:creator>大熊çŒ?/dc:creator><author>大熊çŒ?/author><pubDate>Wed, 10 Jan 2007 03:30:00 GMT</pubDate><guid>http://www.aygfsteel.com/kim/archive/2007/01/10/92856.html</guid><wfw:comment>http://www.aygfsteel.com/kim/comments/92856.html</wfw:comment><comments>http://www.aygfsteel.com/kim/archive/2007/01/10/92856.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kim/comments/commentRss/92856.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kim/services/trackbacks/92856.html</trackback:ping><description><![CDATA[ <span id="wmqeeuq" class="tpc_content"> <font size="2">转:<br /><br />1 前言<br /> ä¸ÞZº†ä½¿èÊY件开发过½E‹æœ‰ç« å¯å¾ªï¼Œä¿è¯è½¯äšg质量åQŒåŠ å¼ºå¼€å‘ç®¡ç†ã€?<br /><br />2 开发管ç?br /> ™å¹ç›®˜q›åº¦å‘¨æŠ¥è¡¨æ ¼å¦‚下åQ?br /> ™å¹ç›®¾~–号åQ?<br /> 汇报人: <br /> 汇报日期åQ?<br /> ™å¹ç›®˜q›åº¦è¯¦ç»†æè¿°åQ?<br /> 其他问题åQ?<br /><br />3 ™å¹ç›®å‘¨æœŸ<br /> 叔R¡¹ç›®å¼€å‘周期分ä¸ÞZ»¥ä¸‹å‡ ä¸ªæ­¥éª¤ï¼š<br /> 步骤 说明 参与角色 生成文档或程序(æ‰?å·äØ“å¯é€‰ï¼‰<br /> 可行性分æž?寚w¡¹ç›®çš„æŠ€æœ¯ï¼ŒåŠŸèƒ½éœ€æ±‚å’Œå¸‚åœº˜q›è¡Œè°ƒç ”和初步分析,¼‹®å®šæ˜¯å¦éœ€è¦ç«‹™å¹å¼€å‘ã€?部门ä¸È®¡æ ¸å¿ƒæŠ€æœ¯å‘˜ 可行性分析报å‘?技术调研报å‘? 立项 正式立项åQŒç”±éƒ¨é—¨ä¸È®¡æŒ‡å®š™å¹ç›®¾lç†åQŒé¡¹ç›®ç»ç†åˆ¶å®šåˆæ­¥è®¡åˆ’。初步计划包括设计和开发时间的初步估算ã€?部门ä¸È®¡æ ¸å¿ƒæŠ€æœ¯å‘˜ ™å¹ç›®åˆæ­¥è®¡åˆ’ 需求分æž?寚w¡¹ç›®è¿›è¡Œè¯¦¾l†çš„需求分析,¾~–写需求分析文档。对于B/S¾l“构软äšg¾pȝ»Ÿéœ€è¦åˆ¶ä½œé™æ€æ¼”½Cºé¡µé¢ã€‚需求分析文档和静态演½Cºé¡µé¢éœ€è¦é€šè¿‡éƒ¨é—¨ä¸È®¡å®¡æ‰¹æ‰èƒ½å¤Ÿè¿›è¡Œåˆ°ä¸‹ä¸€ä¸ªæ­¥éª?™å¹ç›®¾lç†™å¹ç›®æ ¸å¿ƒž®ç»„ 需求分析文档静态演½Cºé¡µé¢é¡¹ç›®è®¡åˆ’修订版本详¾l†è®¾è®?æ ÒŽ®éœ€æ±‚分析对™å¹ç›®˜q›è¡Œè¯¦ç»†è®¾è®¡ã€‚详¾l†è®¾è®¡ä»¥åŽï¼Œ™å¹ç›®¾lç†åŒéƒ¨é—¨ä¸»½Ž¡ä¸€èµähŒ‡å®šé¡¹ç›®å°¾l„开发成员ã€?™å¹ç›®¾lç†™å¹ç›®æ ¸å¿ƒž®ç»„ 详细设计文档™å¹ç›®è®¡åˆ’¼‹®å®šç‰ˆæœ¬å¼€å?æ ÒŽ®è®¾è®¡å¼€å‘项目,ç”Þq¾Žå·¥å¯¹æ“ä½œç•Œé¢˜q›è¡Œ¾ŸŽåŒ–ã€?™å¹ç›®¾lç†™å¹ç›®å¼€å‘员¾ŸŽå·¥ ™å¹ç›®è®¡åˆ’修订版本*‹¹‹è¯• ™å¹ç›®¾lç†æäº¤‹¹‹è¯•甌™¯·åQŒç”±‹¹‹è¯•部门寚w¡¹ç›®è¿›è¡Œæµ‹è¯•。项目小¾l„配合测试部门修改èÊY件中的错误ã€?™å¹ç›®¾lç†™å¹ç›®å¼€å‘员‹¹‹è¯•éƒ?‹¹‹è¯•甌™¯·‹¹‹è¯•计划‹¹‹è¯•报告 ™å¹ç›®éªŒæ”¶ ™å¹ç›®éªŒæ”¶å½’æ¡£ 部门ä¸È®¡™å¹ç›®¾lç† ™å¹ç›®æ‰€æœ‰æ–‡æ¡£å’Œ½E‹åº<br /><br />4 命名规范<br /> 4.1 ™å¹ç›®¾~–号命名规范<br /> 待完å–?br /><br />4.2 文档命名规范<br /> 待完å–?br /><br />4.3 jsp/html命名规范<br /> jsp与htmlæ–‡äšg名全部小写,òq‰™µå¾ªå¦‚下的规范åQ?br /><br />数据/内容昄¡¤º™å?br /> 名词åQŒå¤šä¸ªå•词用下划¾U¿åˆ†éš”,要求能说明显½Cºå†…容的信息åQŒäؓ避免冲突åQŒå¯åŠ ä¸Š “_list”。例如:<br />new_message.html æˆ?my_file_list.jsp<br /><br />操作处理™å?br /> 命名格式åQšåè¯_下划¾U¿_动词åQŒä¾‹å¦‚:file_delete.jspã€?br /><br />含frame™åµé¢<br /> <frameset>ä¸?lt;frame>çš„name属性命名的格式是①xxx._â‘¡xxx_â‘¢xxx <br /> ①xxx部分用来标识当前™åµé¢éš¶å±žäºŽæ•´ä¸ªç³»¾lŸä¸­çš„哪一功能模块ã€?<br /> 如:属于ebwebmail则被表示为ebwebmailåQŒå…¶å®ƒæƒ…况依‹Æ¡ç±»æŽ¨ã€?<br /> ②xxx部分标识当前™åµé¢æ‰€è¦å®Œæˆçš„功能ã€?br /> 如:完成用户ç™Õd½•çš„åŠŸèƒ½åˆ™è¢«æ ‡è¯†äØ“loginåQŒå…¶å®ƒæƒ…况依‹Æ¡ç±»æŽ¨ã€?<br /> ③xxx部分用来用来表示™åµé¢åœ¨æµè§ˆå™¨½H—口所处的位置ã€?<br /> 处于‹¹è§ˆå™¨çª—口的™å‰™ƒ¨åˆ™æ ‡è¯†äØ“topåQŒå…¶å®ƒæƒ…况依‹Æ¡ç±»æŽ¨ã€?br /> 例如åQšebwebmail_inbox_top.jsp<br /><br /><frame> src属性相应的文äšg名根据情况徏议在原命名规范上用下划线加上所处窗口的位置ã€?br /><br />javascript脚本æ–ÒŽ³•<br /> 脚本函数都以①xxx_â‘¡xxx的方式命名ã€?br /> ①xxx对应™åµé¢éš¶å±žçš„æ¨¡å—ã€?br /> ②xxx表示函数所要实现的功能(动宾¾l“æž„)åQŒå¤šä¸ªå•词用下划¾U¿è¿žæŽ¥ã€?br /> 例如åQšebwebmail_send_mail()<br /><br />模块通用的脚本函数必™å»é›†åˆäºŽä¸€ä¸ªjsæ–‡äšg中,在页面上通过<script language=”javascriptâ€?src=”urlâ€?gt;</script>形式导入。jsæ–‡äšg名命名ä‹É用模块名åQŒä¾‹å¦‚:ebwebmail.jsã€?br /><br />如果™å¹ç›®å·²ç»æä¾›äº†å…¬å…±js脚本åQŒåˆ™ä¼˜å…ˆä½¿ç”¨å…¬å…±js脚本中提供的函数ã€?br /><br />所有定义方法的<script>元素定义åœ?lt;head></head>中或</body>后ã€?br /><br />javascript脚本内部变量与参æ•?br /> 单词之间用下划线分隔且全部小写,例如åQ?var file_sizeã€?br /><br /><form>表单name属æ€?br /> ¾lŸä¸€ä»¥â€œform_”开å¤ß_¼Œå…¶åŽåŠ è¯¥è¡¨å•æ‰€éœ€æ”‰™›†çš„信息的作用或动作,例如åQšform_file_upload æˆ?form_send_mailã€?br /><br />表单elements<br /> 表单element的名¿UîC»¥element需攉™›†çš„信息标½Cºå‘½åï¼Œå•词之间使用下划¾U¿åˆ†éš”且全部ž®å†™åQŒä¾‹å¦‚:<br /><br /> <input type=”textâ€?name=”usernameâ€?gt;<br /> <input type=”radioâ€?name=”file_typeâ€?gt;<br /> <textarea name=”contentâ€?rows=â€?â€?cols=â€?0â€?gt; <br /><br />cookie命名<br /> 命名格式åQšæ¨¡å—å_存储信息名词(多个单词用下划线分隔) åQŒå…¨éƒ¨å¤§å†™ï¼Œä¾‹å¦‚åQšEBWEBMAIL_SORT_TYPEã€?br /><br />window.open中name参数的命å?br /> javascriptçš„window.openæ–ÒŽ³•中有一个name的参敎ͼŒ‹¹è§ˆå™¨çº¦å®šåŒæ ïLš„名字的窗口只能打开一个,如果½E‹åºé—´åå­—é‡å¤å°†ç›æ€º’冲突。如果不限制打开½H—口敎ͼŒå¯ä»¥æŒ‡å®šâ€˜â€™æˆ–“”(不是nullåQ‰ï¼Œå¦åˆ™éœ€è¦åŠ ä¸Šæ¨¡å—ååQŒä¾‹å¦‚ebwebmail_viewmailã€?br /><br />4.4 数据库命名规èŒ?br /> 数据库表命名均遵循以下规范:<br /> 模块名_存储信息名词(多个单词用下划线分隔)åQŒå…¨éƒ¨å°å†™ï¼Œä¾‹å¦‚åQšebwebmail_messageã€?br /><br />数据库字ŒDµå‘½åéµå¾ªä»¥ä¸‹è§„范:<br /> 存储信息名词(多个单词用下划线分隔)åQŒå…¨éƒ¨å°å†™ï¼Œä¾‹å¦‚åQšmessage_idã€?br /><br />5 文档规范<br /><br /> 1. ¾~–写文档目前主要使用的工å…äh˜¯WordåQˆé¡¹ç›®è®¡åˆ’文档例外,需要ä‹É用Project制作åQ‰ï¼Œè¾…助使用的工å…ähœ‰VisioåQŒPowerPointåQŒERWin½{‰ã€?br /><br />2. 文档务必保持ŒDµè½æ ¼å¼æ•´é½åQŒæ–‡å­—字体,颜色åQŒå¤§ž®ç»Ÿä¸€ã€?br /><br />3. 如果需要摘引html™åµé¢ä¸­çš„内容åQŒä¸èƒ½ç›´æŽ¥ä»Žhtml中粘贴过来(会在word文档中留下html格式åQ‰ï¼Œè€Œå¿…™åÕd…ˆåŽ»é™¤æ ¼å¼åQŒä¾‹å¦‚:先粘贴到notepad中ã€?br /><br />4. åŠ¡å¿…æ³¨æ„ä¸­è‹±æ–‡æ ‡ç‚¹ç¬¦åøP¼Œæ–‡æ¡£æ­£æ–‡ä¸€æ¦‚ä‹É用中文标点符受÷€?br /><br />5. 如果需要在文档中插图,不要使用word自带的绘囑ַ¥å…—÷€‚可以选择使用PowerPoint或visio。ä‹É用PowerPointåQŒé€‰æ‹©â€œæ’å…¥â€?>“对象â€?>“Microsoft PowerPoint òqȝ¯ç‰‡â€ã€‚ä‹É用visioåQŒéœ€è¦å¦å¤–徏立visio文档åQŒç»˜åˆ¶å®Œä»¥åŽ¾_˜è„“到word中ã€?br /><br />6. 数据建模使用ERwin工具åQŒæ–‡æ¡£ä¸­ä»…需要粘贴数据模型的逻辑视图åQˆlogical viewåQ‰ï¼Œå¦å¤–˜q˜è¦é™„上表结构描˜q°ã€?br /><br />7. 修改他äh文档务必使用修订模式åQŒä»¥ä¾¿ä¿ç•™å¤‡ä¿®æ”¹çš„内宏V€‚ä‹É用修订模式,选择“工具â€?>“修订â€?>“突出显½CÞZ¿®è®¢â€ï¼Œå‹¾ä¸Šâ€œç¼–辑时标记修订”ã€?br /><br />附:一些模ç‰?br /> ü Java¾c»è®¾è®?class documentation)<br /> 声明åQ?br /><br />描述åQ?br /><br />属性:1. property_name<br /> 声明 <br /> 说明 <br /><br />æ–ÒŽ³•åQ?1. method_name<br /> 声明 <br /> 说明 <br /> 参数 <br /> ˜q”回å€?<br /> 异常 <br /><br />注:<br /> æ–ÒŽ³•声明中,如果遇到重蝲的方法,可以使用“|”表½Cºå¯ä»¥æŽ¥å—不同类型的参数åQŒä¾‹å¦‚:“String value | int value”;可以使用“[]”表½Cºå¯é€‰çš„参数åQŒä¾‹å¦‚:“Object message[,Throwable t]â€?br /><br />Servlet设计(servlet document)<br /> ¾cÕd 接受参数列表 描述<br /><br />数据表设è®?data modeling)<br /> 表名åQšsome_table<br /><br />说明åQšdescription<br /><br />表结构:<br /> 字段å?¾cÕdž‹ 说明<br /><br />6 代码规范<br /> 6.1 Java源代码规èŒ?br /> 6.1.1 命名<br /> u Package 的命å?br /> Package 的名字应该都是由一个小写单词组成,例如åQšnet.ebseries.modulesã€?br /> 此外åQŒå¯¹äºŽåŒ…名我们做如下¾U¦å®šåQ?br /> 1. 工具函数¾cÕdŒ…名前¾~€ä¸?util<br /> 2. Servlet¾cÕdŒ…名前¾~€ä¸?servlet<br /> 3. test case¾cÕdŒ…名前¾~€ä¸?test<br /><br />Class 的命å?br /> Class 的名字必™åȝ”±å¤§å†™å­—母开头而其他字母都ž®å†™çš„单词组成,例如åQšDataFile或InfoParserã€?br /><br />Class 变量的命å?br /> 变量的名字必™åȝ”¨ä¸€ä¸ªå°å†™å­—母开头。后面的单词用大写字母开å¤ß_¼Œä¾‹å¦‚åQšdebug æˆ?inputFileSizeã€?br /><br />Static Final 变量的命å?br /> Static Final 变量的名字应该都大写åQŒåƈ且指出完整含义,例如åQšMAX_UPLOAD_FILE_SIZE=1024ã€?br /><br />参数的命å?br /> 参数的名字必™åÕd’Œå˜é‡çš„命名规范一致ã€?br /><br />数组的命å?br /> 数组应该æ€ÀL˜¯ç”¨ä¸‹é¢çš„æ–¹å¼æ¥å‘½åï¼š<br /> byte[] buffer;<br /> 而不是:<br /> byte buffer[];<br /><br />æ–ÒŽ³•的参æ•?br /> 使用有意义的参数命名åQŒå¦‚果可能的话,使用和要赋值的字段一æ ïLš„名字åQ?br /><br /> SetCounter(int size)<br /> {<br /> this.size = size;<br /> } <br /><br />6.1.2 代码格式<br /> 文äšg头声æ˜?br /> 源文件的头部需要一个historyŒDµï¼Œå¯¹äºŽæ¯æ¬¡å¯ÒŽºæ–‡äšg的重大改动,都需要在historyŒDµä¸­æ³¨æ˜Žã€‚该ŒDµå®šä¹‰åœ¨package和  import之间åQŒä¾‹å¦‚:<br /><br /> åQ?****************************************************<br /> * HISTORY<br /> * <br /> * 2002/01/29 Biz 创徏文äšg<br /> * <br /> * 2002/02/19 kevin 增加新功èƒ?br /> *<br /> *******************************************************/ <br /><br />import™åºåº<br /> import包按一下顺序:<br /> 1. jdk标准åŒ?br /> 2. java扩展包(例如servletåQŒjavamailåQŒjce½{‰ï¼‰<br /> 3. 使用的外部库的包åQˆä¾‹å¦‚xml parseråQ?br /> 4. 使用的项目的公共åŒ?br /> 5. 使用的模块的其他åŒ?br /> 每一¾c»import后面加一个换行ã€?br /><br />例如åQ?br /> import java.io.*;<br /> import java.util.*;<br /><br />import javax.servlet.*;<br /> import javax.mail.*;<br /><br />import org.apache.xml.*;<br /><br />import net.ebseries.*;<br /> import net.ebseries.util.*;<br /><br />import net.ebseries.ebwebmail.*;<br /><br /><br />代码块书写格å¼?br /> 可以选择以下ä»ÀL„ä¸€¿Uä»£ç å—的书写方式:<br /><br /> if (true){<br /> //body<br /> }<br /><br />if (true)<br /> {<br /> //body<br /> }<br /><br /><br />廸™®®ä½¿ç”¨½W¬äºŒ¿Uä¹¦å†™æ–¹å¼ã€‚如果是修改他äh的代码,必须使用代码原来的书写方式ã€?br /><br />对于代码块过长,­‘…过1屏以上,}后面要说明属于那个代码块åQŒä¾‹å¦‚:<br /><br />if (i > 100)<br /> {<br /> //too many lines more than one screen<br /> }// if (i > 100) <br /><br />关于¾~©è¿›<br /> ¾~©è¿›ä½¿ç”¨4个连¾l­ç©ºæ û|¼Œä¸è¦åœ¨æºæ–‡äšg中保存tab字符åQ?è¯äh³¨æ„è°ƒæ•´æ‰€ç”¨çš„IDE工具åQŒæ‰“å¼€ž®†tab转换为空格功能ã€?br /><br />™åµå®½<br /> ™åµå®½åº”该讄¡½®ä¸?0字符. 源代码一般不会超˜q‡è¿™ä¸ªå®½åº? òq¶å¯¼è‡´æ— æ³•完整显½C? 但这一讄¡½®ä¹Ÿå¯ä»¥çµ‹z»è°ƒæ•? 在ä“Q何情况下, ­‘…长的语句应该在一个逗号或者一个操作符后折è¡? 一条语句折行后, 应该比原来的语句再羃˜q?个空根{€?br /><br />操作½W?br /> 操作½W¦å·¦å›_„用一个空格分隔ã€?br /> 例如åQ?br /> int a = b;<br /> if (a > 0);<br /><br />SQL语句<br /> 代码中书写的sql语句要求sql关键字全部大写,表名和字ŒDµåž®å†™ã€‚例如:<br /> SELECT user_id, name FROM account WHERE user_id > ? AND depart = ? ORDER BY name<br /><br />¾cÕd’Œæ–ÒŽ³•定义<br /> ¾cÕd®šä¹‰æˆ–æ–ÒŽ³•定义˜q‡é•¿éœ€è¦æ¢è¡Œä¹¦å†™ï¼Œä¾‹å¦‚åQ?br /><br />public class CounterSet<br /> extends Observable<br /> implements Cloneable<br /><br />private PortletSet getPortlets( Portlets portlets, <br /> RunData rundata, <br /> boolean application, <br /> boolean applicationsOnly )<br /> {<br /> }<br /><br /><br />6.1.3 注释<br /> public å’?protected的成员变量和æ–ÒŽ³•必须写javadoc注释。超˜q?句以上的注释使用中文书写。对于代码多äº?0行的privateæ–ÒŽ³•也要写javadoc注释ã€?br /><br />对于代码中的逻辑分支或åó@环条仉™œ€è¦ä¹¦å†™æ³¨é‡Šï¼Œä¾‹å¦‚åQ?br /><br />if (some condition)<br /> {<br /> //½W¦åˆæŸä¸ªæ¡äšgåQŒåº”该这样处ç?br /> }<br /> else<br /> {<br /> //否则应该那样处理<br /> } <br /><br />6.1.4 å…¶ä»–<br /> 关于属æ€?br /> ¾cÖM¸­çš„å±žæ€§ä¸èƒ½å®šä¹‰äØ“public变量直接存取åQŒè€Œæ˜¯å®šä¹‰æˆprotect变量òq¶ç¼–写get/setæ–ÒŽ³•åQŒä¾‹å¦‚:<br /><br /> protect String myName;<br /><br />public String getMyName()<br /> {<br /> return myName;<br /> }<br /><br />public void setMyName(String myName)<br /> {<br /> this.myName=myName;<br /> }<br /><br /><br />6.2 jsp/html代码规范<br /> jsp/html描述注释<br /> jsp/html™åµé¢™å‰™ƒ¨å¿…须存在一个基本描˜q°æ³¨é‡Šï¼ŒåŒ…含功能描述、参数列表和历史修改信息åQŒä¾‹å¦‚:<br /><br /><%--<br /> /**************************************************<br /> *<br /> * NAME : file_download.jsp<br /> *<br /> * PURPOSE : 下蝲文äšg提示<br /> *<br /> * PARAMETERS :<br /> * file_id - æ–‡äšgIDå?br /> * force ?C 是否强制下蝲<br /> *<br /> * HISTORY<br /> *<br /> * 2002/04/05 Hafele 创徏文äšg<br /> *<br /> * 2002/06/07 tmp 增加强制下在功能<br /> *<br /> *************************************************/<br /> --%> <br /><br />jsp头格å¼?br /> jsp头部一般需要遵循以下格式:<br /><br /> <%@ page contentType="text/html;charset=gb2312" %><br /> <%@ page import="java.io.*" %> // jdk标准åŒ?br /> <%@ page import="javax.mail.*" %> // java扩展åŒ?br /> <%@ page import="org.apache.xml.*" %> //使用的外部库的包<br /> <%@ page import="com.sunrise..*" %> //使用的项目的公共åŒ?br /> <%@ page import=" com.sunrise.applications.*" %> //使用的模块的其他åŒ?br /> <%@ include file="some.jsp" %> //includeå…¶ä»–çš„jsp<br /> <%<br /> response.setHeader("Pragma","No-cache"); <br /> response.setHeader("Cache-Control","no-cache");<br /> response.setHeader("Expires","0");<br /> %> //一般jsp都需要防止缓å­?<br /><br />html格式<br /> 1. html头一般需要遵循以下格式:<br /><br /> <head><br /> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"><br /> <title>some title</title><br /> <link rel="stylesheet" href="some.css" type="text/css"><br /> <script language="javascript"><br /> //some javascript<br /> </script><br /> </head> <br /><br />注意åQšå¿…™åÀLŒ‡å®šä¸€ä¸ªæœ‰æ„ä¹‰çš?lt;title>åQŒä¸¥¼›å‡ºçŽ°â€œUntitled”或“未命名”之¾cȝš„<title>ã€?br /><br />2. 所有html标签使用ž®å†™<br /><br />3. html™åµé¢ä¸€èˆ¬éœ€è¦è®¾¾|®ä¸€ä¸ªèƒŒæ™¯è‰²åQˆä¸€èˆ¬æ˜¯#FFFFFFåQ‰ã€?br /><br />html语法校验<br /> 所有的jsp/html™åµé¢éœ€è¦èƒ½å¤Ÿä‹É用DreamWeaver正确打开åQˆå³html语法正确åQŒæ²¡æœ‰é”™è¯¯çš„æ ‡è®°åQ‰ã€?br /><br />注释<br /> 一般不使用html注释åQŒé™¤éžæ˜¯æœ‰å¿…要让最¾lˆç”¨æˆïLœ‹åˆ°çš„内容。对于包含JSP代码的html块,必须使用JSP注释。对于没有必要的注释åQŒåœ¨å‘行版本中必™åȝ§»é™¤ã€?br /><br />form属于域的maxlength<br /> 对于text¾cÕdž‹çš„输入域åQŒå¿…™åÀL ¹æ®æ•°æ®åº“字段的长度设¾|®ç›¸åº”çš„maxlengthåQŒä¾‹å¦‚数据库¾cÕdž‹æ˜¯VARCHAR(64)åQŒé‚£ä¹ˆmaxlengthæ˜?2åQˆå› ä¸ÞZ¸­æ–‡æµè§ˆå™¨å¯¹äºŽä¸­æ–‡ä¹Ÿè®¤ä¸ºæ˜¯ä¸€ä¸ªå­—½W¦ï¼‰ã€?br /><br />6.3 其他规范<br /> 对于IDEçš„ä‹Éç”?br /> 目前暂不限制开发工å…ïLš„使用åQŒä½†æ˜¯æœ€åŽæäº¤çš„代码必须不依赖ä“Q何IDEåQŒè€Œéœ€è¦å¯ä»¥ä‹É用ant完成所有的¾~–译工作。一般提交的代码目录格式如下åQ?br /><br />|_diståQˆå­˜æ”¾è¾“出的文äšgclassæ–‡äšgåQ?br /> |_libåQˆä‹É用的库)<br /> |_srcåQˆæºä»£ç åQ?br /> |_docsåQˆæ–‡æ¡£ï¼‰<br /> |_wwwrootåQˆé¡µé¢æ–‡ä»Óž¼‰<br /> |_build.xmlåQˆantçš„buildæ–‡äšgåQ?br /> |_changes.logåQˆä»£ç ç‰ˆæœ¬å’Œä¿®æ”¹çš„æ—¥å¿—) <br /><br />限制sessionçš„ä‹Éç”?br /> 在代码中使用session需要听取项目经理的意见åQŒé¡¹ç›®ç»ç†éœ€è¦åœ¨è®¾è®¡æ–‡æ¡£ä¸­ç™»è®°é¡¹ç›®ä¸­æ‰€æœ‰ä‹É用到的session的名字和作用ã€?br /><br />限制外部包的使用<br /> 开发员如果需要ä‹É用一个外部包需要听取项目经理的意见。在™å¹ç›®¾lç†æ‰¹å‡†ä»¥å‰åQŒä¸¥¼›æ“…自ä‹É用一个外部的包ã€?/font> </span> <img src ="http://www.aygfsteel.com/kim/aggbug/92856.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kim/" target="_blank">大熊çŒ?/a> 2007-01-10 11:30 <a href="http://www.aygfsteel.com/kim/archive/2007/01/10/92856.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP面试åQˆç»å…¸ï¼‰ 转帖http://www.aygfsteel.com/kim/archive/2006/11/13/80835.html大熊çŒ?/dc:creator>大熊çŒ?/author>Mon, 13 Nov 2006 02:47:00 GMThttp://www.aygfsteel.com/kim/archive/2006/11/13/80835.htmlhttp://www.aygfsteel.com/kim/comments/80835.htmlhttp://www.aygfsteel.com/kim/archive/2006/11/13/80835.html#Feedback0http://www.aygfsteel.com/kim/comments/commentRss/80835.htmlhttp://www.aygfsteel.com/kim/services/trackbacks/80835.html 在JSP中可以ä‹É用如下方式包含纯HTMLåQšÂ?br /> <!--#include file="data.inc"--> 
 但是如果data.inc中包含JSP CODE åQŒæˆ‘们可以ä‹É用: 
 <%@include file="data.inc"%> 


 2、如何执行一个线½E‹å®‰å…¨çš„JSP? 
 只需增加如下指ä×o 
 <%@ page isThreadSafe="false" %> 


 3、JSP如何处理HTML FORM中的数据? 
 通过内置的request对象卛_¯åQŒå¦‚下: 
 <% 
 String item = request.getParameter("item"); 
 int howMany = new Integer(request.getParameter("units")).intValue(); 
 %> 


 4、在JSP如何包含一个静态文� 
 静态包含如下:<%@ include file="copyright.html" %> 
 动态包含如下:<jsp:include page="copyright.html" flush="true"/> 


 5、在JSP中如何ä‹É用注é‡? 
 主要有四中方法: 
 1�lt;%-- 与�-%> 
 2�/ 
 3�**�*/ 
 4�lt;!--�-> 


 6、在JSP中如何执行浏览重定向? 
 使用如下方式卛_¯åQšresponse.sendRedirect("http://ybwen.home.chinaren.com/index.html"); 
 也能物理地改变HTTP HEADER属性,如下åQšÂ?br /> <% 
 response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); 
 String newLocn="/newpath/index.html"; 
 response.setHeader("Location",newLocn); 
 %> 


 7、如何防止在JSP或SERVLET中的输出不被BROWSER保存在CACHE� 
 把如下脚本加入到JSPæ–‡äšg的开始即可: 
 <% 
 response.setHeader("Cache-Control","no-store"); //HTTP 1.1 
 response.setHeader("Pragma","no-cache"); //HTTP 1.0 
 response.setDateHeader ("Expires", 0); //prevents caching at the proxy server 
 %> 


 8、在JSP中如何设¾|®COOKIE? 
 COOKIE是作为HTTP HEADER的一部分被发送的åQŒå¦‚下方法即可设¾|®ï¼šÂ 
 <% 
 Cookie mycookie = new Cookie("aName","aValue"); 
 response.addCookie(mycookie); 
 %> 


 9、在JSP中如何删除一个COOKIE? 
 <% 
 Cookie killMyCookie = new Cookie("mycookie", null); 
 killMyCookie.setMaxAge(0); 
 killMyCookie.setPath("/"); 
 response.addCookie(killMyCookie); 
 %> 


 10、在一个JSP的请求处理中如何停止JSP的执行�br /> 如下例: 
 <% 
 if (request.getParameter("wen") != null) { 
 // do something 
 } else { 
 return; 
 } 
 %> 


 11、在JSP中如何定义方法Â?br /> 你可以定义方法,但是你不能直接访问JSP的内¾|®å¯¹è±¡ï¼Œè€Œæ˜¯é€šè¿‡å‚数的方法传递。如下: 
 <%! 
 public String howBadFrom(HttpServletRequest req) { 
 HttpSession ses = req.getSession(); 
 ... 
 return req.getRemoteHost(); 
 } 
 %> 
 <% 
 out.print("in general,lao lee is not baddie "); 
 %> 
 <%= howBadFrom(request) %> 


 12、如果BROWSER已关闭了COOKIESåQŒåœ¨JSP中我如何打开SESSION来跟ítªÂ?br /> 使用URL重写卛_¯åQŒå¦‚下: 
 hello1.jsp 
 <%@ page session="true" %> 
 <% 
 Integer num = new Integer(100); 
 session.putValue("num",num); 
 String url =response.encodeURL("hello2.jsp"); 
 %> 
 <a href=<%=url%>>hello2.jsp</a> 

 hello2.jsp 
 <%@ page session="true" %> 
 <% 
 Integer i= (Integer )session.getValue("num"); 
 out.println("Num value in session is "+i.intValue()); 
 %> 


 13、在JSP中能发送EMAIL吗Â?br /> 可以使用SUN的专用包åQšsun.net.smtp包。如下脚本ä‹É用SmtpClient¾cÕd‘送EMAIL。Â?br /> <%@ page import="sun.net.smtp.SmtpClient, java.io.*" %> 
 <% 
 String from="ybwen@sina.com"; 
 String to="hewenjun@yeah.net, lei@who.com.cn"; 
 try{ 
 SmtpClient client = new SmtpClient("mail.xxxxx.xxx"); 
 client.from(from); 
 client.to(to); 
 PrintStream message = client.startMessage(); 
 message.println("To: " + to); 
 message.println("Subject: Sending email from JSP!"); 
 message.println("This was sent from a JSP page!"); 
 message.println(); 
 message.println("Cool! :-)"); 
 message.println(); 
 message.println("Good Boy"); 
 message.println("Im in genius.com"); 
 message.println(); 
 client.closeServer(); 
 } 
 catch (IOException e){ 
 System.out.println("ERROR SENDING EMAIL:"+e); 
 } 
 %> 


 14、在SERVLET中我能调用一个JSP错误™åµå— 
 当然没问题,如下展示了如何在一个SERVLET控制逻辑单元内调用一个JSP错误™åµé¢ã€‚Â?br /> protected void sendErrorRedirect(HttpServletRequest request, 
 HttpServletResponse response, String errorPageURL, 
 Throwable e) 
 throws ServletException, IOException { 
 request.setAttribute ("javax.servlet.jsp.jspException", e); 
 getServletConfig().getServletContext(). 
 getRequestDispatcher(errorPageURL).forward(request, 
 response); 
 } 

 public void doPost(HttpServletRequest request,HttpServletResponse response) { 
 try { 
 // do something 
 } catch (Exception ex) { 
 try { 
 sendErrorRedirect(request,response,"/jsp/MyErrorPage.jsp",ex); 
 } catch (Exception e) { 
 e.printStackTrace(); 
 } 
 } 
 } 


 15、JSP和APPLET如何通讯 
 JSP如何与EJB SessionBean通讯 
 下面的代码段作了很好的示范�br /> <%@ page import="javax.naming.*, javax.rmi.PortableRemoteObject, 
 foo.AccountHome, foo.Account" %> 
 <%! 
 //定义一个对SessionBeanHome接口实例的全局引用 
 AccountHome accHome=null; 

 public void jspInit() { 
 //获得Home接口实例 
 InitialContext cntxt = new InitialContext( ); 
 Object ref= cntxt.lookup("java:comp/env/ejb/AccountEJB"); 
 accHome = (AccountHome)PortableRemoteObject.narrow(ref,AccountHome.class); 
 } 
 %> 
 <% 
 //实例化SessionBean 
 Account acct = accHome.create(); 
 //调用˜qœç¨‹æ–ÒŽ³• 
 acct.doWhatever(...); 
 // 如此½{‰ç­‰Â 
 %> 


 16、当我ä‹É用一个结果集æ—Óž¼Œå¦‚何防止字段ä¸?null"的字域显½Cºåœ¨æˆ‘çš„HTML输入文本域中? 
 可以定义一个简单的函数来达到目的,如下åQšÂ?br /> <%! 
 String blanknull(String s) { 
 return (s == null) ? "" : s; 
 } 
 %> 

 然后在JSPçš„FORM中,可以˜q™æ ·ä½¿ç”¨Â 
 <input type="text" name="shoesize" value="<%=blanknull(shoesize)%>"> 


 17、如何中SERVLET或JSP下蝲一个文ä»Óž¼ˆå¦‚:binary,text,executable)åQŸÂ?br /> 现提供两个解å†Ïx–¹æ¡ˆï¼šÂ 
 AåQšä‹É用HTTPåQŒÂ?br /> BåQšåœ¨Servlet中,通过讄¡½®ContentTypeå’Œä‹É用java.io包的Stream½{‰ç±»å¯ä½œåˆ?例如åQšÂ?br /> response.setContentType("application/x-msword"); 
 然后惌™¾“出缓冲中写一些东东即可。Â?/p>

 18、ä‹É用useBean标志初始化BEAN时如何接受初始化参数 
 使用如下两标½{‘֍³å¯ï¼šÂ 
 <jsp:getProperty name="wenBean" property="someProperty"/> 
 <jsp:setProperty name="wenBean" property="someProperty" value="someValue"/> 

 19、ä‹É用JSP如何获得客户‹¹è§ˆå™¨çš„信息åQŸÂ?br /> 使用request.getHeader(String)卛_¯Â 


 20、能象调用子½E‹åºä¸€æ ¯‚°ƒç”¨JSP吗? 
 当然可以åQŒç”¨<jsp:include page="relativeURL" flush="true"/> 


 21、当我重¾~–译我的JSP使用的一个类后,ä¸ÞZ»€ä¹ˆJVM¾l§ç®‹ä½¿ç”¨æˆ‘的老CLASSåQŸÂ?/p>


 <%@include file="abc.jsp"%>�lt;jsp:include page="abc.jsp"/>之间的差别? 
Â å‰ä¸€ä¸ªäØ“é™æ€åŒ…å«ï¼Œè€ŒåŽä¸€ä¸ªäØ“åŠ¨æ€åŒ…å«Â?/p>


 22、JSP的缺点? 
 1。对JAVA½E‹åº˜q›è¡Œè°ƒè¯•没有好东东Â?br /> 2。因大多数的servlet引擎不支持connection pooling 
 3。Servlet引擎没有标准 
 4。JSP与其它脚本语­a€çš„交互Â?/p>


 23、JSP能进行递归调用吗? 
 当然可以,如对form的提交给本页 


 34、如何实现JSP的国际化åQŸÂ?br /> 为各¿Uç‰ˆæœ¬æä¾›resource bundles属性文件即可Â?/p>

 25、在JSP中如何写文本文äšgåQŸÂ?br /> 使用PrintWriter对象åQŒå¦‚åQšÂ?br /> <%@ page import="java.io.*" %> 
 <% 
 String str = "print me"; 
 String nameOfTextFile = "/usr/anil/imp.txt"; 
 try { 
 PrintWriter pw = new PrintWriter(new FileOutputStream(nameOfTextFile)); 
 pw.println(str); 
 pw.close(); 
 } catch(IOException e) { 
 out.println(e.getMessage()); 
 } 
 %> 


 26、如何在JSP中包括绝对èµ\径文ä»Óž¼ŸÂ 
 使用URLConnection卛_¯ã€‚Â?/p>


 27、在servlets和JSP之间能共享session对象吗? 
 当然可以åQŒÂ?br /> HttpSession session = request.getSession(true); 
 session.putValue("variable","value"); 


 28、JavaScript的变量能复制到JSPçš„SESSION中吗åQŸÂ?/p>


 29、如何设¾|®cookie在某一旉™—´åŽè¿‡æœŸï¼ŸÂ 
 用Cookie.setMaxAge(int) 


 30、如何获得当前的sessions敎ͼŸÂ 
 可以使用HttpSessionBindingListeners来跟ítªÂ?/p>


 31、能讄¡½®ä¸€äº›ä»£ç åœ¨æˆ‘所有的JSPæ–‡äšg之上˜qè¡ŒåQŸå¦‚果可以,能共享吗åQŸÂ?br /> 当然可以,可以ä¸ÞZ½ çš„JSPæ–‡äšg定义一个别å?/jsp/=ybwen.genius.myPreprocessingServlet,而以/jsp/为前¾~€çš„æ–‡ä»¶å¯ä»¥ä‹É用Â?/p>


 32、对一个JSP™åµï¼Œå¦‚果多个客户端同时请求它åQŒåŒæ­¥å¯èƒ½å—åQŸÂ?br /> 在jsp:useBean语法中ä‹É用beanName有何好处åQŸÂ?br /> beanName使用Beans.instantiate()初始化Bean 


 33、当我ä‹Éç”?lt;jsp:forward>æ—Óž¼Œåœ¨æµè§ˆå™¨çš„地址栏没有改变? 
 使用response.sendRedirect("newURL") 


 34、如何è{换JSP 0.9版本的文件到JSP1.1? 
 可ä‹É用sed/awk卛_¯Â 


 35、ä‹É用JSP能设¾|®HTML FORM中输入域的焦点,不用JavaScript? 
 没办法�/p>


 36、ä‹É用JSP˜qžæŽ¥åˆ°æ•°æ®åº“˜qžæŽ¥¾~“冲池的最好方法是什么? 
 1.使用JDBC2�中带有此服务的Driver 
 2.使用提供有此服务的Application server 
 3.自己�br />



]]>
eclipse安装安装语言包后若有一些英文单词没有翻译成中文的解å†Ïx–¹æ³•!http://www.aygfsteel.com/kim/archive/2006/11/09/80258.html大熊çŒ?/dc:creator>大熊çŒ?/author>Thu, 09 Nov 2006 13:22:00 GMThttp://www.aygfsteel.com/kim/archive/2006/11/09/80258.htmlhttp://www.aygfsteel.com/kim/comments/80258.htmlhttp://www.aygfsteel.com/kim/archive/2006/11/09/80258.html#Feedback3http://www.aygfsteel.com/kim/comments/commentRss/80258.htmlhttp://www.aygfsteel.com/kim/services/trackbacks/80258.html安装了多国语­a€åŒ…后åQŒå‘现还有一些英文单词没有翻译成中文åQŒè¿™æ˜¯å› ä¸ÞZ¹‹å‰å¯åŠ¨äº†è‹±æ–‡ç‰ˆçš„eclipseåQŒeclipse在启动后åQŒè®°å½•了一些英文版的信息,形成了干扎ͼŒè§£å†³æ–ÒŽ³•有以下两¿Uï¼š
1、将eclipse安装路径下的configuration目录删除åQŒå†é‡å¯eclipseã€?
2、右击eclipse快捷方式åQŒåœ¨ç›®æ ‡æ çš„æœ€åŽåŠ å…¥eclipse的启动参æ•?clean。或者在DOS下用“eclipse-clean”来启动ã€?/span>

]]>
在win xp 中安装Eclipse及多国语­a€åŒ? http://www.aygfsteel.com/kim/archive/2006/11/09/80256.html大熊çŒ?/dc:creator>大熊çŒ?/author>Thu, 09 Nov 2006 13:19:00 GMThttp://www.aygfsteel.com/kim/archive/2006/11/09/80256.htmlhttp://www.aygfsteel.com/kim/comments/80256.htmlhttp://www.aygfsteel.com/kim/archive/2006/11/09/80256.html#Feedback3http://www.aygfsteel.com/kim/comments/commentRss/80256.htmlhttp://www.aygfsteel.com/kim/services/trackbacks/80256.html本例安装环境:WIN XP中文ç‰?JDK1.4.2_12+ECLIPSE 3.0.1(加多国语­a€åŒ?
1.安装JDK
下蝲地址:http://Java.sun.com/j2se/
注意:在WIN XP下安装ECLIPSE不需要设¾|®JDK环境变量。(实践¾léªŒåQ?
2.安装ECLIPSE
下蝲地址:http://download.eclipse.org/downloads/�
åQ?åQ‰eclipse的安装非常简单,它属于绿色èÊY件的安装æ–ÒŽ³•åQšä¸éœ€è¦è¿è¡Œå®‰è£…程序,只需要将下蝲的eclipse压羃包解压就可以˜qè¡Œeclipse了(路径自己喜欢åQ‰ã€?
åQ?åQ‰æ£€æŸ¥eclipse是否安装成功。双å‡È›®å½•下åQšeclipse.exeæ–‡äšg来启动eclipse。第一‹Æ¡å¯åŠ¨ä¼šå¼¹å‡ºå¯¹è¯æ¡†ï¼ˆç”¨æ¥è®„¡½®å·¥ä½œ½Iºé—´åQŒä½¾|®è‡ªå·±å–œ‹Æ¢ï¼‰åQŒå•击OK按钮åQŒå¼€å§‹è¿è¡Œeclipse½E‹åºã€‚运行完毕后åQŒå‡ºçŽîC¸€ä¸ªWelcome to Eclipse 3.0 的欢˜qŽç•Œé¢ï¼Œè¡¨ç¤ºå·²ç»å®‰è£…成功了ã€?
3.安装多国语言�
下蝲地址åQ?a target="_new" rel="nofollow">http://download.eclipse.org/downloads/ã€?
注意åQšè¦ä¸Žeclipse 3.0.1版本相对应(¾|‘名åQšLanguage PackåQ‰ã€?
åQ?åQ‰å…ˆå…ÏxމEclipseã€?
åQ?åQ‰å°†ä¸‹è²çš„语­a€åŒ…解压羃åQŒåƈ¾l™è¿™ä¸ªç›®å½•取个名åQˆæœ¬ä¾‹ï¼šlanguageåQ‰ã€?
(3) ž®†æ­¤ç›®å½•复制到eclipse安装目录下(最后èµ\径䨓åQšeclipse安装目录/language/eclipse/..åQ‰ã€?
åQ?åQ‰å¾ç«‹è¯­­a€åŒ…çš„linkæ–‡äšg。在eclipseå®‰è£…ç›®å½•ä¸‹å¾ä¸€ä¸ªç›®å½•åÆˆå–åä¸ºlinksåQŒåœ¨è¯¥ç›®å½•ä¸­æ–°å¾ä¸€ä¸ªæ–‡æœ¬åÆˆå–åä¸ºlanguage.linkåQˆå¯ä»ÀL„å–名åQ‰ï¼Œç„¶åŽåœ¨language.linkæ–‡äšg中加入一行文字:path=language(用相对èµ\å¾?ã€?
¾lè¿‡å››æ­¥åŽï¼ŒçŽ°åœ¨ž®±å¯ä»¥é‡å¯eclipse了。看看!是不是eclipse界面都汉化成中文了呢åQæœªæˆåŠŸå®‰è£…çš„æœ‹å‹ï¼Œå¿«ç‚¹è¯•ä¸‹å•¦ï¼
ä»¥ä¸Šä¸ºæœ¬äºø™¿‘期的学习成果åQŒè°}供各位朋友参考!若有不对的地方请见谅åQ?/span>

]]>
关于JSP的执行流½E?/title><link>http://www.aygfsteel.com/kim/archive/2006/11/09/80202.html</link><dc:creator>大熊çŒ?/dc:creator><author>大熊çŒ?/author><pubDate>Thu, 09 Nov 2006 08:51:00 GMT</pubDate><guid>http://www.aygfsteel.com/kim/archive/2006/11/09/80202.html</guid><wfw:comment>http://www.aygfsteel.com/kim/comments/80202.html</wfw:comment><comments>http://www.aygfsteel.com/kim/archive/2006/11/09/80202.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kim/comments/commentRss/80202.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kim/services/trackbacks/80202.html</trackback:ping><description><![CDATA[ <span id="wmqeeuq" class="postbody">当第一个用戯‚¯·æ±‚JSPæ–‡äšg的时候,JSP容器åQˆå¦‚TOMCATåQ‰æŠŠJSPæ–‡äšg转换成JAVAæ–‡äšgåQˆSERVLET¾cÀL–‡ä»Óž¼‰åQŒç„¶åŽç¼–译成CLASSæ–‡äšgåQŒå¸¸é©Õd†…存;当有客户è¯äh±‚的时候,直接再打开一个线½E‹ï¼Œè€Œä¸æ˜¯ä¸€ä¸ªè¿›½E‹ï¼Œæ— é¡»é‡æ–°¾~–译åQŒç›´æŽ¥æ‰§è¡Œç¬¬ä¸€‹Æ¡å·²¾lç¼–译好的CLASSæ–‡äšgåQŒé€Ÿåº¦æ¯”每‹Æ¡éƒ½è¦é‡æ–°ç¼–译JSPæ–‡äšg要快得多。当然如果JSPæ–‡äšg发生变化åQŒåˆ™éœ€è¦é‡æ–°ç¼–译一‹Æ¡ã€?<img src="http://www.javafan.net/bbs/images/smilies/47941865eb7bbc2a777305b46cc059a2.gif" /> 遇见!</span> <img src ="http://www.aygfsteel.com/kim/aggbug/80202.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kim/" target="_blank">大熊çŒ?/a> 2006-11-09 16:51 <a href="http://www.aygfsteel.com/kim/archive/2006/11/09/80202.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> Ö÷Õ¾Ö©Öë³ØÄ£°å£º <a href="http://" target="_blank">ÐûººÏØ</a>| <a href="http://" target="_blank">ÌìµÈÏØ</a>| <a href="http://" target="_blank">Ä«ÍÑÏØ</a>| <a href="http://" target="_blank">Í¼Ä¾Êæ¿ËÊÐ</a>| <a href="http://" target="_blank">ɳÌïÇø</a>| <a href="http://" target="_blank">ƽÀûÏØ</a>| <a href="http://" target="_blank">ÍпËÍÐÏØ</a>| <a href="http://" target="_blank">ãä½­ÊÐ</a>| <a href="http://" target="_blank">»·áÏØ</a>| <a href="http://" target="_blank">ÐûÎäÇø</a>| <a href="http://" target="_blank">ºôºÍºÆÌØÊÐ</a>| <a href="http://" target="_blank">¸ßÌ¨ÏØ</a>| <a href="http://" target="_blank">¸Á¶ûÏØ</a>| <a href="http://" target="_blank">ÄϳäÊÐ</a>| <a href="http://" target="_blank">ÉòÇðÏØ</a>| <a href="http://" target="_blank">ÀöË®ÊÐ</a>| <a href="http://" target="_blank">ÌÆº£ÏØ</a>| <a href="http://" target="_blank">Î÷¹±Çø</a>| <a href="http://" target="_blank">Ò×ÃÅÏØ</a>| <a href="http://" target="_blank">Ðí²ýÏØ</a>| <a href="http://" target="_blank">Î÷·áÏØ</a>| <a href="http://" target="_blank">ÓÀÊÙÏØ</a>| <a href="http://" target="_blank">Â¹ÒØÏØ</a>| <a href="http://" target="_blank">¸ÓÓÜÏØ</a>| <a href="http://" target="_blank">Áô°ÓÏØ</a>| <a href="http://" target="_blank">ξÊÏÏØ</a>| <a href="http://" target="_blank">²¼¶û½òÏØ</a>| <a href="http://" target="_blank">ÔÀÑôÏØ</a>| <a href="http://" target="_blank">ÐûÎäÇø</a>| <a href="http://" target="_blank">áéÖÝÊÐ</a>| <a href="http://" target="_blank">ºÍ¾²ÏØ</a>| <a href="http://" target="_blank">ËþºÓÏØ</a>| <a href="http://" target="_blank">´ó¶É¿ÚÇø</a>| <a href="http://" target="_blank">Óý¶ù</a>| <a href="http://" target="_blank">Éñ³ØÏØ</a>| <a href="http://" target="_blank">ÌúÁëÊÐ</a>| <a href="http://" target="_blank">Ä®ºÓÏØ</a>| <a href="http://" target="_blank">³¤Í¡ÏØ</a>| <a href="http://" target="_blank">ºôÂêÏØ</a>| <a href="http://" target="_blank">³£ÖÝÊÐ</a>| <a href="http://" target="_blank">ºÚºÓÊÐ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>