﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-随笔心得</title><link>http://www.blogjava.net/love-sea/</link><description>记我所见，记我所想</description><language>zh-cn</language><lastBuildDate>Tue, 05 May 2026 05:24:10 GMT</lastBuildDate><pubDate>Tue, 05 May 2026 05:24:10 GMT</pubDate><ttl>60</ttl><item><title>sql2000 脚本语句 基础  基本上全部调试通过</title><link>http://www.blogjava.net/love-sea/archive/2007/08/22/138616.html</link><dc:creator>源自有缘</dc:creator><author>源自有缘</author><pubDate>Wed, 22 Aug 2007 07:05:00 GMT</pubDate><guid>http://www.blogjava.net/love-sea/archive/2007/08/22/138616.html</guid><wfw:comment>http://www.blogjava.net/love-sea/comments/138616.html</wfw:comment><comments>http://www.blogjava.net/love-sea/archive/2007/08/22/138616.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/love-sea/comments/commentRss/138616.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/love-sea/services/trackbacks/138616.html</trackback:ping><description><![CDATA[
		<p>create unique index stusno on student(sno); --创建索引</p>
		<p>create clustered index stuname on student(sname);-- 创建聚簇索引 </p>
		<p>drop index student.stuname; -- 删除索引</p>
		<p>alter table student add constraint PK1_ID primary key(sno);--修改表的sno为主键</p>
		<p>
				<br />--创建表</p>
		<p>create table student (</p>
		<p>sno char(5) not null unique,</p>
		<p>sname char(20) unique,<br />ssex  char(1),</p>
		<p>sage int,<br />sdept char(15));</p>
		<p>
				<br />--删除表<br />drop table student;</p>
		<p> </p>
		<p>ALTER TABLE student DROP CONSTRAINT unique  --没有解决</p>
		<p>alter table student drop CONSTRAINT sname ;</p>
		<p>--建立WoolAdminName表<br />create table WoolAdminName<br />(<br />ID int identity(1,1) not null,<br />AdminName varchar(30) not null,<br />pwd varchar(30) not null<br />)<br />--建立管理员WoolAdminName表约束<br />go<br />alter table WoolAdminName<br />add constraint PK_ID primary key(ID)<br />insert into WoolAdminName values('admin','admin')</p>
		<p>create table course(</p>
		<p>cno char(5) not null  primary key,</p>
		<p>sname char(20) ,</p>
		<p>cpno char(5) not null,</p>
		<p>ccredit int );</p>
		<p>
				<br />create table sc(</p>
		<p>cno char(5),</p>
		<p>sno char(5),</p>
		<p>grade int,</p>
		<p>primary key(sno,cno)<br />)</p>
		<p>select * from student;<br />insert into student values('1','ren','m',20,'信息工程');<br />insert into student values('2','xi','w',18,'公共管理');<br />insert into student values('3','hai','m',22,'管理科学');<br />insert into student values('4','hui','w','19','信息工程');</p>
		<p>select sname 姓名, 40-sage 年龄 from student;</p>
		<p>select sname 姓名, sage 年龄 from student where sage &gt;=20;</p>
		<p>select sname 姓名, sage 年龄 from student group by sage having  max(sage) ;<br /><br /><br /><br /><br />use test1;</p>
		<p>alter table student drop unique(sname);</p>
		<p>select sname,'Year of Birth:',2007-sage birthday,lower(sdept) from student;</p>
		<p>select * from student;</p>
		<p>select ssex from student;</p>
		<p>select distinct ssex from student;</p>
		<p> </p>
		<p>select * from student where sage =22;</p>
		<p>select * from student where sage &lt;&gt;22;</p>
		<p>select * from student where sage !=22;</p>
		<p> </p>
		<p>select * from student where sage&gt;21;</p>
		<p>select * from student where sage !&gt;21;</p>
		<p>
				<br />--下边的形式不对<br />select * from student where sage not &gt; 21;<br />--上边的形式不对 应改成下边的形式</p>
		<p>select * from student where not sage  &gt; 21;</p>
		<p> </p>
		<p>
				<br />select * from student where sage between 19 and 21;-- between and </p>
		<p>select * from student where sage not between 19 and 21;--not between and </p>
		<p>select * from student where sage in (19,20,21);-- in </p>
		<p>select * from student where sage not in (19,20,21);-- not in </p>
		<p>
				<br />select * from student where sname like 'h\_i'escape '\';   -- like </p>
		<p>select * from student where sname not like 'h%'; -- not like </p>
		<p>select * from student where sname is null;  -- is null</p>
		<p>select * from student where sname is not null; -- is not null</p>
		<p>select * from student where sname like 'h%' and sage&gt;20;--and</p>
		<p>select * from student where sname like '%i' or sage&lt;20;-- or</p>
		<p>
				<br />select * from student where sage in (19,20,21)order by sage desc;-- order by </p>
		<p>select * from student order by sdept desc,sage desc;--系按降序排列，同系中的按年龄降序排列</p>
		<p>
				<br />select count(*) from student; -- 统计元组个数</p>
		<p>select count(*) from student where sage&gt;20; -- 有条件统计元组个数</p>
		<p>select  count(distinct ssex) from student;-- 统计一列中 不重复的值的个数</p>
		<p>select  count(ssex) from student;--统计一列中值的个数</p>
		<p>select sum(sage) from student;-- 计算一列值的总和（此列必为数值型）</p>
		<p>select avg(sage) from student; -- 计算一列值的平均值</p>
		<p>select max(sage) from student; -- 求一列值的最大值</p>
		<p>select min(sage) from student; -- 求一列值的最小值</p>
		<p>select sno from sc group by sno having count(*)&gt;=2;</p>
		<p>SELECT *<br />FROM dbo.course INNER JOIN<br />      dbo.sc ON dbo.course.cno = dbo.sc.cno INNER JOIN<br />      dbo.student ON dbo.sc.sno = dbo.student.sno</p>
		<p>select student.*,sc.* from student,sc where student.sno=sc.sno;--等值连接</p>
		<p>select student.*,sc.* from student,sc;--广义笛卡尔积</p>
		<p>
				<br />--等值连接去掉重复的列就是自然连接<br />select student.sno,sname,ssex,sage,sdept,cno,grade from student,sc where student.sno=sc.sno;</p>
		<p>
				<br />--自连接</p>
		<p>
				<br />select first.cno,second.cpno from course first,course second where first.cpno=second.cno;</p>
		<p>
				<br />SELECT p1.pub_id,p2.pub_id,p1.pr_info<br />FROM pub_info AS p1 INNER  pub_info AS p2<br />ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)</p>
		<p>--外连接</p>
		<p>--join_type 指出连接类型，可分为三种：内连接、外连接和交叉连接。内连接(INNER JOIN)使用比<br />--较运算符进行表间某(些)列数据的比较操作，并列出这些表中与连接条件相匹配的数据行。根据所使用<br />--的比较方式不同，内连接又分为等值连接、自然连接和不等连接三种。<br />--外--连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)<br />--和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是，外连接不只列出与连接条件相匹<br />--配的行，而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的<br />--数据行。<br />--交叉连接(CROSS JOIN)没有WHERE 子句，它返回连接表中所有数据行的笛卡尔积，其结果集合中的<br />--数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。<br />--连接操作中的ON (join_condition) 子句指出连接条件，它由被连接表中的列和比较运算符、逻辑<br />--运算符等构成。<br />--无论哪种连接都不能对text、ntext和image数据类型列进行直接连接，但可以对这三种列进行间接<br />--连接。-</p>
		<p> </p>
		<p>
				<br />select student.sno,sname,ssex,sage,sdept,cno,grade from student,sc where student.sno=sc.sno *;--错误的写法</p>
		<p>-- 右外连接<br />select student.sno,sname,ssex,sage,sdept,cno,grade from student right join sc on student.sno=sc.sno ;</p>
		<p>
				<br />--左外连接<br />SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b<br />ON a.username=b.username</p>
		<p>
				<br />--嵌套查询</p>
		<p>use test1;<br />select sno, sname from student  where sno in (<br />    <br /> select sno from sc where cno in </p>
		<p>  (select cno from course where sname='数据结构')<br />);</p>
		<p>
				<br />select student.sno,student.sname from student, sc, course</p>
		<p> where student.sno=sc.sno and sc.cno=course.cno and course.sname='数据结构';</p>
		<p>
				<br />select sname,sage,sdept from student where sage&lt;any(select sage from student where sdept='信息工程');</p>
		<p>
				<br />select sname,sage,sdept from student where sage&lt;all(select sage from student where sdept='信息工程');</p>
		<p>--exists关键字</p>
		<p>select sname from student where exists (select * from sc where sno=student.sno and cno='1');</p>
		<p>select sname from student where not exists (select * from sc where sno=student.sno and cno='1');</p>
		<p>
				<br />select * from course;</p>
		<p>insert into course values('1','语文','2','');</p>
		<p>
				<br />insert into course values('2','数学','2','');</p>
		<p>
				<br />insert into course values('3','英语','2','');</p>
		<p>
				<br />insert into course values('4','c语言','2','');</p>
		<p>
				<br />insert into course values('5','数据结构','2','');</p>
		<p>select * from sc;</p>
		<p>insert into sc values('1','1','');</p>
		<p>insert into sc values('1','2','');</p>
		<p>insert into sc values('2','2','');</p>
		<p>insert into sc values('2','1','');</p>
		<p>insert into sc values('3','3','');</p>
		<p>insert into sc values('5','3','');</p>
		<p> </p>
<img src ="http://www.blogjava.net/love-sea/aggbug/138616.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/love-sea/" target="_blank">源自有缘</a> 2007-08-22 15:05 <a href="http://www.blogjava.net/love-sea/archive/2007/08/22/138616.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql调试问题</title><link>http://www.blogjava.net/love-sea/archive/2007/08/17/137558.html</link><dc:creator>源自有缘</dc:creator><author>源自有缘</author><pubDate>Fri, 17 Aug 2007 07:40:00 GMT</pubDate><guid>http://www.blogjava.net/love-sea/archive/2007/08/17/137558.html</guid><wfw:comment>http://www.blogjava.net/love-sea/comments/137558.html</wfw:comment><comments>http://www.blogjava.net/love-sea/archive/2007/08/17/137558.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/love-sea/comments/commentRss/137558.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/love-sea/services/trackbacks/137558.html</trackback:ping><description><![CDATA[mysql&gt; GRANT USAGE<br />    -&gt; ON EXAMPLE.*<br />    -&gt; TO <a href="mailto:webuser@localhost">webuser@localhost</a>;<br />ERROR 1133 (42000): Can't find any matching row in the user table<br /><br />错误的真正原因是 没有设置用户的密码。<br /><br />正确的写法是：<br /><br />mysql&gt; GRANT USAGE<br />    -&gt; ON EXAMPLE.*<br />    -&gt; TO <a href="mailto:webuser@localhost">webuser@localhost</a><br />    -&gt; identified by 'webuser';<br />Query OK, 0 rows affected (0.00 sec)<img src ="http://www.blogjava.net/love-sea/aggbug/137558.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/love-sea/" target="_blank">源自有缘</a> 2007-08-17 15:40 <a href="http://www.blogjava.net/love-sea/archive/2007/08/17/137558.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>简易赚钱之道（个人收藏）</title><link>http://www.blogjava.net/love-sea/archive/2007/08/15/136935.html</link><dc:creator>源自有缘</dc:creator><author>源自有缘</author><pubDate>Wed, 15 Aug 2007 07:34:00 GMT</pubDate><guid>http://www.blogjava.net/love-sea/archive/2007/08/15/136935.html</guid><wfw:comment>http://www.blogjava.net/love-sea/comments/136935.html</wfw:comment><comments>http://www.blogjava.net/love-sea/archive/2007/08/15/136935.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/love-sea/comments/commentRss/136935.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/love-sea/services/trackbacks/136935.html</trackback:ping><description><![CDATA[        首先,我要说明一点，这是一个不用你花钱，不用你的手机号码，只要你帮忙宣传这篇文章就行，现在你花点时间耐心看一下下面的文章，你一定会受益的！！ （看一看不费时，做不做随你便。）自己的钱如果够花就捐给希望工程吧。不想赚老外的钱吗? 反正赚的是外国人的钱，不赚白不赚！ <br />　　按照下面的说法做保证有你赚的。（有耐心，才能做大事哦） <br />　　在网上我发现了一个问题： <br />　　为什么各个网站都说能为你赚到很多钱呢，就连读一封 e-mail 点几回广告栏都能挣到钱? <br />　　难以置信啊！天下哪有如此免费午餐？！（后来才弄清是广告商买单）本来我也是不相信的， <br />　　可呆着实在是无聊啊。反正闲着也是闲着！但我的身份是不能够泄露给外人的，当然身份证号码、手机号码（因为回电是要付钱的哦、信用卡号码等等重要信息都不能泄露的哦。 于是我找了一个不要身份证、不要会员费，只要有个地址、电话号码就能挣到钱的网站，申请成了会员 <br />　　……（反正挣不到钱也不会吃亏，哼!） <br />　　等了一个月，什么汇款单？连个影子都没有！不过一想，无所谓了，反正也没吃亏!就当是鬼迷心窍一回吧!--哈哈! 可一直到了第二个月…… <br />　　突然，汇款单到了!不看不知道，一看吓一跳！--300多美金？折合人民币不就是2400多了吗？半信半疑。到了银行，交了几十元的手续费，换回了2400多!真像做梦一样…… <br />　　买了一些一直想买的东西，这时我才确信不疑。兴奋之余，又开始了我的宣传。不是宣传得越多，挣的也就越多吗? 果然，三个月后，又飞来了一张单子！--400多美金！真是难以置信！！ <br />　 不过，古人云：“宁可信其有，不可信其无”啊！反正也不吃亏，就当疯一回试试看嘛！ <br />　 相信我，没错的！ <br />　 加入方法很简单的哦： 如果你不信可以先看一下网站,你就明白了； <br />　 网址为：<a href="http://www.pointsmoney.com/login.php" target="_blank"><font color="#3b5998">http://www.pointsmoney.com/login.php</font></a><br />　 上面网站,如若点击不成，复制、粘贴到地址栏。(有时候进不去，那是因为服务器太忙，你可以在凌晨人少时再去！有时候要稍等一下，别心急！) <br />　 打开网页，点击左方菜单的第一个sign up。 <br />　　进去后，就要填你的资料了（也不是什么重要的资料）。 <br />　　然后，跟着提示，一步一步输入信息就ok了。下面是英文的解释: <br />　　user id (valid email): 填你的电子邮箱 (最好用tom邮箱，接收较快) <br />　　password : 密码，你自己想一个吧 <br />　　confirm password : 确认你的密码，再打一次你的密码 <br />　　friend refferal id : 这里填 <font face="Arial" size="2">943033或者<font face="Arial" size="2">943027</font></font><p>　　填完后，点击 submit,这个网站就会发一个e-mail给你，（一定会收到的，尽量用接收邮件快的邮箱,也可能不在收件箱而在垃圾箱里）这个e-mail里面就有一个新的id是你的，以后你就用你得到的这个id去招人。其实也不用特别地去招，像我这样，发表文章，教人申请加入不就能有钱了吗？例：你现在用<font face="Arial" size="2">943033</font>申请，包括写完以下还有的资料。这样全部完成后，我就得到0.8美金。（注：在这条里用<font face="Arial" size="2">943027</font>，即填我的id,你们以后介绍人就用自己的id） <br />　　好了，现在点击 submit 。好，申请完了。现在，你就去你的电子邮箱，这个网站发给你一个email。去看，一定有，外国人很讲信誉。在email中间有一条长长的网址（例：它给我的email中间http://www.pointsmoney.com/userp ... =.........id=806837（最后的几个数字就是你的id，切记→auid后面的数字不是id，换句话说，your refferal id：后面的数字就是你的id）。上面这个是给我的网址，而给你们的是不同的。每个人都不同，你上它给你的网址就得了。进去他发给你的邮件里面的那个网址后（打开他邮件中有你自己的id那个网页就是了），接着，再次输入资料。 <br />　　我为了方便大家的加入，详细加入的细节（注：一定要用拼音打字呀， <br />　　不然申请不了的）： <br />　　first name: 名字（例：小刚 就打 xiaogang） (名字的第一个字母记得要大写哦) <br />　　last name: 姓 （例：王 就打wang） <br />　　address: 家庭住址（写拼音，一定要详细填写，不然收不到汇款单喽！） <br />例 新疆乌鲁木齐就写xinjiangwulumuqi<br />　　city: 城市 （例：乌鲁木齐，就打wulumuqi） <br />　　zip/postal code: 邮编 （ 填你的，例 830000 ） <br />　　state: 填 no <br />　　country: 国家（选 china--都是中国人吧） <br />　　phone: 电话号码 [电话号码] (国家代码86+去掉区位号前0的电话号码) （例：→ 86-0991-5855348） <br />　　fax: 可不填 <br />　　mobile: 可不填 <br />　　gender: 性别 male（男）； femaie （女） <br />　　do you have credit card: 你有信用卡吗？（选no吧） <br />　　age: 你几岁（你自己选吧） <br />　　profession: 你职业是什么？（可不填） <br />　　monthly lncome: 你每月的收入是多少？（可不填） <br />　　do you have web site: 你有个人网站吗？（没就不填） <br />　　好，填完，点击 submit <br />　　选择爱好兴趣（本人全选，你看着办吧,看不懂可随便选一个）选好点击 submit，大功告成。 <br />　　加入完毕后，它就出现一个登陆框，如果你就登陆了，网站就送0.41美金给你。所以，最好是申请完成后登陆一次吧，这样就得到0.41美金了。再登陆一次合计0.43美金。登陆时你只需填入你的电子邮箱，然后在下一栏输入密码就可以了。 <br />　　然后，就是复制赚钱之法了。 <br />　 ★赚钱的方法：就是到各个网站的留言板中，把本文内容全部复制、粘贴进去！多多益善哦 ！！！ <br />　（记得把我的id改成你的id，发表出去。不然你的钱可要进我的帐户啦！） <br />　　只要有人点，你就可以挣钱了！多好啊！ <br />　　 而且反正赚的是外国人的钱，不赚白不赚！ <br /><br />　　好了，祝你天天快乐呀！不，应该是大家一起赚，一起乐呀 ！！！ <br />　　 反正不用你交钱，不用你手机注册，闲着没事，不妨一试，只要尽力工作就能赚钱的！！！ <br /></p><img src ="http://www.blogjava.net/love-sea/aggbug/136935.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/love-sea/" target="_blank">源自有缘</a> 2007-08-15 15:34 <a href="http://www.blogjava.net/love-sea/archive/2007/08/15/136935.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java键盘输入</title><link>http://www.blogjava.net/love-sea/archive/2007/08/08/135225.html</link><dc:creator>源自有缘</dc:creator><author>源自有缘</author><pubDate>Wed, 08 Aug 2007 05:38:00 GMT</pubDate><guid>http://www.blogjava.net/love-sea/archive/2007/08/08/135225.html</guid><wfw:comment>http://www.blogjava.net/love-sea/comments/135225.html</wfw:comment><comments>http://www.blogjava.net/love-sea/archive/2007/08/08/135225.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/love-sea/comments/commentRss/135225.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/love-sea/services/trackbacks/135225.html</trackback:ping><description><![CDATA[
		<p>import java.util.*;</p>
		<p>import java.io.BufferedReader;//关键<br /><br />import java.io.IOException;//关键<br /><br />import java.io.InputStreamReader;//关键<br /><br />class StaticTest{<br /> <br /> static int i=47;<br /> <br /> static void incr(){<br />  <br />  StaticTest.i++;<br /> }<br /> <br /> static int ternary(int i){<br />  return i&lt;10?i*100:i*10;<br /> }<br /> <br /> static int alternative(int i){<br />  if(i&lt;10)<br />  return i*100;<br />  else <br />  return i*10;<br />   <br /> }<br /> <br /> public static void main(String[] args)throws NumberFormatException, IOException{//关键 抛出异常<br /><br />  <br />  int i=0;<br />  BufferedReader br=null;<br />  //StaticTest str1=new StaticTest();<br />  //StaticTest str2=new StaticTest();<br />  //System.out.println("str1.i="+str1.i);<br />  //System.out.println("str2.i="+str2.i);<br />  //incr();<br />  <br />  System.out.println("请输入值1:"); <br />  br=new BufferedReader(new InputStreamReader(System.in));//关键 从键盘读入<br /> i=Integer.parseInt(br.readLine()); //关键 将值付给i<br /><br /> System.out.println(ternary(i));<br />  <br />  <br />  <br />   <br />  System.out.println("请输入值2:"); <br />  br=new BufferedReader(new InputStreamReader(System.in)); //关键<br /><br />  i=Integer.parseInt(br.readLine()); //关键<br /><br />  System.out.println(alternative(i));<br /> <br /> <br />  //System.out.println("str1.i="+str1.i);<br />  //System.out.println("str2.i="+str2.i);<br /> }<br /> <br />}</p>
<img src ="http://www.blogjava.net/love-sea/aggbug/135225.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/love-sea/" target="_blank">源自有缘</a> 2007-08-08 13:38 <a href="http://www.blogjava.net/love-sea/archive/2007/08/08/135225.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>upload页面的组织 添加浏览东西 </title><link>http://www.blogjava.net/love-sea/archive/2007/07/30/133324.html</link><dc:creator>源自有缘</dc:creator><author>源自有缘</author><pubDate>Mon, 30 Jul 2007 06:04:00 GMT</pubDate><guid>http://www.blogjava.net/love-sea/archive/2007/07/30/133324.html</guid><wfw:comment>http://www.blogjava.net/love-sea/comments/133324.html</wfw:comment><comments>http://www.blogjava.net/love-sea/archive/2007/07/30/133324.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/love-sea/comments/commentRss/133324.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/love-sea/services/trackbacks/133324.html</trackback:ping><description><![CDATA[
		<p>
				<br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br />&lt;title&gt;×ÝºáHTTPÍ¼Æ¬ÉÏ´«×é¼þÑÝÊ¾&lt;/title&gt;<br />&lt;/head&gt;</p>
		<p>  <br />&lt;body bgcolor="#666666"&gt;<br />¡¡ </p>
		<p> &lt;form  action="ImageUploadDealD2.jsp" method="post" enctype="multipart/form-data" name="frusub" id="frusub"&gt;<br />  <br />  &lt;div id=fileupload name=fileupload  style="height:30"&gt;//关键的部分 div<br />  &lt;input type="file" name="file" onChange="" &gt;&lt;br&gt;<br />   &lt;input type="file" name="file" onChange=""&gt;&lt;br&gt;<br /> &lt;/div&gt;<br />   &lt;input type="submit" name="Submit" value="Ìá½»"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;input type="button" name="button" value="Ìá½»" onclick=" _addfileinput(this)"&gt;<br /> &lt;/form&gt;</p>
		<p>&lt;/body&gt;<br />&lt;Script&gt;<br />function _addfileinput1(){<br /> <br />   var fileinput = document.createElement("input");<br />   fileinput.type= "file";<br />   fileinput.value="";<br />   fileupload.appendChild(fileinput);<br /> <br />  <br />}<br />function _addfileinput(){//很关键的部分  添加一个上传的控制栏<br /> <br />    var divname = document.all.fileupload;<br />    divname.innerHTML += "&lt;input type='file' name='file'&gt; &lt;br&gt;";<br />}</p>
		<p>&lt;/script&gt;<br />&lt;/html&gt;</p>
<img src ="http://www.blogjava.net/love-sea/aggbug/133324.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/love-sea/" target="_blank">源自有缘</a> 2007-07-30 14:04 <a href="http://www.blogjava.net/love-sea/archive/2007/07/30/133324.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java反射机制（摘）</title><link>http://www.blogjava.net/love-sea/archive/2007/07/27/132805.html</link><dc:creator>源自有缘</dc:creator><author>源自有缘</author><pubDate>Fri, 27 Jul 2007 08:02:00 GMT</pubDate><guid>http://www.blogjava.net/love-sea/archive/2007/07/27/132805.html</guid><wfw:comment>http://www.blogjava.net/love-sea/comments/132805.html</wfw:comment><comments>http://www.blogjava.net/love-sea/archive/2007/07/27/132805.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/love-sea/comments/commentRss/132805.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/love-sea/services/trackbacks/132805.html</trackback:ping><description><![CDATA[
		<div>一、反射的概念 ：<br />反射的概念是由Smith在1982年首次提出的，主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。其中LEAD/LEAD++ 、OpenC++ 、MetaXa和OpenJava等就是基于反射机制的语言。最近，反射机制也被应用到了视窗系统、操作系统和文件系统中。<br /><br />反射本身并不是一个新概念，它可能会使我们联想到光学中的反射概念，尽管计算机科学赋予了反射概念新的含义，但是，从现象上来说，它们确实有某些相通之处，这些有助于我们的理解。在计算机科学领域，反射是指一类应用，它们能够自描述和自控制。也就是说，这类应用通过采用某种机制来实现对自己行为的描述（self-representation）和监测（examination），并能根据自身行为的状态和结果，调整或修改应用所描述行为的状态和相关的语义。可以看出，同一般的反射概念相比，计算机科学领域的反射不单单指反射本身，还包括对反射结果所采取的措施。所有采用反射机制的系统（即反射系统）都希望使系统的实现更开放。可以说，实现了反射机制的系统都具有开放性，但具有开放性的系统并不一定采用了反射机制，开放性是反射系统的必要条件。一般来说，反射系统除了满足开放性条件外还必须满足原因连接（Causally-connected）。所谓原因连接是指对反射系统自描述的改变能够立即反映到系统底层的实际状态和行为上的情况，反之亦然。开放性和原因连接是反射系统的两大基本要素.<br /><br />Java中，反射是一种强大的工具。它使您能够创建灵活的代码，这些代码可以在运行时装配，无需在组件之间进行源代表链接。反射允许我们在编写与执行时，使我们的程序代码能够接入装载到JVM中的类的内部信息，而不是源代码中选定的类协作的代码。这使反射成为构建灵活的应用的主要工具。但需注意的是：如果使用不当，反射的成本很高。<br /><br />二、Java中的类反射：<br />Reflection 是 Java 程序开发语言的特征之一，它允许运行中的 Java 程序对自身进行检查，或者说“自审”，并能直接操作程序的内部属性。Java 的这一能力在实际应用中也许用得不是很多，但是在其它的程序设计语言中根本就不存在这一特性。例如，Pascal、C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息。<br /><br />1．检测类：<br /><br />1.1 reflection的工作机制<br /><br />考虑下面这个简单的例子，让我们看看 reflection 是如何工作的。<br /><br />import java.lang.reflect.*;<br />public class DumpMethods {<br />public static void main(String args[]) {<br />try {<br />Class c = Class.forName(args[0]);<br />Method m[] = c.getDeclaredMethods();<br />for (int i = 0; i &lt; m.length; i++)<br />System.out.println(m[i].toString());<br />} catch (Throwable e) {<br />System.err.println(e);<br />}<br />}<br />}<br /><br />按如下语句执行：<br /><br />java DumpMethods java.util.Stack<br /><br />它的结果输出为：<br /><br />public java.lang.Object java.util.Stack.push(java.lang.Object)<br /><br />public synchronized java.lang.Object java.util.Stack.pop()<br /><br />public synchronized java.lang.Object java.util.Stack.peek()<br /><br />public boolean java.util.Stack.empty()<br /><br />public synchronized int java.util.Stack.search(java.lang.Object)<br /><br />这样就列出了java.util.Stack 类的各方法名以及它们的限制符和返回类型。<br /><br />这个程序使用 Class.forName 载入指定的类，然后调用 getDeclaredMethods 来获取这个类中定义了的方法列表。java.lang.reflect.Methods 是用来描述某个类中单个方法的一个类。<br /><br />1.2 Java类反射中的主要方法<br /><br />对于以下三类组件中的任何一类来说 -- 构造函数、字段和方法 -- java.lang.Class 提供四种独立的反射调用，以不同的方式来获得信息。调用都遵循一种标准格式。以下是用于查找构造函数的一组反射调用：<br /><br />l Constructor getConstructor(Class[] params) -- 获得使用特殊的参数类型的公共构造函数，<br /><br />l Constructor[] getConstructors() -- 获得类的所有公共构造函数<br /><br />l Constructor getDeclaredConstructor(Class[] params) -- 获得使用特定参数类型的构造函数(与接入级别无关)<br /><br />l Constructor[] getDeclaredConstructors() -- 获得类的所有构造函数(与接入级别无关)<br /><br />获得字段信息的Class 反射调用不同于那些用于接入构造函数的调用，在参数类型数组中使用了字段名：<br /><br />l Field getField(String name) -- 获得命名的公共字段<br /><br />l Field[] getFields() -- 获得类的所有公共字段<br /><br />l Field getDeclaredField(String name) -- 获得类声明的命名的字段<br /><br />l Field[] getDeclaredFields() -- 获得类声明的所有字段<br /><br />用于获得方法信息函数：<br /><br />l Method getMethod(String name, Class[] params) -- 使用特定的参数类型，获得命名的公共方法<br /><br />l Method[] getMethods() -- 获得类的所有公共方法<br /><br />l Method getDeclaredMethod(String name, Class[] params) -- 使用特写的参数类型，获得类声明的命名的方法<br /><br />l Method[] getDeclaredMethods() -- 获得类声明的所有方法<br /><br /><br /><br />1.3开始使用 Reflection：<br /><br />用于 reflection 的类，如 Method，可以在 java.lang.relfect 包中找到。使用这些类的时候必须要遵循三个步骤：第一步是获得你想操作的类的 java.lang.Class 对象。在运行中的 Java 程序中，用 java.lang.Class 类来描述类和接口等。<br /><br />下面就是获得一个 Class 对象的方法之一：<br /><br />Class c = Class.forName("java.lang.String");<br /><br />这条语句得到一个 String 类的类对象。还有另一种方法，如下面的语句：<br /><br />Class c = int.class;<br /><br />或者<br /><br />Class c = Integer.TYPE;<br /><br />它们可获得基本类型的类信息。其中后一种方法中访问的是基本类型的封装类 (如 Integer) 中预先定义好的 TYPE 字段。<br /><br />第二步是调用诸如 getDeclaredMethods 的方法，以取得该类中定义的所有方法的列表。<br /><br />一旦取得这个信息，就可以进行第三步了——使用 reflection API 来操作这些信息，如下面这段代码：<br /><br />Class c = Class.forName("java.lang.String");<br /><br />Method m[] = c.getDeclaredMethods();<br /><br />System.out.println(m[0].toString());<br /><br />它将以文本方式打印出 String 中定义的第一个方法的原型。<br /><br />2．处理对象：<br /><br />如果要作一个开发工具像debugger之类的，你必须能发现filed values,以下是三个步骤:<br /><br />a.创建一个Class对象<br />b.通过getField 创建一个Field对象<br />c.调用Field.getXXX(Object)方法(XXX是Int,Float等，如果是对象就省略；Object是指实例).<br /><br />例如：<br />import java.lang.reflect.*;<br />import java.awt.*;<br /><br />class SampleGet {<br /><br />public static void main(String[] args) {<br />Rectangle r = new Rectangle(100, 325);<br />printHeight(r);<br /><br />}<br /><br />static void printHeight(Rectangle r) {<br />Field heightField;<br />Integer heightValue;<br />Class c = r.getClass();<br />try {<br />heightField = c.getField("height");<br />heightValue = (Integer) heightField.get(r);<br />System.out.println("Height: " + heightValue.toString());<br />} catch (NoSuchFieldException e) {<br />System.out.println(e);<br />} catch (SecurityException e) {<br />System.out.println(e);<br />} catch (IllegalAcces***ception e) {<br />System.out.println(e);<br />}<br />}<br />}<br /><br />三、安全性和反射：<br />在处理反射时安全性是一个较复杂的问题。反射经常由框架型代码使用，由于这一点，我们可能希望框架能够全面接入代码，无需考虑常规的接入限制。但是，在其它情况下，不受控制的接入会带来严重的安全性风险，例如当代码在不值得信任的代码共享的环境中运行时。<br /><br />由于这些互相矛盾的需求，Java编程语言定义一种多级别方法来处理反射的安全性。基本模式是对反射实施与应用于源代码接入相同的限制：<br /><br />n 从任意位置到类公共组件的接入<br /><br />n 类自身外部无任何到私有组件的接入<br /><br />n 受保护和打包（缺省接入）组件的有限接入<br /><br />不过至少有些时候，围绕这些限制还有一种简单的方法。我们可以在我们所写的类中，扩展一个普通的基本类java.lang.reflect.AccessibleObject 类。这个类定义了一种setAccessible方法，使我们能够启动或关闭对这些类中其中一个类的实例的接入检测。唯一的问题在于如果使用了安全性管理器，它将检测正在关闭接入检测的代码是否许可了这样做。如果未许可，安全性管理器抛出一个例外。<br /><br />下面是一段程序，在TwoString 类的一个实例上使用反射来显示安全性正在运行：<br /><br />public class ReflectSecurity {<br /><br />public static void main(String[] args) {<br /><br />try {<br /><br />TwoString ts = new TwoString("a", "b");<br /><br />Field field = clas.getDeclaredField("m_s1");<br /><br />// field.setAccessible(true);<br /><br />System.out.println("Retrieved value is " +<br /><br />field.get(inst));<br /><br />} catch (Exception ex) {<br /><br />ex.printStackTrace(System.out);<br /><br />}<br /><br />}<br /><br />}<br /><br />如果我们编译这一程序时，不使用任何特定参数直接从命令行运行，它将在field .get(inst)调用中抛出一个IllegalAcces***ception异常。如果我们不注释field.setAccessible(true)代码行，那么重新编译并重新运行该代码，它将编译成功。最后，如果我们在命令行添加了JVM参数-Djava.security.manager以实现安全性管理器，它仍然将不能通过编译，除非我们定义了ReflectSecurity类的许可权限。<br /><br />四、反射性能：<br />反射是一种强大的工具，但也存在一些不足。一个主要的缺点是对性能有影响。使用反射基本上是一种解释操作，我们可以告诉JVM，我们希望做什么并且它满足我们的要求。这类操作总是慢于只直接执行相同的操作。<br /><br />下面的程序是字段接入性能测试的一个例子，包括基本的测试方法。每种方法测试字段接入的一种形式 -- accessSame 与同一对象的成员字段协作，accessOther 使用可直接接入的另一对象的字段，accessReflection 使用可通过反射接入的另一对象的字段。在每种情况下，方法执行相同的计算 -- 循环中简单的加/乘顺序。<br /><br />程序如下：<br /><br />public int accessSame(int loops) {<br /><br />m_value = 0;<br /><br />for (int index = 0; index &lt; loops; index++) {<br /><br />m_value = (m_value + ADDITIVE_VALUE) *<br /><br />MULTIPLIER_VALUE;<br /><br />}<br /><br />return m_value;<br /><br />}<br /><br /><br /><br />public int accessReference(int loops) {<br /><br />TimingClass timing = new TimingClass();<br /><br />for (int index = 0; index &lt; loops; index++) {<br /><br />timing.m_value = (timing.m_value + ADDITIVE_VALUE) *<br /><br />MULTIPLIER_VALUE;<br /><br />}<br /><br />return timing.m_value;<br /><br />}<br /><br /><br /><br />public int accessReflection(int loops) throw* **ception {<br /><br />TimingClass timing = new TimingClass();<br /><br />try {<br /><br />Field field = TimingClass.class.<br /><br />getDeclaredField("m_value");<br /><br />for (int index = 0; index &lt; loops; index++) {<br /><br />int value = (field.getInt(timing) +<br /><br />ADDITIVE_VALUE) * MULTIPLIER_VALUE;<br /><br />field.setInt(timing, value);<br /><br />}<br /><br />return timing.m_value;<br /><br />} catch (Exception ex) {<br /><br />System.out.println("Error using reflection");<br /><br />throw ex;<br /><br />}<br /><br />}<br /><br />在上面的例子中，测试程序重复调用每种方法，使用一个大循环数，从而平均多次调用的时间衡量结果。平均值中不包括每种方法第一次调用的时间，因此初始化时间不是结果中的一个因素。下面的图清楚的向我们展示了每种方法字段接入的时间：<br /><br />图 1：字段接入时间 ：<br /><br /><br />我们可以看出：在前两副图中(Sun JVM)，使用反射的执行时间超过使用直接接入的1000倍以上。通过比较，IBM JVM可能稍好一些，但反射方法仍旧需要比其它方法长700倍以上的时间。任何JVM上其它两种方法之间时间方面无任何显著差异，但IBM JVM几乎比Sun JVM快一倍。最有可能的是这种差异反映了Sun Hot Spot JVM的专业优化，它在简单基准方面表现得很糟糕。反射性能是Sun开发1.4 JVM时关注的一个方面，它在反射方法调用结果中显示。在这类操作的性能方面，Sun 1.4.1 JVM显示了比1.3.1版本很大的改进。<br /><br />如果为为创建使用反射的对象编写了类似的计时测试程序，我们会发现这种情况下的差异不象字段和方法调用情况下那么显著。使用newInstance()调用创建一个简单的java.lang.Object实例耗用的时间大约是在Sun 1.3.1 JVM上使用new Object()的12倍，是在IBM 1.4.0 JVM的四倍，只是Sun 1.4.1 JVM上的两部。使用Array.newInstance(type, size)创建一个数组耗用的时间是任何测试的JVM上使用new type[size]的两倍，随着数组大小的增加，差异逐步缩小。<br /><br />结束语：<br />Java语言反射提供一种动态链接程序组件的多功能方法。它允许程序创建和控制任何类的对象(根据安全性限制)，无需提前硬编码目标类。这些特性使得反射特别适用于创建以非常普通的方式与对象协作的库。例如，反射经常在持续存储对象为数据库、XML或其它外部格式的框架中使用。Java reflection 非常有用，它使类和数据结构能按名称动态检索相关信息，并允许在运行着的程序中操作这些信息。Java 的这一特性非常强大，并且是其它一些常用语言，如 C、C++、Fortran 或者 Pascal 等都不具备的。<br /><br />但反射有两个缺点。第一个是性能问题。用于字段和方法接入时反射要远慢于直接代码。性能问题的程度取决于程序中是如何使用反射的。如果它作为程序运行中相对很少涉及的部分，缓慢的性能将不会是一个问题。即使测试中最坏情况下的计时图显示的反射操作只耗用几微秒。仅反射在性能关键的应用的核心逻辑中使用时性能问题才变得至关重要。<br /><br />许多应用中更严重的一个缺点是使用反射会模糊程序内部实际要发生的事情。程序人员希望在源代码中看到程序的逻辑，反射等绕过了源代码的技术会带来维护问题。反射代码比相应的直接代码更复杂，正如性能比较的代码实例中看到的一样。解决这些问题的最佳方案是保守地使用反射——仅在它可以真正增加灵活性的地方——记录其在目标类中的使用。</div>
<img src ="http://www.blogjava.net/love-sea/aggbug/132805.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/love-sea/" target="_blank">源自有缘</a> 2007-07-27 16:02 <a href="http://www.blogjava.net/love-sea/archive/2007/07/27/132805.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>&lt;c:forEach&gt;标签的使用（转）</title><link>http://www.blogjava.net/love-sea/archive/2007/07/25/132297.html</link><dc:creator>源自有缘</dc:creator><author>源自有缘</author><pubDate>Wed, 25 Jul 2007 06:16:00 GMT</pubDate><guid>http://www.blogjava.net/love-sea/archive/2007/07/25/132297.html</guid><wfw:comment>http://www.blogjava.net/love-sea/comments/132297.html</wfw:comment><comments>http://www.blogjava.net/love-sea/archive/2007/07/25/132297.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/love-sea/comments/commentRss/132297.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/love-sea/services/trackbacks/132297.html</trackback:ping><description><![CDATA[
		<table style="TABLE-LAYOUT: fixed">
				<tbody>
						<tr>
								<td>
										<div class="cnt">
												<div style="FONT-SIZE: 12px">
														<strong>
																<font size="2">&lt;c:forEach&gt;标签的使用</font>
														</strong>
														<br />
														<br />在JSP的开发中，迭代是经常要使用到的操作。例如，逐行的显示查询的结果等。在早期的JSP中，通常使用Scriptlets来实现Iterator或者Enumeration对象的迭代输出。现在，通过JSTL的迭代标签可以在很大的程度上简化迭代操作。<br /><br />           JSTL所支持的迭代标签有两个，分别是&lt;c:forEach&gt;和&lt;c:forTokens&gt;。在这里介绍的是&lt;c:forEach&gt;标签。<br /><br />           简单点说，&lt;c:forEach&gt;标签的作用就是迭代输出标签内部的内容。它既可以进行固定次数的迭代输出，也可以依据集合中对象的个数来决定迭代的次数。<br /><br />           &lt;c:forEach&gt;标签的语法定义如下所示。<br /><br />                    &lt;c:forEach var="name" items="expression" varStatus="name" <br /><br />                             begin="expression" end="expression" step="expression"&gt;<br /><br />                             body content <br /><br />                    &lt;/c:forEach&gt;<br /><br />           &lt;c:forEach&gt;标签具有以下一些属性：<br /><br />l            var：迭代参数的名称。在迭代体中可以使用的变量的名称，用来表示每一个迭代变量。类型为String。<br /><br />l            items：要进行迭代的集合。对于它所支持的类型将在下面进行讲解。<br /><br />l            varStatus：迭代变量的名称，用来表示迭代的状态，可以访问到迭代自身的信息。<br /><br />l            begin：如果指定了items，那么迭代就从items[begin]开始进行迭代；如果没有指定items，那么就从begin开始迭代。它的类型为整数。<br /><br />l            end：如果指定了items，那么就在items[end]结束迭代；如果没有指定items，那么就在end结束迭代。它的类型也为整数。<br /><br />l            step：迭代的步长。<br /><br />           &lt;c:forEach&gt;标签的items属性支持Java平台所提供的所有标准集合类型。此外，您可以使用该操作来迭代数组（包括基本类型数组）中的元素。它所支持的集合类型以及迭代的元素如下所示：<br /><br />l            java.util.Collection：调用iterator()来获得的元素。<br /><br />l            java.util.Map：通过java.util.Map.Entry所获得的实例。<br /><br />l            java.util.Iterator：迭代器元素。<br /><br />l            java.util.Enumeration：枚举元素。<br /><br />l            Object实例数组：数组元素。<br /><br />l            基本类型值数组：经过包装的数组元素。<br /><br />l            用逗号定界的String：分割后的子字符串。<br /><br />l            javax.servlet.jsp.jstl.sql.Result：SQL查询所获得的行。<br /><br />           不论是对整数还是对集合进行迭代，&lt;c:forEach&gt;的varStatus属性所起的作用相同。和var属性一样，varStatus用于创建限定了作用域的变量（改变量只在当前标签体内起作用）。不过，由varStatus属性命名的变量并不存储当前索引值或当前元素，而是赋予javax.servlet.jsp.jstl.core.LoopTagStatus类的实例。该类包含了一系列的特性，它们描述了迭代的当前状态，如下这些属性的含义如下所示：<br /><br />l            current：当前这次迭代的（集合中的）项。<br /><br />l            index：当前这次迭代从0开始的迭代索引。<br /><br />l            count：当前这次迭代从1开始的迭代计数。<br /><br />l            first：用来表明当前这轮迭代是否为第一次迭代，该属性为boolean类型。<br /><br />l            last：用来表明当前这轮迭代是否为最后一次迭代，该属性为boolean类型。<br /><br />l            begin：begin属性的值。<br /><br />l            end：end属性的值<br /><br />l            step：step属性的值<br /><br />下面就来看一个个基本的例子，表格隔行背景色变化<br />&lt;c:forEach var="item" items="${contents}" varStatus="status"&gt;<br />            &lt;tr &lt;c:if test="${status.count%2==0}"&gt;bgcolor="#CCCCFE"&lt;/c:if&gt; align="left"&gt;<br />            xxx</div>
												<div style="FONT-SIZE: 12px">            &lt;/tr&gt;<br />&lt;/c:forEach&gt;</div>
										</div>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/love-sea/aggbug/132297.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/love-sea/" target="_blank">源自有缘</a> 2007-07-25 14:16 <a href="http://www.blogjava.net/love-sea/archive/2007/07/25/132297.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSTL 入门: 表达式语言（需要多看几遍）</title><link>http://www.blogjava.net/love-sea/archive/2007/07/24/132095.html</link><dc:creator>源自有缘</dc:creator><author>源自有缘</author><pubDate>Tue, 24 Jul 2007 09:12:00 GMT</pubDate><guid>http://www.blogjava.net/love-sea/archive/2007/07/24/132095.html</guid><wfw:comment>http://www.blogjava.net/love-sea/comments/132095.html</wfw:comment><comments>http://www.blogjava.net/love-sea/archive/2007/07/24/132095.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/love-sea/comments/commentRss/132095.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/love-sea/services/trackbacks/132095.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JSTL 入门: 表达式语言										通过避免使用脚本编制元素来简化对 JSP 应用程序的软件维护																																																																																																																...&nbsp;&nbsp;<a href='http://www.blogjava.net/love-sea/archive/2007/07/24/132095.html'>阅读全文</a><img src ="http://www.blogjava.net/love-sea/aggbug/132095.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/love-sea/" target="_blank">源自有缘</a> 2007-07-24 17:12 <a href="http://www.blogjava.net/love-sea/archive/2007/07/24/132095.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring标签介绍</title><link>http://www.blogjava.net/love-sea/archive/2007/07/24/131983.html</link><dc:creator>源自有缘</dc:creator><author>源自有缘</author><pubDate>Tue, 24 Jul 2007 02:25:00 GMT</pubDate><guid>http://www.blogjava.net/love-sea/archive/2007/07/24/131983.html</guid><wfw:comment>http://www.blogjava.net/love-sea/comments/131983.html</wfw:comment><comments>http://www.blogjava.net/love-sea/archive/2007/07/24/131983.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/love-sea/comments/commentRss/131983.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/love-sea/services/trackbacks/131983.html</trackback:ping><description><![CDATA[Spring 标记库分类如下：<br /><br />　　1、spring:hasBindErrors <br /><br />　　2、spring:bind <br /><br />　　3、spring:transform <br /><br />　　4、spring:message <br /><br />　　5、spring:htmlEscape <br /><br />　　6、spring:theme <br /><br />　　下面我们来具体介绍一下用法：<br /><br />　　1、spring:hasBindErrors <br /><br />　　对应org.springframework.web.servlet.tags.BindErrorsTag标记库处理类。<br /><br />　　这个标记提供用于绑定对象的errors，如果这个标记被用到的话，那么关于这个对象的错误将在页面上显示出来。使用这个标记的前提条件是要先使用＜spring:bind＞标记,并且＜spring:hasBindErrors＞这个标记不能用来表示对象的状态，它仅仅可以绑定对象本身和对象的属性。 具体用法如下：<br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#c8c7b9" border="1"><tbody><tr><td>＜spring:hasBindErrors name="priceIncrease"＞<br />＜b＞Please fix all errors!＜/b＞<br />＜/spring:hasBindErrors＞</td></tr></tbody></table><br />　　通过这个简单的例子，我来具体说一下这个标记的属性吧。<br /><br />　　name：是要被检查的Bean的名字。这个属性是必需要的。<br /><br />　　这里是简单用法，所以就不介绍它包含的errors变量了。具体看英语文档。下同。<br /><br />　　2、spring:bind <br /><br />　　对应org.springframework.web.servlet.tags.BindTag标记库处理类<br /><br />　　这个标记用来为某个bean或bean 的属性赋值，通常和form一起用，相当于action的作用。它指明表单要提交到那个类或类的属性中去。<br /><br />　　其中path属性是必须的，指明转到的类的路径。举例如下：<br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#c8c7b9" border="1"><tbody><tr><td>＜form method="post"＞<br />＜table width="95%" bgcolor="f8f8ff" border="0" cellspacing="0" cellpadding="5"＞<br />＜tr＞ <br />＜td alignment="right" width="20%"＞Increase (%):＜/td＞ <br />＜spring:bind path="priceIncrease.percentage"＞ <br />＜td width="20%"＞ <br />＜input type="text" name="percentage" value="＜c:out value="${status.value}"/＞"＞ <br />＜/td＞<br />＜td width="60%"＞ <br />＜font color="red"＞＜c:out value="${status.errorMessage}"/＞＜/font＞<br />＜/td＞ <br />＜/spring:bind＞ <br />＜/tr＞<br />＜/table＞ <br />＜br＞<br />……………………省略<br />＜/form＞</td></tr></tbody></table>　3、spring:transform <br /><br />　　对应org.springframework.web.servlet.tags.TransformTag标记库处理类,这个标记用来转换表单中不与bean中的属性一一对应的那些属性，通常和＜spring:bind＞一起使用。＜spring:transform＞标记为＜spring:bind＞使用提供了更好的支持。<br /><br />　　属性如下：<br /><br />　　value：必需要的。和当前＜spring:bind＞标记指向的bean类相同。就是你要转换的实体类名。<br /><br />　　var：不是必需的。这个字符串被用来绑定输出结果到page，request, session或application scope.默认情况输出到jsp中。<br /><br />　　scope：不是必需的。前提条件var必须设置的情况下。它的值可以是page，request, session或application。<br /><br />　　4、spring:message 对应org.springframework.web.servlet.tags.MessageTag标记库处理类<br /><br />　　这个标记用来帮助springframework支持国际化。和JSTL的fmt:message标记类似。当然这个标记可以很好的工作的本地的springframework框架下。<br /><br />　　属性如下：<br /><br />　　code：不是必需的。用来查找message,如果没有被使用的话，text将被使用。<br /><br />　　text：不是必需的。假如code不存在的话，默认是text输出。当code和text都没有设置的话，标记将输出为null.<br /><br />　　var：不是必需的。这个字符串被用来绑定输出结果到page，request, session或application scope.默认情况输出到jsp中。<br /><br />　　scope：不是必需的。前提条件var必须设置的情况下。它的值可以是page，request, session或application。<br /><br />　　5、spring:htmlEscape <br /><br />　　对应org.springframework.web.servlet.tags.HtmlEscapeTag标记库处理类<br /><br />　　不常用，这里省略<br /><br />　　6、spring:theme <br /><br />　　对应org.springframework.web.servlet.tags.ThemeTag标记库处理类<br /><br />　　不常用，这里省略<br /><br />　　学习完这些用法后，让我们来看个具体的例子吧。<br /><br />　　配置步骤如下：<br /><br />　　目录结构图：<br /><br />-spirngapp <br />-WEB-INF <br />-classes <br />-lib <br />-src <br />-war <br /><br />　　1、将spring.tld拷贝到WEB-INF目录。<br /><br />　　2、将spring.jar拷贝到WEB-INF\lib包下<br /><br />　　举例如下：<br /><br />　　在web.xml中配置好taglib属性，代码如下：<br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#c8c7b9" border="1"><tbody><tr><td>＜?xml version="1.0" encoding="UTF-8"?＞<br />＜!DOCTYPE web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN' 'http://java.sun.com/dtd/web-app_2_3.dtd'＞<br />＜web-app＞<br />＜servlet＞<br />＜servlet-name＞springapp＜/servlet-name＞<br />＜servlet-class＞org.springframework.web.servlet.DispatcherServlet＜/servlet-class＞<br />＜load-on-startup＞1＜/load-on-startup＞<br />＜/servlet＞ <br />＜servlet-mapping＞ <br />＜servlet-name＞springapp＜/servlet-name＞<br />＜url-pattern＞*.htm＜/url-pattern＞ <br />＜/servlet-mapping＞<br />＜welcome-file-list＞ <br />＜welcome-file＞ index.jsp ＜/welcome-file＞<br />＜/welcome-file-list＞<br />＜taglib＞<br />＜taglib-uri＞/spring＜/taglib-uri＞<br />＜taglib-location＞/WEB-INF/spring.tld＜/taglib-location＞<br />＜/taglib＞<br />＜/web-app＞ </td></tr></tbody></table><br />　　jsp页面代码如下：<br /><br /><table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#c8c7b9" border="1"><tbody><tr><td>＜%@ include file="/WEB-INF/jsp/include.jsp" %＞<br />＜%@ taglib prefix="spring" uri="/spring" %＞<br />＜html＞<br />＜head＞<br />＜title＞＜fmt:message key="title"/＞＜/title＞<br />＜/head＞<br />＜body＞<br />＜h1＞<br />＜fmt:message key="priceincrease.heading"/＞<br />＜/h1＞<br />＜form method="post"＞<br />＜table width="95%" bgcolor="f8f8ff" border="0" cellspacing="0" cellpadding="5"＞ <br />＜tr＞<br />＜td alignment="right" width="20%"＞Increase (%):＜/td＞ <br />＜spring:bind path="priceIncrease.percentage"＞<br />＜td width="20%"＞<br />＜input type="text" name="percentage" value="＜c:out value="${status.value}"/＞"＞ <br />＜/td＞ <br />＜td width="60%"＞<br />＜font color="red"＞<br />＜c:out value="${status.errorMessage}"/＞<br />＜/font＞<br />＜/td＞<br />＜/spring:bind＞ <br />＜/tr＞<br />＜/table＞<br />＜br＞<br />＜spring:hasBindErrors name="priceIncrease"＞<br />＜b＞Please fix all errors!＜/b＞ <br />＜/spring:hasBindErrors＞ ＜br＞＜br＞<br />＜input type="submit" alignment="center" value="Execute"＞<br />＜/form＞<br />＜a href="＜c:url value="hello.htm"/＞"＞Home＜/a＞<br />＜/body＞<br />＜/html＞</td></tr></tbody></table><br />　　＜spring:bind＞标记经常用来绑定＜input＞表单元素以便提交给PriceIncrease.java,其实PriceIncrease.java中就是包含一些getter和setter的方法的类。当用户按下按钮提交的时候，其表单中的值实际上就被framework放到了PriceIncrease.java中。＜spring:bind＞经常和form一起使用.这个${status.errorMessage}和${status.value}是一个framework定义的特殊变量，它们被用来显示错误信息和当前表单中的数据。呵呵，今天就到此为止吧，关于Spring Framework标记库的详细用法，请参考其文档。<br /><img src ="http://www.blogjava.net/love-sea/aggbug/131983.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/love-sea/" target="_blank">源自有缘</a> 2007-07-24 10:25 <a href="http://www.blogjava.net/love-sea/archive/2007/07/24/131983.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一些简单的javaScript 语句</title><link>http://www.blogjava.net/love-sea/archive/2007/07/20/131531.html</link><dc:creator>源自有缘</dc:creator><author>源自有缘</author><pubDate>Fri, 20 Jul 2007 09:23:00 GMT</pubDate><guid>http://www.blogjava.net/love-sea/archive/2007/07/20/131531.html</guid><wfw:comment>http://www.blogjava.net/love-sea/comments/131531.html</wfw:comment><comments>http://www.blogjava.net/love-sea/archive/2007/07/20/131531.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/love-sea/comments/commentRss/131531.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/love-sea/services/trackbacks/131531.html</trackback:ping><description><![CDATA[
		<p>
				<br />//删除时要做确认  传参数时 记得用单引号<br />function _delete(newsid){<br />   <br />    if(confirm('确实要删除吗？')){ <br /> <br /> window.location.href=' &lt;%=request.getContextPath()%&gt;/news/delete.do?newid='+newsid;<br /> <br /> } <br />   <br />    return false;<br />   <br />   }<br /><br />//打开一个新的窗口 并限制窗口的大小</p>
		<p> function _opendis(url,left1,top1)<br /> {</p>
		<p>  window.open( url,"","left=600,top=300,width=400,height=400,scrollbars");  <br /> <br /> }<br /><br /><br />function _val() {<br /> <br /> if(form.title.value==""){<br /> <br />  alert('标题不能为空！');//验证完整性<br />  form.title.focus();<br />  return false;<br /> }<br /> <br />  form.context.value=doc.body.innerHTML;  //将文本编辑器的东西赋值给一个文本域<br /> <br />  form.submit();</p>
		<p> } </p>
<img src ="http://www.blogjava.net/love-sea/aggbug/131531.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/love-sea/" target="_blank">源自有缘</a> 2007-07-20 17:23 <a href="http://www.blogjava.net/love-sea/archive/2007/07/20/131531.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>