﻿<?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-J2EE开拓者</title><link>http://J2eeExploiter.blogjava.net/</link><description>团队有从事WAP开发，框架开发等，希望和自己的一帮好友及广大爱好Java的朋友共同建立一个Java开发的知识库</description><language>zh-cn</language><lastBuildDate>Sat, 07 Mar 2026 09:21:48 GMT</lastBuildDate><pubDate>Sat, 07 Mar 2026 09:21:48 GMT</pubDate><ttl>60</ttl><item><title>实现log4j日志文件在相对路径保存</title><link>http://www.blogjava.net/zhangrenquan/articles/284624.html</link><dc:creator>kelven</dc:creator><author>kelven</author><pubDate>Mon, 29 Jun 2009 08:11:00 GMT</pubDate><guid>http://www.blogjava.net/zhangrenquan/articles/284624.html</guid><description><![CDATA[<p><span class="Apple-style-span" style="font-weight: normal; font-size: 12px; word-spacing: 0px; text-transform: none; color: rgb(0,0,0); text-indent: 0px; line-height: 18px; font-style: normal; white-space: normal; letter-spacing: normal; border-collapse: separate; text-align: left; font-variant: normal; orphans: 2; widows: 2"><span class="hilite1" style="background-color: rgb(255,255,0)">Log4j</span>日志输出路径只能设定成绝对路径，这个在web项目中就变得很不方便了。<span class="Apple-converted-space"> </span><br />
比如我想要设定日志保存在webapp/log<span class="Apple-converted-space"> </span><br />
<br />
参考了网上资料：<span class="Apple-converted-space"> </span><br />
<a style="color: rgb(16,138,198); text-decoration: underline" href="http://hi.baidu.com/suofang/blog/item/6cf2befbd1ff07234f4aea90.html" target="_blank">http://hi.baidu.com/suofang/blog/item/6cf2befbd1ff07234f4aea90.html</a><span class="Apple-converted-space"> </span><br />
下面是引入内容：<span class="Apple-converted-space"> </span><br />
<br />
方法一主要是扩展了<span class="hilite1" style="background-color: rgb(255,255,0)">log4j</span>的RollingFileAppender类，其他的FileAppender同样道理。扩展的方法，就是用一个子类去覆盖setFile方法，这个方法在<span class="hilite1" style="background-color: rgb(255,255,0)">log4j</span>读取配置文件生成appender的时候调用，传入的就是配置文件中的路径，这样我就可以按照自己的想法在路径前面加上根路径了。这种方法可以在<span class="hilite1" style="background-color: rgb(255,255,0)">log4j</span>.properties中用相对路径自由配置<span class="hilite1" style="background-color: rgb(255,255,0)">log4j</span>.appender.A1.File属性来决定生成的日志相对web应用根目录的位置。<span class="Apple-converted-space"> </span><br />
<br />
方法二是利用服务器vm中已经存在的环境变量如${catalina.home}来设置相对于${catalina.home}的日志路径，日志只能放到服务器子目录里，而且如果是用的其它服务器，则要改对应的环境变量。此方法平台移植不方便。<span class="Apple-converted-space"> </span><br />
<br />
方法三是扩展ActionServlet类，覆盖其init()方法，新方法中载入<span class="hilite1" style="background-color: rgb(255,255,0)">log4j</span>.properties位置的参数，可以自由配置<span class="hilite1" style="background-color: rgb(255,255,0)">log4j</span>的配置文件的名字和存放位置。也可自由配置<span class="hilite1" style="background-color: rgb(255,255,0)">log4j</span>日志文件的相对于当前应用的路径。<span class="Apple-converted-space"> </span><br />
<br />
对于第三个方法，作者提出了个问题：<span class="Apple-converted-space"> </span><br />
<span class="hilite1" style="background-color: rgb(255,255,0)">log4j</span>配置文件的位置，不让其在<span class="hilite2" style="background-color: rgb(85,255,85)">web-inf</span>/classes目录，因为在加载此Servlet之前，服务器如tomcat启动时会自动搜索<span class="hilite2" style="background-color: rgb(85,255,85)">web-inf</span>目录和<span class="hilite2" style="background-color: rgb(85,255,85)">web-inf</span>/classes目录中<span class="hilite1" style="background-color: rgb(255,255,0)">log4j</span>.properties文件，如有则自动加载。<span class="hilite1" style="background-color: rgb(255,255,0)">log4j</span>属性文件加载后,由于该属性文件中<span class="hilite1" style="background-color: rgb(255,255,0)">log4j</span>.appender.A1.File的值用的是相对路径，自动加载配置便会出错：<span class="Apple-converted-space"> </span><br />
<span class="hilite1" style="background-color: rgb(255,255,0)">log4j</span>:ERROR setFile(null,true) call failed.<span class="Apple-converted-space"> </span><br />
java.io.FileNotFoundException:<span class="Apple-converted-space"> </span><span class="hilite2" style="background-color: rgb(85,255,85)">WEB-INF</span>\logs\bysxxglxt.log<span class="Apple-converted-space"> </span><br />
(系统找不到指定的路径。)<span class="Apple-converted-space"> </span><br />
<br />
尽管后面加载扩展的ActionServlet中正确设置了<span class="hilite1" style="background-color: rgb(255,255,0)">log4j</span>属性文件并正常加载了，但还是报的这个错，怪不爽的。只有更改<span class="hilite1" style="background-color: rgb(255,255,0)">log4j</span>属性文件名字或者更改其存放位置，让其不能自动加载了，不过还是有两个警告：<span class="Apple-converted-space"> </span><br />
<span class="hilite1" style="background-color: rgb(255,255,0)">log4j</span>:WARN No appenders could be found for logger (org.apache.commons.digester.Digester.sax).<span class="Apple-converted-space"> </span><br />
<span class="hilite1" style="background-color: rgb(255,255,0)">log4j</span>:WARN Please initialize the<span class="Apple-converted-space"> </span><span class="hilite1" style="background-color: rgb(255,255,0)">log4j</span><span class="Apple-converted-space"> </span>system properly.<span class="Apple-converted-space"> </span><br />
<br />
新的发现：<span class="Apple-converted-space"> </span><br />
由于spring也会加载<span class="hilite1" style="background-color: rgb(255,255,0)">log4j</span>.properties，如果加载不到就往控制台打log信息，总觉得有些碍眼，于是想办法去掉。Spring提供了一个Log4jConfigListener，本身就能通过web.xml中配置来指定位置加载<span class="hilite1" style="background-color: rgb(255,255,0)">log4j</span>配置文件和log输出路径，注意该listener需要放在spring的Listener之前。<span class="Apple-converted-space"> </span><br />
事实上，Log4jConfigListener更适合<span class="hilite1" style="background-color: rgb(255,255,0)">log4j</span>在web工程中使用，原因如下：<span class="Apple-converted-space"> </span><br />
1. 动态的改变记录级别和策略，不需要重启Web应用，如《Effective Enterprise Java》所说。<span class="Apple-converted-space"> </span><br />
&nbsp;&nbsp; 2. 把log文件定在 /<span class="hilite2" style="background-color: rgb(85,255,85)">WEB-INF</span>/logs/ 而不需要写绝对路径。<span class="Apple-converted-space"> </span><br />
因为 系统把web目录的路径压入一个叫webapp.root的系统变量。这样写log文件路径时不用写绝对路径了.<span class="Apple-converted-space"> </span><br />
<span class="hilite1" style="background-color: rgb(255,255,0)">log4j</span>.appender.logfile.File=${webapp.root}/<span class="hilite2" style="background-color: rgb(85,255,85)">WEB-INF</span>/logs/myfuse.log<span class="Apple-converted-space"> </span><br />
&nbsp;&nbsp; 3. 可以把<span class="hilite1" style="background-color: rgb(255,255,0)">log4j</span>.properties和其他properties一起放在/<span class="hilite2" style="background-color: rgb(85,255,85)">WEB-INF</span>/ ，而不是Class-Path。<span class="Apple-converted-space"> </span><br />
&nbsp;&nbsp; 4.log4jRefreshInterval为60000表示 开一条watchdog线程每60秒扫描一下配置文件的变化;<span class="Apple-converted-space"> </span><br />
&nbsp;&nbsp; 在web.xml 添加<span class="Apple-converted-space"> </span><br />
</p>
<div class="dp-highlighter" style="padding-right: 1px; padding-left: 1px; font-size: 12px; padding-bottom: 1px; margin-left: 9px; overflow: auto; width: 97%; padding-top: 1px; background-color: transparent">
<div class="bar">
<div class="tools" style="padding-right: 3px; padding-left: 3px; font-weight: bold; padding-bottom: 3px; margin: 0px; color: black; padding-top: 3px; text-align: left">Xml代码<span class="Apple-converted-space"> </span></embed></div>
</div>
<ol class="dp-xml" style="border-right: rgb(209,215,220) 1px solid; padding-right: 0px; border-top: rgb(209,215,220) 1px solid; padding-left: 0px; font-size: 1em; padding-bottom: 2px; margin: 0px 0px 1px; border-left: rgb(209,215,220) 1px solid; color: rgb(43,145,175); line-height: 1.4em; padding-top: 2px; border-bottom: rgb(209,215,220) 1px solid; list-style-type: decimal; background-color: rgb(255,255,255)">
    <li style="padding-right: 0px; padding-left: 10px; font-size: 1em; padding-bottom: 0px; margin: 0px 0px 0px 38px; border-left: rgb(209,215,220) 1px solid; line-height: 18px; padding-top: 0px; background-color: rgb(250,250,250)"><span style="color: black"><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&lt;</span><span class="tag-name" style="font-weight: bold; color: rgb(0,102,153)">context-param</span><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&gt;</span><span style="color: black">&nbsp;&nbsp;</span></span>
    <li style="padding-right: 0px; padding-left: 10px; font-size: 1em; padding-bottom: 0px; margin: 0px 0px 0px 38px; border-left: rgb(209,215,220) 1px solid; line-height: 18px; padding-top: 0px; background-color: rgb(250,250,250)"><span style="color: black">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&lt;</span><span class="tag-name" style="font-weight: bold; color: rgb(0,102,153)">param-name</span><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&gt;</span><span style="color: black">log4jConfigLocation</span><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&lt;/</span><span class="tag-name" style="font-weight: bold; color: rgb(0,102,153)">param-name</span><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&gt;</span><span style="color: black">&nbsp;&nbsp;</span></span>
    <li style="padding-right: 0px; padding-left: 10px; font-size: 1em; padding-bottom: 0px; margin: 0px 0px 0px 38px; border-left: rgb(209,215,220) 1px solid; line-height: 18px; padding-top: 0px; background-color: rgb(250,250,250)"><span style="color: black">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&lt;</span><span class="tag-name" style="font-weight: bold; color: rgb(0,102,153)">param-value</span><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&gt;</span><span style="color: black"><span class="hilite2" style="color: black; background-color: rgb(85,255,85)">WEB-INF</span>/<span class="hilite1" style="color: black; background-color: rgb(255,255,0)">log4j</span>.properties</span><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&lt;/</span><span class="tag-name" style="font-weight: bold; color: rgb(0,102,153)">param-value</span><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&gt;</span><span style="color: black">&nbsp;&nbsp;</span></span>
    <li style="padding-right: 0px; padding-left: 10px; font-size: 1em; padding-bottom: 0px; margin: 0px 0px 0px 38px; border-left: rgb(209,215,220) 1px solid; line-height: 18px; padding-top: 0px; background-color: rgb(250,250,250)"><span style="color: black"><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&lt;/</span><span class="tag-name" style="font-weight: bold; color: rgb(0,102,153)">context-param</span><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&gt;</span><span style="color: black">&nbsp;&nbsp;</span></span>
    <li style="padding-right: 0px; padding-left: 10px; font-size: 1em; padding-bottom: 0px; margin: 0px 0px 0px 38px; border-left: rgb(209,215,220) 1px solid; line-height: 18px; padding-top: 0px; background-color: rgb(250,250,250)"><span style="color: black">&nbsp;&nbsp;</span>
    <li style="padding-right: 0px; padding-left: 10px; font-size: 1em; padding-bottom: 0px; margin: 0px 0px 0px 38px; border-left: rgb(209,215,220) 1px solid; line-height: 18px; padding-top: 0px; background-color: rgb(250,250,250)"><span style="color: black"><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&lt;</span><span class="tag-name" style="font-weight: bold; color: rgb(0,102,153)">context-param</span><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&gt;</span><span style="color: black">&nbsp;&nbsp;</span></span>
    <li style="padding-right: 0px; padding-left: 10px; font-size: 1em; padding-bottom: 0px; margin: 0px 0px 0px 38px; border-left: rgb(209,215,220) 1px solid; line-height: 18px; padding-top: 0px; background-color: rgb(250,250,250)"><span style="color: black">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&lt;</span><span class="tag-name" style="font-weight: bold; color: rgb(0,102,153)">param-name</span><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&gt;</span><span style="color: black">log4jRefreshInterval</span><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&lt;/</span><span class="tag-name" style="font-weight: bold; color: rgb(0,102,153)">param-name</span><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&gt;</span><span style="color: black">&nbsp;&nbsp;</span></span>
    <li style="padding-right: 0px; padding-left: 10px; font-size: 1em; padding-bottom: 0px; margin: 0px 0px 0px 38px; border-left: rgb(209,215,220) 1px solid; line-height: 18px; padding-top: 0px; background-color: rgb(250,250,250)"><span style="color: black">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&lt;</span><span class="tag-name" style="font-weight: bold; color: rgb(0,102,153)">param-value</span><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&gt;</span><span style="color: black">60000</span><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&lt;/</span><span class="tag-name" style="font-weight: bold; color: rgb(0,102,153)">param-value</span><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&gt;</span><span style="color: black">&nbsp;&nbsp;</span></span>
    <li style="padding-right: 0px; padding-left: 10px; font-size: 1em; padding-bottom: 0px; margin: 0px 0px 0px 38px; border-left: rgb(209,215,220) 1px solid; line-height: 18px; padding-top: 0px; background-color: rgb(250,250,250)"><span style="color: black"><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&lt;/</span><span class="tag-name" style="font-weight: bold; color: rgb(0,102,153)">context-param</span><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&gt;</span><span style="color: black">&nbsp;&nbsp;</span></span>
    <li style="padding-right: 0px; padding-left: 10px; font-size: 1em; padding-bottom: 0px; margin: 0px 0px 0px 38px; border-left: rgb(209,215,220) 1px solid; line-height: 18px; padding-top: 0px; background-color: rgb(250,250,250)"><span style="color: black">&nbsp;&nbsp;</span>
    <li style="padding-right: 0px; padding-left: 10px; font-size: 1em; padding-bottom: 0px; margin: 0px 0px 0px 38px; border-left: rgb(209,215,220) 1px solid; line-height: 18px; padding-top: 0px; background-color: rgb(250,250,250)"><span style="color: black"><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&lt;</span><span class="tag-name" style="font-weight: bold; color: rgb(0,102,153)">listener</span><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&gt;</span><span style="color: black">&nbsp;&nbsp;</span></span>
    <li style="padding-right: 0px; padding-left: 10px; font-size: 1em; padding-bottom: 0px; margin: 0px 0px 0px 38px; border-left: rgb(209,215,220) 1px solid; line-height: 18px; padding-top: 0px; background-color: rgb(250,250,250)"><span style="color: black">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&lt;</span><span class="tag-name" style="font-weight: bold; color: rgb(0,102,153)">listener-class</span><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&gt;</span><span style="color: black">org.springframework.web.util.Log4jConfigListener</span><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&lt;/</span><span class="tag-name" style="font-weight: bold; color: rgb(0,102,153)">listener-class</span><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&gt;</span><span style="color: black">&nbsp;&nbsp;</span></span>
    <li style="padding-right: 0px; padding-left: 10px; font-size: 1em; padding-bottom: 0px; margin: 0px 0px 0px 38px; border-left: rgb(209,215,220) 1px solid; line-height: 18px; padding-top: 0px; background-color: rgb(250,250,250)"><span style="color: black"><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&lt;/</span><span class="tag-name" style="font-weight: bold; color: rgb(0,102,153)">listener</span><span class="tag" style="font-weight: bold; color: rgb(0,102,153)">&gt;</span><span style="color: black">&nbsp;&nbsp; <br />
    </span></span></li>
</ol>
</div>
</span><img src ="http://J2eeExploiter.blogjava.net/aggbug/284624.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangrenquan/" target="_blank">kelven</a> 2009-06-29 16:11 <a href="http://www.blogjava.net/zhangrenquan/articles/284624.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp验证码</title><link>http://www.blogjava.net/zhangrenquan/articles/284617.html</link><dc:creator>kelven</dc:creator><author>kelven</author><pubDate>Mon, 29 Jun 2009 07:47:00 GMT</pubDate><guid>http://www.blogjava.net/zhangrenquan/articles/284617.html</guid><description><![CDATA[<p>&lt;%@ page language="java" pageEncoding="UTF-8"%&gt;<br />
&lt;%@ pagecontentType<br />
="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*,com.swetake.util.Qrcode"%&gt;<br />
&lt;%!Color getRandColor(int fc, int bc) {//给定范围获得随机颜色<br />
&nbsp;&nbsp; Random random = new Random();<br />
&nbsp;&nbsp; if (fc &gt; 255)<br />
&nbsp;&nbsp;&nbsp; fc = 255;<br />
&nbsp;&nbsp; if (bc &gt; 255)<br />
&nbsp;&nbsp;&nbsp; bc = 255;<br />
&nbsp;&nbsp; int r = fc + random.nextInt(bc - fc);<br />
&nbsp;&nbsp; int g = fc + random.nextInt(bc - fc);<br />
&nbsp;&nbsp; int b = fc + random.nextInt(bc - fc);<br />
&nbsp;&nbsp; return new Color(r, g, b);<br />
}%&gt;<br />
&lt;%<br />
//设置页面不缓存<br />
response.setHeader("Pragma", "No-cache");<br />
response.setHeader("Cache-Control", "no-cache");<br />
response.setDateHeader("Expires", 0);</p>
<p>//&nbsp;&nbsp;&nbsp; 在内存中创建图象<br />
int width = 60, height = 20;<br />
BufferedImage image = new BufferedImage(width, height,<br />
&nbsp;&nbsp;&nbsp; BufferedImage.TYPE_INT_RGB);</p>
<p>//&nbsp;&nbsp;&nbsp; 获取图形上下文<br />
Graphics g = image.getGraphics();</p>
<p>//生成随机类<br />
Random random = new Random();</p>
<p>//&nbsp;&nbsp;&nbsp; 设定背景色<br />
g.setColor(getRandColor(200, 250));<br />
g.fillRect(0, 0, width, height);</p>
<p>//设定字体<br />
g.setFont(new Font("Comic&nbsp;&nbsp;&nbsp; Sans&nbsp;&nbsp;&nbsp; MS", Font.PLAIN, 20));</p>
<p>//画边框<br />
//g.setColor(new&nbsp;&nbsp;&nbsp; Color());<br />
//g.drawRect(0,0,width-1,height-1);</p>
<p>//&nbsp;&nbsp;&nbsp; 随机产生155条干扰线，使图象中的认证码不易被其它程序探测到<br />
g.setColor(getRandColor(160, 200));<br />
for (int i = 0; i &lt; 155; i++) {<br />
&nbsp;&nbsp; int x = random.nextInt(width);<br />
&nbsp;&nbsp; int y = random.nextInt(height);<br />
&nbsp;&nbsp; int xl = random.nextInt(12);<br />
&nbsp;&nbsp; int yl = random.nextInt(12);<br />
&nbsp;&nbsp; g.drawLine(x, y, x + xl, y + yl);<br />
}</p>
<p>//&nbsp;&nbsp;&nbsp; 取随机产生的认证码(4位数字)<br />
String sRand = "";<br />
for (int i = 0; i &lt; 4; i++) {<br />
&nbsp;&nbsp; String rand = String.valueOf(random.nextInt(10));<br />
&nbsp;&nbsp; sRand += rand;<br />
&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp; 将认证码显示到图象中<br />
&nbsp;&nbsp; g.setColor(new Color(20 + random.nextInt(110), 20 + random&nbsp;&nbsp; .nextInt(110), 20 + random.nextInt(110)));<br />
&nbsp;&nbsp; //调用函数出来的颜色相同，可能是因为种子太接近，所以只能直接生成<br />
&nbsp;&nbsp; g.drawString(rand, 13 * i + 6, 16);<br />
}</p>
<p>//&nbsp;&nbsp;&nbsp; 将认证码存入SESSION<br />
session.setAttribute("rand", sRand);</p>
<p><br />
//&nbsp;&nbsp;&nbsp; 图象生效<br />
g.dispose();<br />
out.clear();<br />
out = pageContext.pushBody();</p>
<p>//&nbsp;&nbsp;&nbsp; 输出图象到页面<br />
ImageIO.write(image, "JPEG", response.getOutputStream());<br />
%&gt;</p>
<p>&nbsp;<br />
<br />
<span style="color: red">注:要先下载com.swetake.util.Qrcode包</span><br />
</p><img src ="http://J2eeExploiter.blogjava.net/aggbug/284617.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangrenquan/" target="_blank">kelven</a> 2009-06-29 15:47 <a href="http://www.blogjava.net/zhangrenquan/articles/284617.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA断点续传(B/S) </title><link>http://www.blogjava.net/zhangrenquan/articles/163212.html</link><dc:creator>kelven</dc:creator><author>kelven</author><pubDate>Mon, 26 Nov 2007 08:43:00 GMT</pubDate><guid>http://www.blogjava.net/zhangrenquan/articles/163212.html</guid><description><![CDATA[<p>JAVA断点续传(B/S) <br />
<a href="http://www.java-ren.com/article/2007/11/26/20071126164656582.html">http://www.java-ren.com/article/2007/11/26/20071126164656582.html</a><br />
</p><img src ="http://J2eeExploiter.blogjava.net/aggbug/163212.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangrenquan/" target="_blank">kelven</a> 2007-11-26 16:43 <a href="http://www.blogjava.net/zhangrenquan/articles/163212.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DWR让AJAX如此简单</title><link>http://www.blogjava.net/zhangrenquan/articles/162106.html</link><dc:creator>kelven</dc:creator><author>kelven</author><pubDate>Wed, 21 Nov 2007 07:48:00 GMT</pubDate><guid>http://www.blogjava.net/zhangrenquan/articles/162106.html</guid><description><![CDATA[<a href="http://www.java-ren.com/article/2007/9/27/2007927111512398.html">http://www.java-ren.com/article/2007/9/27/2007927111512398.html</a><img src ="http://J2eeExploiter.blogjava.net/aggbug/162106.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangrenquan/" target="_blank">kelven</a> 2007-11-21 15:48 <a href="http://www.blogjava.net/zhangrenquan/articles/162106.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>js控制excel打印完美解决方案</title><link>http://www.blogjava.net/zhangrenquan/articles/162105.html</link><dc:creator>kelven</dc:creator><author>kelven</author><pubDate>Wed, 21 Nov 2007 07:44:00 GMT</pubDate><guid>http://www.blogjava.net/zhangrenquan/articles/162105.html</guid><description><![CDATA[<p><a href="http://www.java-ren.com/article/2007/11/19/20071119151630988.html">http://www.java-ren.com/article/2007/11/19/20071119151630988.html</a></p><img src ="http://J2eeExploiter.blogjava.net/aggbug/162105.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangrenquan/" target="_blank">kelven</a> 2007-11-21 15:44 <a href="http://www.blogjava.net/zhangrenquan/articles/162105.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JS中数字金额转大写</title><link>http://www.blogjava.net/zhangrenquan/articles/162103.html</link><dc:creator>kelven</dc:creator><author>kelven</author><pubDate>Wed, 21 Nov 2007 07:42:00 GMT</pubDate><guid>http://www.blogjava.net/zhangrenquan/articles/162103.html</guid><description><![CDATA[<a href="http://www.java-ren.com/article/2007/11/10/20071110111726980.html">http://www.java-ren.com/article/2007/11/10/20071110111726980.html</a><img src ="http://J2eeExploiter.blogjava.net/aggbug/162103.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangrenquan/" target="_blank">kelven</a> 2007-11-21 15:42 <a href="http://www.blogjava.net/zhangrenquan/articles/162103.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript导航菜单</title><link>http://www.blogjava.net/zhangrenquan/articles/89948.html</link><dc:creator>kelven</dc:creator><author>kelven</author><pubDate>Mon, 25 Dec 2006 09:16:00 GMT</pubDate><guid>http://www.blogjava.net/zhangrenquan/articles/89948.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &lt;!				DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"				&gt;																		&lt;				html 				xmlns				="h...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhangrenquan/articles/89948.html'>阅读全文</a><img src ="http://J2eeExploiter.blogjava.net/aggbug/89948.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangrenquan/" target="_blank">kelven</a> 2006-12-25 17:16 <a href="http://www.blogjava.net/zhangrenquan/articles/89948.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVASCRIPT控制MEDIA PLAYER的功能实现</title><link>http://www.blogjava.net/zhangrenquan/articles/89947.html</link><dc:creator>kelven</dc:creator><author>kelven</author><pubDate>Mon, 25 Dec 2006 09:14:00 GMT</pubDate><guid>http://www.blogjava.net/zhangrenquan/articles/89947.html</guid><description><![CDATA[<p> </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">script </span>
				<span style="COLOR: #ff0000">language</span>
				<span style="COLOR: #0000ff">=javascript </span>
				<span style="COLOR: #ff0000">defer</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">
						<br />
				</span>
				<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">var</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> volv</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">phx.settings.volume;<br />setInterval(</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">if(phx.playState==3){time.innerText=phx.controls.currentPositionString+\'|\'+<br />phx.currentMedia.durationString}</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">1000</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br />setInterval(</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">if(phx.playState==3){itcn.style.width=parseInt(245*(phx.controls.currentPosition/phx.currentMedia.duration))}</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">,</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">1000</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);<br /></span>
				<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> volup(){<br /></span>
				<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">if</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> (volv</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">100</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">){<br />volv</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">+=</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">5</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;<br />phx.settings.volume</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">volv;<br />time.innerText</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">volv;}<br /></span>
				<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">else</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{time.innerText</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">\'最大\';}<br />}<br /></span>
				<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">function</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> voldown(){<br /></span>
				<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">if</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> (volv</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&gt;</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">0</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">){<br />volv</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">-=</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">5</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;<br />phx.settings.volume</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">volv;<br />time.innerText</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">volv;}<br /></span>
				<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">else</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">{time.innerText</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">\'最小\';}<br />}<br /></span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">script</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">p</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000"> <br /></span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">object </span>
				<span style="COLOR: #ff0000">classid</span>
				<span style="COLOR: #0000ff">="clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6"</span>
				<span style="COLOR: #ff0000"> id</span>
				<span style="COLOR: #0000ff">="phx"</span>
				<span style="COLOR: #ff0000"> width</span>
				<span style="COLOR: #0000ff">="245"</span>
				<span style="COLOR: #ff0000"> height</span>
				<span style="COLOR: #0000ff">="240"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="URL"</span>
				<span style="COLOR: #ff0000"> value</span>
				<span style="COLOR: #0000ff">="http://www.wfzx.net/wf-phx/music/she_superstar.wmv"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="rate"</span>
				<span style="COLOR: #ff0000"> value</span>
				<span style="COLOR: #0000ff">="1"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="balance"</span>
				<span style="COLOR: #ff0000"> value</span>
				<span style="COLOR: #0000ff">="0"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="currentPosition"</span>
				<span style="COLOR: #ff0000"> value</span>
				<span style="COLOR: #0000ff">="0"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="defaultFrame"</span>
				<span style="COLOR: #ff0000"> value</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="playCount"</span>
				<span style="COLOR: #ff0000"> value</span>
				<span style="COLOR: #0000ff">="1"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="autoStart"</span>
				<span style="COLOR: #ff0000"> value</span>
				<span style="COLOR: #0000ff">="-1"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="currentMarker"</span>
				<span style="COLOR: #ff0000"> value</span>
				<span style="COLOR: #0000ff">="0"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="invokeURLs"</span>
				<span style="COLOR: #ff0000"> value</span>
				<span style="COLOR: #0000ff">="-1"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="baseURL"</span>
				<span style="COLOR: #ff0000"> value</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="volume"</span>
				<span style="COLOR: #ff0000"> value</span>
				<span style="COLOR: #0000ff">="50"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="mute"</span>
				<span style="COLOR: #ff0000"> value</span>
				<span style="COLOR: #0000ff">="0"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="uiMode"</span>
				<span style="COLOR: #ff0000"> value</span>
				<span style="COLOR: #0000ff">="full"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="stretchToFit"</span>
				<span style="COLOR: #ff0000"> value</span>
				<span style="COLOR: #0000ff">="0"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="windowlessVideo"</span>
				<span style="COLOR: #ff0000"> value</span>
				<span style="COLOR: #0000ff">="0"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="enabled"</span>
				<span style="COLOR: #ff0000"> value</span>
				<span style="COLOR: #0000ff">="-1"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="enableContextMenu"</span>
				<span style="COLOR: #ff0000"> value</span>
				<span style="COLOR: #0000ff">="-1"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="fullScreen"</span>
				<span style="COLOR: #ff0000"> value</span>
				<span style="COLOR: #0000ff">="0"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="SAMIStyle"</span>
				<span style="COLOR: #ff0000"> value</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">param </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="SAMILang"</span>
				<span style="COLOR: #0000ff">&gt;</span>
		</div><img src ="http://J2eeExploiter.blogjava.net/aggbug/89947.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangrenquan/" target="_blank">kelven</a> 2006-12-25 17:14 <a href="http://www.blogjava.net/zhangrenquan/articles/89947.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript读取xml</title><link>http://www.blogjava.net/zhangrenquan/articles/89946.html</link><dc:creator>kelven</dc:creator><author>kelven</author><pubDate>Mon, 25 Dec 2006 09:12:00 GMT</pubDate><guid>http://www.blogjava.net/zhangrenquan/articles/89946.html</guid><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #008000">/**</span>
				<span style="COLOR: #008000">
						<br /> * 得到XML文件属性的集合对象<br /> * </span>
				<span style="COLOR: #808080">@param</span>
				<span style="COLOR: #008000"> xmlDoc XML对象<br /> * </span>
				<span style="COLOR: #808080">@param</span>
				<span style="COLOR: #008000"> name 属性名称 如: user<br /> * </span>
				<span style="COLOR: #808080">@return</span>
				<span style="COLOR: #008000"> 返回 Array 对象<br /> * Example XML:<br /> * &lt;?xml version='1.0' encoding='utf-8'?&gt;<br /> * &lt;ekuy&gt;<br /> *   &lt;user&gt;<br /> *     &lt;name&gt;<br /> *       &lt;cnname&gt;小猪&lt;/cnname&gt;<br /> *     &lt;/name&gt;<br /> *     &lt;age&gt;27&lt;/age&gt;<br /> *   &lt;/user&gt;<br /> *   &lt;user&gt;<br /> *     &lt;name&gt;<br /> *       &lt;cnname&gt;小霞&lt;/cnname&gt;<br /> *     &lt;/name&gt;<br /> *     &lt;age&gt;26&lt;/age&gt;<br /> *   &lt;/user&gt;<br /> * &lt;/ekuy&gt;<br /> </span>
				<span style="COLOR: #008000">*/</span>
				<span style="COLOR: #000000">
						<br />function getXMLArray(xmlDoc, name) {<br />  var keys </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> name.split(</span>
				<span style="COLOR: #000000">'</span>
				<span style="COLOR: #000000">.</span>
				<span style="COLOR: #000000">'</span>
				<span style="COLOR: #000000">);<br />  var node </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> xmlDoc.documentElement;      </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> 得到根节点</span>
				<span style="COLOR: #008000">
						<br />
				</span>
				<span style="COLOR: #000000">  var rtn </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> Array();<br />  var n </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">;<br /><br />  </span>
				<span style="COLOR: #0000ff">for</span>
				<span style="COLOR: #000000">(var i</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">; i</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">keys.length; i</span>
				<span style="COLOR: #000000">++</span>
				<span style="COLOR: #000000">) {<br />    var childs </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> node.childNodes;       </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> 得到子节点</span>
				<span style="COLOR: #008000">
						<br />
				</span>
				<span style="COLOR: #000000">    var key </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> keys[i];<br /> </span>
				<span style="COLOR: #0000ff">for</span>
				<span style="COLOR: #000000">(var k</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">; k</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">childs.length; k</span>
				<span style="COLOR: #000000">++</span>
				<span style="COLOR: #000000">) {      <br />   var child </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> childs[k];<br />   </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000">(child.nodeName </span>
				<span style="COLOR: #000000">==</span>
				<span style="COLOR: #000000"> key) {     </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> 判断子节点是否符合</span>
				<span style="COLOR: #008000">
						<br />
				</span>
				<span style="COLOR: #000000">  </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000">(i </span>
				<span style="COLOR: #000000">==</span>
				<span style="COLOR: #000000"> keys.length</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">) {<br />          rtn[n] </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> child;<br />    n</span>
				<span style="COLOR: #000000">++</span>
				<span style="COLOR: #000000">;<br />  } </span>
				<span style="COLOR: #0000ff">else</span>
				<span style="COLOR: #000000"> {<br />    node </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> child;<br />    </span>
				<span style="COLOR: #0000ff">break</span>
				<span style="COLOR: #000000">;<br />  }<br />   }<br /> }<br />  }<br /><br /><br />  </span>
				<span style="COLOR: #0000ff">return</span>
				<span style="COLOR: #000000"> rtn;<br />}<br /><br /><br /></span>
				<span style="COLOR: #008000">/**</span>
				<span style="COLOR: #008000">
						<br /> * 得到由getXMLArray函数得到对象中的值<br /> * </span>
				<span style="COLOR: #808080">@param</span>
				<span style="COLOR: #008000"> node 节点对象<br /> * </span>
				<span style="COLOR: #808080">@param</span>
				<span style="COLOR: #008000"> name <br /> * </span>
				<span style="COLOR: #808080">@return</span>
				<span style="COLOR: #008000"> 返回 String <br /> </span>
				<span style="COLOR: #008000">*/</span>
				<span style="COLOR: #000000">
						<br />function getValue(node, name) {<br />  var keys </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> name.split(</span>
				<span style="COLOR: #000000">'</span>
				<span style="COLOR: #000000">.</span>
				<span style="COLOR: #000000">'</span>
				<span style="COLOR: #000000">);<br />  <br />  </span>
				<span style="COLOR: #0000ff">for</span>
				<span style="COLOR: #000000">(var i</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">; i</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">keys.length; i</span>
				<span style="COLOR: #000000">++</span>
				<span style="COLOR: #000000">) {<br />    var childs </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> node.childNodes;       </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> 得到子节点</span>
				<span style="COLOR: #008000">
						<br />
				</span>
				<span style="COLOR: #000000">    var key </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> keys[i];<br /> </span>
				<span style="COLOR: #0000ff">for</span>
				<span style="COLOR: #000000">(var k</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">; k</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">childs.length; k</span>
				<span style="COLOR: #000000">++</span>
				<span style="COLOR: #000000">) {      <br />   var child </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> childs[k];<br />   </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000">(child.nodeName </span>
				<span style="COLOR: #000000">==</span>
				<span style="COLOR: #000000"> key) {     </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> 判断子节点是否符合</span>
				<span style="COLOR: #008000">
						<br />
				</span>
				<span style="COLOR: #000000">  </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000">(child.childNodes.length </span>
				<span style="COLOR: #000000">==</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #000000">) {         <br />    </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> 如果没有字节点,返回值</span>
				<span style="COLOR: #008000">
						<br />
				</span>
				<span style="COLOR: #000000">    </span>
				<span style="COLOR: #0000ff">return</span>
				<span style="COLOR: #000000"> child.text;<br />  } </span>
				<span style="COLOR: #0000ff">else</span>
				<span style="COLOR: #000000"> {                                 <br />    </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> 还有子节点,继续分析</span>
				<span style="COLOR: #008000">
						<br />
				</span>
				<span style="COLOR: #000000">    node </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> child;<br />    </span>
				<span style="COLOR: #0000ff">break</span>
				<span style="COLOR: #000000">;<br />  }<br />   }<br /> }<br />  }<br /><br /><br />  </span>
				<span style="COLOR: #0000ff">return</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">""</span>
				<span style="COLOR: #000000">;<br />}<br /><br /><br /><br /></span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> 测试:</span>
				<span style="COLOR: #008000">
						<br />
				</span>
				<span style="COLOR: #000000">
						<br />
						<br />var xmlDoc </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">new</span>
				<span style="COLOR: #000000"> ActiveXObject(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">Microsoft.XMLDOM</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);<br />xmlDoc.async </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">false</span>
				<span style="COLOR: #000000">;<br />xmlDoc.loadXML(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&lt;?xml version='1.0' encoding='utf-8'?&gt;&lt;ekuy&gt;&lt;user&gt;&lt;name&gt;&lt;cnname&gt;小猪&lt;/cnname&gt;&lt;/name&gt;&lt;age&gt;27&lt;/age&gt;&lt;/user&gt;&lt;user&gt;&lt;name&gt;&lt;cnname&gt;小霞&lt;/cnname&gt;&lt;/name&gt;&lt;age&gt;26&lt;/age&gt;&lt;/user&gt;&lt;user&gt;&lt;name&gt;&lt;cnname&gt;小章&lt;/cnname&gt;&lt;/name&gt;&lt;age&gt;25&lt;/age&gt;&lt;/user&gt;&lt;/ekuy&gt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);<br /><br /><br />var list </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> getXMLArray(xmlDoc, </span>
				<span style="COLOR: #000000">'</span>
				<span style="COLOR: #000000">user</span>
				<span style="COLOR: #000000">'</span>
				<span style="COLOR: #000000">);<br /></span>
				<span style="COLOR: #0000ff">for</span>
				<span style="COLOR: #000000">(var i</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">; i</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">list.length; i</span>
				<span style="COLOR: #000000">++</span>
				<span style="COLOR: #000000">) {<br />  var obj </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> list[i];<br />  document.write(getValue(obj, </span>
				<span style="COLOR: #000000">'</span>
				<span style="COLOR: #000000">name.cnname</span>
				<span style="COLOR: #000000">'</span>
				<span style="COLOR: #000000">));<br />  document.write(getValue(obj, </span>
				<span style="COLOR: #000000">'</span>
				<span style="COLOR: #000000">age</span>
				<span style="COLOR: #000000">'</span>
				<span style="COLOR: #000000">));<br />  document.write(</span>
				<span style="COLOR: #000000">'</span>
				<span style="COLOR: #000000">&lt;br\/&gt;</span>
				<span style="COLOR: #000000">'</span>
				<span style="COLOR: #000000">);<br />}<br /></span>
		</div><img src ="http://J2eeExploiter.blogjava.net/aggbug/89946.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangrenquan/" target="_blank">kelven</a> 2006-12-25 17:12 <a href="http://www.blogjava.net/zhangrenquan/articles/89946.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript的md5加密</title><link>http://www.blogjava.net/zhangrenquan/articles/89944.html</link><dc:creator>kelven</dc:creator><author>kelven</author><pubDate>Mon, 25 Dec 2006 09:11:00 GMT</pubDate><guid>http://www.blogjava.net/zhangrenquan/articles/89944.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &lt;				HTML				&gt;																								&lt;				HEAD				&gt;																								&lt;				META http				-				equiv				=				'				Content-Type				'				 c...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhangrenquan/articles/89944.html'>阅读全文</a><img src ="http://J2eeExploiter.blogjava.net/aggbug/89944.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangrenquan/" target="_blank">kelven</a> 2006-12-25 17:11 <a href="http://www.blogjava.net/zhangrenquan/articles/89944.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse插件开发</title><link>http://www.blogjava.net/zhangrenquan/articles/89332.html</link><dc:creator>kelven</dc:creator><author>kelven</author><pubDate>Thu, 21 Dec 2006 09:34:00 GMT</pubDate><guid>http://www.blogjava.net/zhangrenquan/articles/89332.html</guid><description><![CDATA[<p>一、新建项目。  <br />　　按照上一篇的新建插件项目的方法，新建一个名为myplugin2的插件项目，注意：在最后一步选择“建立白空插件项目”，除此，其它都一样。截图如下：</p>
		<p>
				<img src="http://www.csdn.net/Develop/ArticleImages/27/27689/CSDN_Dev_Image_2004-5-102058521.png" o:title="" />
				<br />   <br />       附注：发现又有上一篇的错误，中文版的Eclipse在新建项目时，比较容易有“由于类路径错误（不完整或涉及循环），所以未构建项目。”这类的错误。好办，因为中文包只是一些文本文件，对开发没用，用前面一篇所说的方法删除那些对中文包的引用（前面字符为ECLIPSE_HOME_LANGUAGE_LINK…….），如下图：  <br /><br />   <img src="http://www.csdn.net/Develop/ArticleImages/27/27689/CSDN_Dev_Image_2004-5-102058523.png" o:title="" /><br />二、插件开发的几个关注点。 <br />　　a) 库引用。如上附注所说库引用是在建立插件初期要设置好的地方，不过一经设置基本不需要再改变。功能类似于JDK的classpath或者Jbuilder里的库引用。  <br />　　b) 插件JAVA源代码。今后主要的工作，狂写代码吧。主要都是一些*.JAVA文件。  <br />　　c) 项目根目录下的plugin.xml文件。这个文件是插件的入口文件，Eclipse根据这个文件中的设置来加载插件。代码写完了，要让Eclipse加载你的代码就要在这里面做些手脚了，这些手脚有个术语叫“设置扩展点”。象在Eclipse的加个主菜单、视图、按钮，都在这个文件里面做不同的扩展点，后面的教程会看到这个文件的使用。要人会说那我开发一个系统会有很多的菜单和按钮，那是不是都要设置这个文件呢？回答：不必，这里面只设置主要和Eclipse接壤的扩展点，其它系统里的菜单按钮就没必要了，今后会讲到。  <br />   <br />三、设置库引用。  <br />　　在删除了上面附注所说的无用且出错的引用，接下来我们要加入一些开发插件要用到的库。是那些呢？呵呵，前面我们还是用向导建立了一个helloword插件吗，参考它的就行了。如下图：  <br /><img src="http://www.csdn.net/Develop/ArticleImages/27/27689/CSDN_Dev_Image_2004-5-102058525.png" o:title="" /></p>
		<p>   <br />　　手工加可真累，这里有个好办法。把目录C:\eclipse2.1.3\eclipse\workspace\myplugin\下的.classpath文件拷贝到C:\eclipse2.1.3\eclipse\workspace\myplugin2目录就行了。所有关于库引用的设置全保存在这个文件中。最后别忘记刷新一下项目，如下图所示：  </p>
		<p>
				<img src="http://www.csdn.net/Develop/ArticleImages/27/27689/CSDN_Dev_Image_2004-5-102058527.png" o:title="" />
		</p>
		<p>
				<br />附注说明：</p>
		<p>　　有些文章在这里是用“文件&gt;导入...&gt;外部插件和段”来提供插件开发支持库的引用，本文不采用这种方法，因为这种会将支持库（也是一种插件项目）会新建很多相应项目，让开发界面显得很乱。还不如本文所用的建立库引用变量的方法方便简洁。  <br />   </p>
		<p>四、写源代码。  <br />　　a) 新建一个包。方法如下图所示。  <br />　　　<img src="http://www.csdn.net/Develop/ArticleImages/27/27689/CSDN_Dev_Image_2004-5-102058529.png" o:title="" /></p>
		<p>　　包名如下：  </p>
		<p>　　　<img src="http://www.csdn.net/Develop/ArticleImages/27/27689/CSDN_Dev_Image_2004-5-1020585211.png" o:title="" /><br />   <br />　　结果如下：  </p>
		<p>　　　<img src="http://www.csdn.net/Develop/ArticleImages/27/27689/CSDN_Dev_Image_2004-5-1020585213.png" o:title="" /><br /><br />   <br />　　b) 然后将上一章的myplugin的SampleAction直接移动本项目myplugin2中就可以了（Eclipse支持鼠标拖拉操做）。  <br />　　c)  本文SampleAction做了一些小修改（删除了注释和构造函数）。代码如下：  <br /></p>
		<p>
		</p>
		<table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
				<tbody>
						<tr>
								<td style="WORD-WRAP: break-word" bgcolor="#f3f3f3">public class SampleAction implements IWorkbenchWindowActionDelegate {   <br />    private IWorkbenchWindow window;   <br />    public void run(IAction action) {   <br />        //这是打开一个提示窗口   <br />        MessageDialog.openInformation(window.getShell(), "myplugin 插件", "这是手工做的插件");   <br />    }   <br />    public void selectionChanged(IAction action, ISelection selection) {}   <br />    public void dispose() {}   <br />    public void init(IWorkbenchWindow window) {   <br />        this.window = window;   <br />    }   <br />}  </td>
						</tr>
				</tbody>
		</table>
		<p>   </p>
		<p>五、在plugin.xml文件中加入扩展点的代码。  <br />　　库将本项目plugin.xml文件打开，并转到其源代码视图。将如下代码加入到“&lt;/runtime&gt;”之后。（这些xml还是从上一章的项目搬过来的  <br /></p>
		<table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
				<tbody>
						<tr>
								<td style="WORD-WRAP: break-word" bgcolor="#f3f3f3">&lt;requires&gt;   <br />      &lt;import plugin="org.eclipse.core.resources"/&gt;   <br />      &lt;import plugin="org.eclipse.ui"/&gt;   <br />&lt;/requires&gt;   <br />&lt;extension point="org.eclipse.ui.actionSets"&gt;   <br />      &lt;actionSet label="样本操作集" visible="true" id="myplugin.actionSet"&gt;   <br />         &lt;menu label="样本菜单" id="sampleMenu"&gt;   <br />            &lt;separator name="sampleGroup"&gt; &lt;/separator&gt;   <br />         &lt;/menu&gt;   <br />         &lt;action   <br />               label="样本操作"   <br />               icon="icons/sample.gif"   <br />               class="com.glchengang.SampleAction"   <br />               tooltip="Hello，Eclipse world"   <br />               menubarPath="sampleMenu/sampleGroup"   <br />               toolbarPath="sampleGroup"   <br />               id="com.glchengang.SampleAction"&gt;   <br />         &lt;/action&gt;   <br />         &lt;action   <br />               label="样本操作２"   <br />               icon="icons/sample.gif"   <br />               class="com.glchengang.SampleAction"   <br />               tooltip="Hello，Eclipse world２"   <br />               menubarPath="sampleMenu/sampleGroup2"   <br />               toolbarPath="sampleGroup2"   <br />               id="com.glchengang.SampleAction2"&gt;   <br />         &lt;/action&gt;   <br />      &lt;/actionSet&gt;   <br />   &lt;/extension&gt;  </td>
						</tr>
				</tbody>
		</table>   <br />说明：  <br />　　a) requires域中定义了该插件所要使用的依赖插件,随着开发的不断深入,这里将会填加更多的引用,现在两项就够了  <br />　　b) 在extension中说明了要们要扩展org.eclipse.ui. actionSets扩展点, &lt;actionSet&gt;…..&lt;/ actionSet &gt;表示一个action组(按钮、菜单)。还有其它类型的扩展点，如org.eclipse.ui.views是视图的扩展点，org.eclipse.ui.editors是编辑器的扩展点，各种扩展点在eclipse的帮助中有详细的说明。label是显示的名称。id是唯一标识符，只要保证在plugin.xml文件不存在重复的id就行了，这里建议以包路径和类名的组合来做为id。  <br />　　c) &lt;menu&gt;….&lt;/menu&gt;表示菜单　separator标签是一个结束符，它可以对菜单分组  <br />　　d) &lt;action&gt;....&lt;/action&gt;表示按钮。Icon是图片的路径，绝对路径是什么大家实际对照就知道了，如果eclipse找不到这个图片，默认是一个红色实心小框。Class是这个按钮所对应的类，注意把包名写全，这样比较规范些。menubarPath表示把这个action做成一个菜单放在上前&lt;menu&gt;….&lt;/menu&gt;定义的主菜单下。toolbarPath表示把这个action做成一个工具栏按钮。在这里为了方便比较我将这个action的设置复制成了两份，大家可以自己改改其中的设置，然后看看实际效果。  <br />　　e) 各详细的plugin.xml大家可以参考eclipse自带的帮助文件，这里仅做一个入门性的说明。  <br />   <br />六、按钮前面一章所说的方法运行插件（运行之前注意将原来那个向导做的myplugin项目关闭掉，关闭方法：鼠标右键点击此项目－＞弹出菜单中选择关闭项目）。插件效果如下图  <br /><br />   <img src="http://www.csdn.net/Develop/ArticleImages/27/27689/CSDN_Dev_Image_2004-5-1020585215.png" o:title="" /><br /><img src ="http://J2eeExploiter.blogjava.net/aggbug/89332.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangrenquan/" target="_blank">kelven</a> 2006-12-21 17:34 <a href="http://www.blogjava.net/zhangrenquan/articles/89332.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用Eclipse将编译后的java字节码打包成JAR文件</title><link>http://www.blogjava.net/zhangrenquan/articles/89286.html</link><dc:creator>kelven</dc:creator><author>kelven</author><pubDate>Thu, 21 Dec 2006 06:53:00 GMT</pubDate><guid>http://www.blogjava.net/zhangrenquan/articles/89286.html</guid><description><![CDATA[File-&gt;Export-&gt;JAR File，<br /><img height="601" alt="o_000000.bmp" src="http://www.blogjava.net/images/blogjava_net/xiekai-blog/12690/o_000000.bmp" width="553" border="0" /><br /><br />点下一步，在下面的画面中设置Main class:<br /><img height="601" alt="o_000001.bmp" src="http://www.blogjava.net/images/blogjava_net/xiekai-blog/12690/o_000001.bmp" width="553" border="0" /><br /><br />点击完成就可以了。用winrar解压缩该jar文件，会发现其中有一个META-INF文件夹，里面就是MANIFEST.MF，其中设定了Main-Class: Calculator.<br />注意，如果不再上图中设置Main class，虽然可以生成jar文件，但是不能通过双击它直接运行程序.因为生成的MANIFEST.MF文件中没有设定Main-Class: Calculator，无法启动程序。<img src ="http://J2eeExploiter.blogjava.net/aggbug/89286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangrenquan/" target="_blank">kelven</a> 2006-12-21 14:53 <a href="http://www.blogjava.net/zhangrenquan/articles/89286.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用JSP 2.0开发Web应用程序</title><link>http://www.blogjava.net/zhangrenquan/articles/85776.html</link><dc:creator>kelven</dc:creator><author>kelven</author><pubDate>Wed, 06 Dec 2006 03:01:00 GMT</pubDate><guid>http://www.blogjava.net/zhangrenquan/articles/85776.html</guid><description><![CDATA[JSP（JavaServer Pages）技术是对Servlet的进一步抽象，它由JCP（Java Community Process）开发，是用于生成动态内容的开放式的、可免费获取的规范，也是J2EE（Java 2 Enterprise Edition）规范的重要组成部分。许多商业应用服务器如BEA WebLogic、IBM WebSphere、Live Jrun和Orion都支持JSP技术。 <br /><br />　　从机票预订系统、银行系统到购物系统，Web上到处都在应用JSP技术。新发布的2.0版是对JSP1.2的升级，增加了一些有趣的新特性。JSP2的目标是使动态网页的设计更加容易，而且无需学习Java编程语言。<br /><br />　　本文内容包括：<br /><br />　　提供具有丰富示例代码的教程来使你熟悉JSP2.0 <br /><br />　　介绍JSP2.0的新特性 <br /><br />　　提供利用JSP2.0开发应用程序的一些体会给出了一些示例代码，对这些代码稍加修改即可用于你自己的应用程序。 <br /><br />　　如果你还不熟悉JSP，那么直接从JSP2.0入手是一个不错的主意。但是如果希望学习JSP1.2，也许你需要从JSP教程开始学习。 <br /><br />　　JSP 2.0<br /><br />　　JSP 2.0是对JSP 1.2的升级，增加了几个有趣的新特性，可以使Web应用程序设计人员和开发人员的工作更容易一些。JSP 2.0的目标是比以前更易于使用，更重要的是无须学习Java语言本身就可以使用它。它增加了一种称为SimpleTag的新扩展机制来简化标签API（Tag API）。<br /><br />　　除了其他一些改进外，JSP 2.0引入的最主要的新特性包括：<br /><br />　　一种简单的表达式语言（EL），能够用来容易地从JSP页面访问数据，这种表达式语言简化了基于JSP的不含脚本的应用程序的编写，不需要使用Java Scriptlet或者Java表达式； <br /><br />　　用于直接使用JSP技术来定义可重用的自定义行为的新语法，该语法使用.tag和.tagx文件，这类文件可由开发人员或者网页作者编写； <br />3XML语法得到了实质性的改进，增加了新的标准文件扩展名（.tagx用于标签文件，.jspx用于JSP文件）。<br /><br />　　本文主要讨论表达式语言、简化的标签API和标签文件。相信目前的JSP开发人员将会发现这些重要的特性不但有趣，而且非常有用。 为何要从1.2跨越到2.0？<br /><br />　　在Java规格请求（JSR 152）中版本号最初定为1.3。但是正如你将在后面看到的那样，由于这些新特性对JSP应用程序的开发模型产生了如此深刻的影响，专家组感到有必要把主版本号升级到2.0，这样才能充分反映这种影响。此外，新的版本号也有助于把开发人员的注意力吸引到这些有趣的新特性上来。令人欣慰的是，所有合法的JSP1.2页面同时也是合法的JSP2.0页面。<br /><br />　　JSP 2.0起步<br /><br />　　在着手学习JSP 2.0之前，你需要一个支持JSP2.0和Java Servlet 2.4规范的JSP环境。幸运的是，Jakarta Tomcat 5.0（alpha测试版）支持新的JSP2.0和Servlet 2.4规范，可以从http://jakarta.apache.org/builds/jakarta-tomcat/release/v5.0.4-alpha/下载并安装Tomcat 5.0。 <br /><br />　　JSP表达式语言<br /><br />　　向JSP网页传递信息是通过JSP scoped属性和请求参数完成的。专门为网页作者量身定做的一种表达式语言（EL）把JSP scoped属性提升为从业务逻辑向JSP页面传递信息的标准方式。但是要注意，尽管这种表达式语言是JSP的一个重要特性，它并不是一种通用的程序语言。它仅仅是一种数据访问语言，可以方便地访问和处理应用程序数据，而无需使用scriptlet或者请求时（request-time）表达式的值。 <br /><br />　　在JSP2.0之前，网页作者只能使用表达式＜%= aName %＞访问系统的值，比如下面的例子：<br /><br /><font color="#000000">＜someTags:aTag attribute="＜%= pageContext.getAttribute("aName") %＞"＞ </font><br /><font color="#000000">　　或者使用自定义JavaBeans组件的值：<br /><br /></font><font color="#000000">＜%= aCustomer.getAddress().getCountry() %＞</font><br /><font color="#000000">　　表达式语言允许网页作者使用简单的语法访问对象。比如要访问一个简单变量，可以像下面这样写： <br /><br /></font><font color="#000000">＜someTags:aTag attribute="${ aName}"＞ </font><br /><font color="#000000">　　而访问嵌套的JavaBeans属性，则可以像下面这样写： <br /><br /></font><font color="#000000">${ aCustomer.address.country} </font><p><br /><font color="#000000">　　你可能会问，这不是JavaScript的语法吗？完全正确！如果你使用过JavaScript，就会感到非常轻松，因为表达式语言正是借用了访问结构化数据的JavaScript语法。 <br /><br />　　--------------------------------------------------------------------------------<br /><br />　　注意：<br /><br />　　表达式语言最初是作为JSP标准标签库（JSTL）1.0的一部分而开发的，JSTL是一种标准标签库，它提供对通用的、结构化的任务的支持，如迭代和条件、XML文档处理、国际化和利用SQL访问数据库等。JSTL规范是由JSR 52专家组开发的。关于JSTL的介绍，请参见Faster Development with JSTL（使用JSTL加速开发）. </font></p><p><font color="#000000"></font></p><p align="center"><b><font color="red"></font>          </b></p><center>【字体：大 小】【<font color="#ff0000">报告错误</font>】【<font color="#ff0000">进入软件交流区</font>】【关闭】 
<p></p></center><p></p><p><font color="#000000">访问应用程序数据</font></p><p><font color="#000000">　　可以使用点号运算符（.）访问作为对象属性的应用程序数据，也可使用方括号运算符[‘name’]访问命名的数组元素。</font></p><p><font color="#000000">　　表达式${ data}表示名为data的scoped变量。可以使用点号（.）或方括号（[]）运算符从集合中检索属性值：</font></p><p><font color="#000000">　　点号运算符用于访问命名的属性，比如表达式${ customer.name}表示scoped变量customer的name属性；方括号运算符可用于检索命名的属性，比如在${ customer[“name”]}中。也可以通过${ customers[0]}的形式来访问集合customers中的第一项。 </font></p><p><font color="#000000">　　表达式语言统一了对点号和方括号运算符的处理，因此${ customer.name}与${ customer[“name”]}是等价的。正如你看到的那样，表达式必须使用${ 和}包围起来。</font></p><p><font color="#000000">　　EL的标识符求值方式是使用PageContext.findAttribute(String)，把标识符作为一个属性来查找它的值。如果没有找到该属性，则返回null。</font></p><p><font color="#000000">　　运算符</font></p><p><font color="#000000">　　表达式语言支持算术运算符、关系运算符和逻辑运算符，以完成大多数的数据处理操作。此外，它还提供了一个用于测试一个对象是否为空的特殊运算符。运算符如表1所示。你可以使用empty运算符判断某个集合或字符串是否为空。比方说，只有当要求的命名参数param没有给出时，表达式${ empty param.name}才返回真。Empty运算符可以与“!”运算符一起使用，比如${ !empty param.name}当要求的命名参数param存在时返回真。</font></p><p><font color="#000000">　　表1：表达式语言运算符</font></p><p><br /></p><div align="center"><font color="#000000">运算符</font></div><div align="center"><font color="#000000">说明</font></div><font color="#000000">+</font><font color="#000000">加</font><font color="#000000">-</font><font color="#000000">减</font><font color="#000000">*</font><font color="#000000">乘</font><font color="#000000">/ 或 div</font><font color="#000000">除</font><font color="#000000">% 或 mod</font><font color="#000000">模（求余）</font><font color="#000000">== 或 =</font><font color="#000000">等于</font><font color="#000000">!= 或 !=</font><font color="#000000">不等于</font><font color="#000000">＜ 或 lt</font><font color="#000000">小于</font><font color="#000000">＞ 或 gt</font><font color="#000000">大于</font><font color="#000000">＜= 或 le</font><font color="#000000">小于等于</font><font color="#000000">＞= 或 ge</font><font color="#000000">大于等于</font><font color="#000000">&amp;&amp; 或 and</font><font color="#000000">逻辑与</font><font color="#000000">|| or or</font><font color="#000000">逻辑或</font><font color="#000000">! 或 not</font><font color="#000000">逻辑非</font><font color="#000000">empty</font><font color="#000000">检查是否为空值</font><font color="#000000">a ? b : c</font><font color="#000000">条件运算符</font><br /><br /><font color="#000000">　　隐含对象<br /><br />　　除了运算符外，表达式语言还定义了一些隐含对象以支持网页作者访问需要的应用程序数据。表达式语言定义的隐含对象如表2所示，后面将给出使用这些隐含对象的一个例子。<br /><br />　　表2：表达式语言中的隐含对象<br /><br /></font><div align="center"><font color="#000000">隐含对象</font></div><div align="center"><font color="#000000">内容</font></div><font color="#000000">applicationScope</font><font color="#000000">应用程序范围内的scoped变量组成的集合</font><font color="#000000">cookie</font><font color="#000000">所有cookie组成的集合</font><font color="#000000">header</font><font color="#000000">HTTP请求头部，字符串</font><font color="#000000">headerValues</font><font color="#000000">HTTP请求头部，字符串集合</font><font color="#000000">initParam</font><font color="#000000">全部应用程序参数名组成的集合</font><font color="#000000">pageContext</font><font color="#000000">当前页面的javax.servlet.jsp.PageContext对象</font><font color="#000000">pageScope</font><font color="#000000">页面范围内所有对象的集合</font><font color="#000000">param</font><font color="#000000">所有请求参数字符串组成的集合</font><font color="#000000">paramValues</font><font color="#000000">所有作为字符串集合的请求参数</font><font color="#000000">requestScope</font><font color="#000000">所有请求范围的对象的集合</font><font color="#000000">sessionScope</font><font color="#000000">所有会话范围的对象的集合</font><br /><font color="#000000">　　表达式语言的例子<br /><br />　　如你所言，网页作者无须学习Java也能够使用这种表达式语言。示例代码1显示了一些表达式的例子和隐含对象的使用。 <br /><br />　　代码示例1: ex1.jsp <br /><br />　　要运行这个例子，请参照以下步骤，这里我们假定Tomcat 5.0安装在c:\tomcat5.0下。<br /><br />　　切换目录到 c:\Tomcat5.0\webapps\jsp-examples 创建新目录，名字可以是任意的，比如jsp2-tutorial切换到jsp2-tutorial，把ex1.jsp复制并保存到该目录下启动Tomcat 5服务器：指向“开始”-＞“程序”-＞“Apache Tomcat 5.0”，单击“Apache Tomcat 5.0”来启动Tomcat在浏览器中输入http://localhost:8080/jsp-examples/jsp2-tutorial/ex1.jsp你将看到类似图1所示的画面。使用表达式语言就这么简单！ <br /><br /></font><div align="center"><font color="#000000"><img onerror="this.src='/biancheng/UploadFiles_1911/200603/2006358537552.gif';" hspace="3" src="http://www.pcday.cn/biancheng/UploadFiles_1911/200603/2006358537552.gif" align="center" vspace="1" border="1" /><br />图1：JSP表达式语言和隐含对象</font></div><br /><font color="#000000">　　--------------------------------------------------------------------------------<br /><br />　　<b>注意:</b> 在本文中，所有的JSP文件都保存在c:\Tomcat5.0\webapps\jsp-examples\jsp2-tutorial目录下。 <br /><br />　　--------------------------------------------------------------------------------<br /><br />　　填充表单例子<br /><br />　　隐含对象可用于读取填充表单的数据。代码示例2给出了一个简单的表单，该表单提示用户输入一个名字。 <br /><br />　　代码示例2: form.jsp <br /><br /></font><font color="#000000">＜HTML＞<br />＜HEAD＞<br />＜TITLE＞Form Content＜/TITLE＞<br />＜/HEAD＞<br /><br />＜BODY＞<br />　＜H3＞Fill-out-form＜/H3＞<br />　＜P＞<br />　＜FORM action="form.jsp" method="GET"＞ Name = ＜input type="text" name="name" value="${<br />param['name']}"＞ ＜input type="submit" value="Submit Name"＞<br />　＜/FORM＞ <br />　＜P＞The Name is: ${param.name}<br />＜/BODY＞＜/HTML＞</font><br /><font color="#000000">　　在本例中，当用户输入名字并单击“提交”按钮时，输入的名字就会显示同一页面中的“The Name is:”字样后面，如图2所示。<br /><br />　　同样，运行这个例子只需要把form.jsp复制到c:\Tomcat5.0\webapps\jsp-examples\jsp2-tutorial下并用浏览器打开它。<br /><br /></font><div align="center"><font color="#000000"><img onerror="this.src='/biancheng/UploadFiles_1911/200603/2006358538611.gif';" hspace="3" src="http://www.pcday.cn/biancheng/UploadFiles_1911/200603/2006358538611.gif" align="center" vspace="1" border="1" /><br />图2：表单处理</font></div><p></p><p><font color="#000000"></font></p><p align="center"><b>   <font color="red"></font>        </b></p><center>【字体：大 小】【<font color="#ff0000">报告错误</font>】【<font color="#ff0000">进入软件交流区</font>】【关闭】 
<p></p></center><p></p><p><font color="#000000"><strong>定义和使用函数<br /><br /></strong>　　表达式语言允许你定义可在表达式中调用的函数。函数必须作为public类中的public static方法编写。函数一经定义，它的签名（signature）就映射到标签库描述符（TLD）中。<br /><br />　　为了说明函数的使用，我们举一个简单的例子，把两个数相加。首先要编写求两数之和的Java方法代码，如代码示例3所示，这里定义了一个静态方法，它接收两个字符串参数，把它们解析成整数并返回它们的和。<br /><br />　　代码示例3: Compute.java <br /><br /></font><font color="#000000">package jsp2.examples.el;<br />import java.util.*;<br />public class Compute {<br />　public static int add(String x, String y) {<br />　　int a = 0; <br />　　int b = 0; <br />　　try {<br />　　　a = Integer.parseInt(x);<br />　　　b = Integer.parseInt(y);<br />　　}catch(Exception e) {<br />　　}<br />　　return a + b; <br />　}<br />}</font><br /><font color="#000000">　　用javac把这段代码编译成功后，下一步就要把函数的签名映射到标签库。代码示例4说明了如何把add函数映射到包含函数实现和函数签名的类。后面将说明把这段代码添加到哪儿。<br /><br />　　代码示例4: 函数描述符<br /><br /></font><font color="#000000">＜function＞<br />　＜description＞add x and y＜/description＞<br />　＜name＞add＜/name＞<br />　＜function-class＞jsp2.examples.el.Compute ＜/function-class＞<br />　＜function-signature＞int add(java.lang.String,java.lang.String) ＜/function-signature＞<br />＜/function＞</font><br /><font color="#000000">　　现在我们就可以编写一个JSP页面来使用这个函数。代码示例5是包含两个字段的一个表单，用户输入两个数字并按下“求和”按钮，就会调用上面的函数并把两个数相加，结果在同一个页面中显示出来。<br /><br />　　代码示例5: math.jsp <br /><br /></font><font color="#000000">＜%@ taglib prefix="my" uri="http://jakarta.apache.org/tomcat/jsp2-example-taglib %＞<br />＜HEAD＞＜TITLE＞Functions＜/TITLE＞＜/HEAD＞<br />＜BODY＞<br />＜H3＞Add Numbers＜/H3＞<br />＜P＞<br />＜FORM action="math.jsp" method="GET"＞ X = ＜input type="text" name="x" value="${ param["x"]}"＞<br />＜BR＞<br />Y = ＜input type="text" name="y" value="${param["y"]}"＞<br />＜input type="submit" value="Add Numbers"＞<br />＜/FORM＞<br />＜P＞The sum is: ${my:add(param["x"],param["y"])}<br />＜/BODY＞<br />＜/HTML＞</font><br /><font color="#000000">　　要运行这个例子：<br /><br />　　复制Compute.java并保存到C:\Tomcat5.0\webapps\jsp-examples\WEB-INF\classes\jsp2\examples\el下；使用javac编译Compute.java；编辑文件C:\Tomcat5.0\webapps\jsp-examples\WEB-INF\jsp2\jsp2-example-taglib.tld，把代码示例4中的代码段添加到文件中最后一个＜/function＞标签之后，＜/taglib＞标签之前；复制math.jsp并保存到c:\Tomcat5.0\webapps\jsp-examples\jsp2-tutorial下；用浏览器打开该文件。 <br /><br />　　如果一切正常，应该会看到类似如图3所示的窗口。 <br /><br /></font></p><div align="center"><font color="#000000"><img onerror="this.src='/biancheng/UploadFiles_1911/200603/2006358538827.gif';" hspace="3" src="http://www.pcday.cn/biancheng/UploadFiles_1911/200603/2006358538827.gif" align="center" vspace="1" border="1" /><br />图3：使用函数 </font></div><br /><font color="#000000">　　<b>标签处理器</b><br /><br />　　JSP 1.2中传统的标签处理API由于允许标签体中包含scriptlet而变得复杂，但是现在利用表达式语言可以编写不含scriptlet的JSP网页。最终，JSP 2.0引入了一种新的标签扩展机制，称为“简单标签扩展”，这种机制有两种使用方式：<br /><br />　　Java开发人员可以定义实现接口javax.servlet.jsp.tagext.SimpleTag的类; 不懂Java的网页编写人员则可以使用标签文件。 <br /><br />　　首先来看第一种方式，代码示例6给出了一个简单的标签处理器，它的作用仅仅是打印“This is my first tag! ”。<br /><br />　　代码示例6: HelloTag.java <br /><br /></font><font color="#000000">package jsp2.examples.simpletag;<br />import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.SimpleTagSupport;<br />import java.io.IOException;<br />/** * SimpleTag handler that prints "This is my first tag!" */ public class HelloTag extends SimpleTagSupport {<br />　public void doTag() throws JspException, IOException {<br />　　getJspContext().getOut().write("This is my first tag!"); <br />　}<br />}</font><br /><font color="#000000">　　编译成功后，下一步就要在TLD中定义一个标签描述符，下面是标签描述符的例子。 <br /><br />　　代码示例7: 标签描述符 <br /><br /></font><font color="#000000">＜tag＞<br />　＜description＞Prints this is my first tag＜/description＞ <br />　＜name＞hello＜/name＞<br />　＜tag-class＞jsp2.examples.simpletag.HelloTag＜/tag-class＞<br />　＜body-content＞empty＜/body-content＞<br />＜/tag＞</font><br /><font color="#000000">　　最后再编写一个使用上述标签的JSP页面文件，见代码示例8。 <br /><br />　　代码示例8: helloworld.jsp <br /><br /></font><font color="#000000">＜%@ taglib prefix="mytag" uri="/WEB-INF/jsp2/jsp2-example-taglib.tld" %＞<br />＜HTML＞<br />＜HEAD＞<br />＜TITLE＞Simple Tag Handler＜/TITLE＞<br />＜/HEAD＞<br />＜BODY＞<br />＜H2＞Simple Tag Handler＜/H2＞<br />＜P＞<br />＜B＞My first tag prints＜/B＞: ＜mytag:hello/＞<br />＜/BODY＞<br />＜/HTML＞</font><br /><font color="#000000">　　要运行这个例子：<br /><br />　　复制HelloTg.java并保存到C:\Tomcat5.0\webapps\jsp-examples\WEB-INF\classes\jsp2\examples\simpletag下；使用javac编译HelloTag.java；把代码示例7中的标签描述符添加到文件C:\Tomcat5.0\webapps\jsp-examples\WEB-INF\jsp2\jsp2-example-taglib.tld中的＜/taglib＞之前；复制helloworld.jsp并保存到c:\Tomcat5.0\webapps\jsp-examples\jsp2-tutorial目录中；用浏览器打开helloworld.jsp。 <br /><br />　　如果一切正常，应该会看到类似如图4所示的画面。 <br /><br /></font><div align="center"><font color="#000000"><img onerror="this.src='/biancheng/UploadFiles_1911/200603/2006358538651.gif';" hspace="3" src="http://www.pcday.cn/biancheng/UploadFiles_1911/200603/2006358538651.gif" align="center" vspace="1" border="1" /><br />图4：简单标签处理器 <br /><br /><br /></font></div><br /><p><font color="#000000"><strong>标签文件<br /><br /></strong>　　使用简单标签扩展机制的另一种方法是通过标签文件。标签文件是一种资源文件，网页作者可以利用它抽取一段JSP代码，通过定制功能来实现代码的复用。换句话说，标签文件允许JSP网页作者使用JSP语法创建可复用的标签库。标签文件的扩展名必须是“.tag”。<br /><br />　　为说明使用标签文件是多么容易，考虑一下代码示例9。没错，这就是一个标签文件！<br /><br />　　代码示例9: greetings.tag <br /><br /></font><font color="#000000">Hello there. How are you doing?</font><br /><font color="#000000">　　一旦定义了标签文件，就可以在JSP网页的编写中使用这种定制的功能。比如代码示例10中的JSP网页。<br /><br />　　代码示例10: chat.jsp <br /><br /></font><font color="#000000">＜%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %＞<br />＜HTML＞<br />＜HEAD＞<br />＜TITLE＞JSP 2.0 Examples - Hello World Using a Tag File＜/TITLE＞<br />＜/HEAD＞<br />＜BODY＞<br />＜H2＞Tag File Example＜/H2＞<br />＜P＞<br />＜B＞The output of my first tag file is＜/B＞: ＜tags:greetings/＞<br />＜/BODY＞<br />＜/HTML＞</font><br /><font color="#000000">　　要运行这个例子：<br /><br />　　复制标签文件greetings.tags并保存在c:\Tomcat5.0\webapps\jsp-examples\WEB-INF\tags 目录下；复制JSP网页文件char.jsp并保存在c:\Tomcat5.0\webapps\jsp-examples\jsp2-tutorial 目录下；用浏览器打开chat.jsp文件。 <br /><br />　　如果一切正常，应该会看到类似如图5所示的窗口。 <br /><br /></font></p><div align="center"><font color="#000000"><img onerror="this.src='/biancheng/UploadFiles_1911/200603/2006358538949.gif';" hspace="3" src="http://www.pcday.cn/biancheng/UploadFiles_1911/200603/2006358538949.gif" align="center" vspace="1" border="1" /><br />图5：简单的标签文件</font></div><br /><font color="#000000">　　--------------------------------------------------------------------------------<br /><br />　　注意: 重要的是要注意到这里没有为问候标签编写TLD，而是创建了一个标签文件并放在特殊的目录中，然后用taglib指令导入并直接使用它。<br />　　--------------------------------------------------------------------------------<br /><br />　　<b>另一个标签文件的例子</b><br /><br />　　标签文件可以作为模板使用。考虑代码示例11中的标签文件display.tag，这个例子是根据Tomcat 5.0中的面板的例子改写的。指令attribute类似于TLD中的＜attribute＞元素，允许声明自定义的动作属性。<br /><br />　　代码示例11: display.tag <br /><br /></font><p><font color="#000000">＜%@ attribute name="color" %＞＜%@ attribute name="bgcolor" %＞＜%@ attribute name="title" %＞<br />＜TABLE border="0" bgcolor="${color}"＞<br />＜TR＞<br />＜TD＞＜B＞${title}＜/B＞ ＜/TD＞<br />＜/TR＞ <br />＜TR＞ <br />＜TD＞ bgcolor="${ bgcolor}"＞ ＜jsp:doBody/＞ ＜/TD＞<br />＜/TR＞<br />＜/TABLE＞</font></p><br /><font color="#000000">　　代码示例12给出了使用上述标签的一个简单的JSP页面。<br /><br />　　代码示例12: newsportal.jsp <br /><br /></font><font color="#000000">＜%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %＞<br />＜HTML＞<br />＜HEAD＞<br />＜TITLE＞Another Tag File Example＜/TITLE＞<br />＜/HEAD＞<br />＜BODY＞<br />＜H2＞ News Portal: Another Tag File Example＜/H2＞<br />＜TABLE border="0"＞<br />＜TR valign="top"＞<br />＜TD＞<br />＜tags:display color="#ff0000" bgcolor="#ffc0c0" title="Travel"＞<br />Last French Concorde Arrives in NY<br />＜br/＞ Another Travel Headline<br />＜br/＞ Yet Another Travel Headline<br />＜br/＞ <br />＜/tags:display＞<br />＜/TD＞<br />＜TD＞ <br />＜tags:display color="#00fc00" bgcolor="#c0ffc0" title="Technology"＞ <br />Java for in-flight entertainment<br />＜BR＞ <br />Another Technology Headline<br />＜BR＞<br />Another Technology Headline<br />＜BR＞ <br />＜/tags:display＞<br />＜/TD＞<br />＜TD＞<br />＜tags:display color="#ffcc11" bgcolor="#ffffcc" title="Sports"＞<br />American Football＜BR/＞<br />NBA＜BR/＞ <br />Soccer＜BR/＞<br />＜/tags:display＞ <br />＜/TD＞ <br />＜/TR＞<br />＜/TABLE＞<br />＜/BODY＞<br />＜/HTML＞</font><br /><font color="#000000">　　要运行这个例子：<br /><br />　　复制文件display.tag并保存在c:\Tomcat5.0\webapps\jsp-examples\WEB-INF\tag 下；复制文件newsportal.jsp并保存到c:\Tomcat5.0\webapps\jsp-examples\jsp2-tutorial下；用浏览器打开newsportal文件。 <br /><br />　　结果应该会得到与图6类似的画面。 <br /><br /></font><div align="center"><font color="#000000"><img onerror="this.src='/biancheng/UploadFiles_1911/200603/2006358538443.gif';" hspace="3" src="http://www.pcday.cn/biancheng/UploadFiles_1911/200603/2006358538443.gif" align="center" vspace="1" border="1" /><br />图6：把标签文件用作模板 </font></div><br /><font color="#000000">　　<b>结论</b><br /><br />　　JSP 2.0使得快速开发和维护动态网页比以前更加容易，尽管“Java”一词出现在JSP中，但使用JSP2.0，网页作者无须学习Java程序语言本身，就能开发出全新的动态网页。本文中的例子说明了使用JSP2.0的新特性开发动态网页是多么容易。 </font><img src ="http://J2eeExploiter.blogjava.net/aggbug/85776.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangrenquan/" target="_blank">kelven</a> 2006-12-06 11:01 <a href="http://www.blogjava.net/zhangrenquan/articles/85776.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat5下设置EL(expression language)</title><link>http://www.blogjava.net/zhangrenquan/articles/85773.html</link><dc:creator>kelven</dc:creator><author>kelven</author><pubDate>Wed, 06 Dec 2006 02:53:00 GMT</pubDate><guid>http://www.blogjava.net/zhangrenquan/articles/85773.html</guid><description><![CDATA[tomcat5下的web应用程序,默认情况下是不支持EL表达式的,如果你想使用EL表达式的话,有以下2种方法：<br /><br />方法一：<br />            在每个jsp页面添加&lt;%@ page isELIgnored="false" %&gt;<br /><br />方法二：<br />            修改web.xml中的&lt;web-app&gt;标记为<br />            &lt;web-app xmlns="<a href="http://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2ee</a>" xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>" <br />                             xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/j2ee-web-app_2_4.xsd">http://java.sun.com/xml/ns/j2ee-web-app_2_4.xsd</a>" version="2.4"&gt; <br />这样就OK了<img height="1" src="http://java.ccidnet.com/art/3741/20030705/down_info.asp?id=30991" width="1" border="0" /><img src ="http://J2eeExploiter.blogjava.net/aggbug/85773.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangrenquan/" target="_blank">kelven</a> 2006-12-06 10:53 <a href="http://www.blogjava.net/zhangrenquan/articles/85773.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring的MVC学习</title><link>http://www.blogjava.net/zhangrenquan/articles/85597.html</link><dc:creator>kelven</dc:creator><author>kelven</author><pubDate>Tue, 05 Dec 2006 07:56:00 GMT</pubDate><guid>http://www.blogjava.net/zhangrenquan/articles/85597.html</guid><description><![CDATA[a、URL与Bean名称的对应处理，使用BeanNameUrlHandlerMapping对象。配置入下：<br />&lt;bean  name="/listUser.html" class="example.ListUserController"&gt;<br />&lt;property  name="userService"&gt;<br />&lt;ref  bean="userService"/&gt;<br />&lt;/property&gt;<br />&lt;/bean&gt;<br />BeanNameUrlHandlerMapping方式是Spring的DespatcherServlet的缺省映射方式处理器，不需要在配置文件中显式声明。但是这种方法使bean的名称和URL地址混淆，不利于大面积的开发。一般少采用。<br />b、使用SimpleUrlHandlerMapping映射方式，配置方法如下：<br />&lt;bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"&gt;<br />&lt;property name="mapping"&gt;<br />&lt;props&gt;<br />&lt;prop key="listUser.html"&gt;listUserController&lt;/props&gt;<br />&lt;/props&gt;<br />&lt;/bean&gt;<br />&lt;bean id="listUserController" class="..."&gt;<br />&lt;!-- ... --&gt;<br />&lt;/bean&gt;<br /><img src ="http://J2eeExploiter.blogjava.net/aggbug/85597.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangrenquan/" target="_blank">kelven</a> 2006-12-05 15:56 <a href="http://www.blogjava.net/zhangrenquan/articles/85597.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse + Struts+Spring+hibernate 学习笔记 之applicationContext解析 </title><link>http://www.blogjava.net/zhangrenquan/articles/85594.html</link><dc:creator>kelven</dc:creator><author>kelven</author><pubDate>Tue, 05 Dec 2006 07:40:00 GMT</pubDate><guid>http://www.blogjava.net/zhangrenquan/articles/85594.html</guid><description><![CDATA[<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "<a href="http://www.springframework.org/dtd/spring-beans.dtd">http://www.springframework.org/dtd/spring-beans.dtd</a>"&gt;</p>
		<p>&lt;beans&gt;</p>
		<p>
				<font color="#0000ff" size="3">  建立一个数据源</font>
				<font color="#3366ff">
						<br />
				</font> &lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"&gt;<br />  &lt;property name="driverClassName"&gt;<br />   &lt;value&gt;com.microsoft.jdbc.sqlserver.SQLServerDriver&lt;/value&gt;<br />  &lt;/property&gt;<br />  &lt;property name="url"&gt;<br />   &lt;value&gt;jdbc:microsoft:sqlserver://192.168.0.6:1433&lt;/value&gt;<br />  &lt;/property&gt;<br />  &lt;property name="username"&gt;<br />   &lt;value&gt;sa&lt;/value&gt;<br />  &lt;/property&gt;<br />  &lt;property name="password"&gt;<br />   &lt;value&gt;&lt;/value&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;</p>
		<p>
				<font color="#0000ff" size="3">  建立会话工厂类，这个类使用spring专门为hibernate3提供LocalSessionFactoryBean</font>
				<br /> <br /> &lt;bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&gt;<br />  &lt;property name="dataSource"&gt;<br />   &lt;ref local="dataSource" /&gt;<font color="#0000ff">  --引用上面的数据源</font><br />  &lt;/property&gt;<br />  &lt;property name="mappingResources"&gt;  <font color="#0000ff">--调入映射文档<br /></font>   &lt;list&gt;<br />    &lt;value&gt;com/yourcompany/User.hbm.xml&lt;/value&gt;  <br />   &lt;/list&gt;<br />  &lt;/property&gt;<br />  &lt;property name="hibernateProperties"&gt; <font color="#0000ff"> --相关设置</font><br />   &lt;props&gt;<br />    &lt;prop key="hibernate.dialect"&gt;org.hibernate.dialect.SQLServerDialect&lt;/prop&gt;<br />    &lt;prop key="hibernate.show_sql"&gt;true&lt;/prop&gt;<br />   &lt;/props&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;<br />  </p>
		<p>
				<font color="#0000ff" size="2">    定义事务管理器，这个也是 spring专门为hibernate3提供的HibernateTransactionManager 事务管理器<br /></font> &lt;bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"&gt;<br />  &lt;property name="sessionFactory"&gt;<br />   &lt;ref local="sessionFactory" /&gt;   <font color="#0000ff">--引用会话工厂类<br /></font>  &lt;/property&gt;<br /> &lt;/bean&gt;<br /></p>
		<p>
				<font color="#0000ff">
						<font size="3"> 定义实体DAO</font>
						<br />
				</font> &lt;bean id="userDAO" class="com.yourcompany.UserDAOImp"&gt;<br />  &lt;property name="sessionFactory"&gt;<br />   &lt;ref local="sessionFactory" /&gt;<font color="#0000ff">--引用会话工厂类</font><br />  &lt;/property&gt;<br /> &lt;/bean&gt;<br /> </p>
		<p>
				<font color="#0000ff" size="2"> 为上面的实体DAO定义一个代理(proxy)类，这是spring为解决事务问题而提供TransactionProxyFactoryBean动态事务代理类<br /></font> &lt;bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"&gt;<br />  &lt;property name="transactionManager"&gt;<br />   &lt;ref bean="transactionManager" /&gt;  <font color="#0000ff" size="1">--指定事务管理器(需要是spring专用的)<br /></font>  &lt;/property&gt;<br />  &lt;property name="target"&gt;<font color="#0000ff"> --目标实体DAO类</font><br />   &lt;ref local="userDAO" /&gt;<br />  &lt;/property&gt;<br />  &lt;property name="transactionAttributes"&gt; <font color="#0000ff">--定义要使用事务的方法</font><br />   &lt;props&gt;<br />    &lt;prop key="insert*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt;  <font color="#0000ff">--所有insert开头的方法都使用事务，出错要回滚</font><br />    &lt;prop key="get*"&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt; <font color="#0000ff">--所有get开头的方法都使用只读事务<br /></font>    &lt;prop key="is*"&gt;PROPAGATION_REQUIRED,readOnly&lt;/prop&gt;<font color="#0000ff">--所有ist开头的方法都使用只读事务</font><br />   &lt;/props&gt;<br />  &lt;/property&gt;<br /> &lt;/bean&gt;<br /></p>
		<p>
				<font color="#0000ff">
						<font size="2">  为 path="/login" 的struts action 定义实际的action类,该action 已经进行 type="org.springframework.web.struts.DelegatingActionProxy"设置</font>
						<br />
				</font>  &lt;bean name="/login" class="com.yourcompany.struts.action.LoginAction" singleton="false"&gt;<br />    &lt;property name="userDAO"&gt;<br />    &lt;ref bean="userDAOProxy" /&gt;  <font color="#0000ff">--注意，这里指定的userDAO是上面定义的代理类<br /></font>  &lt;/property&gt;<br /> &lt;/bean&gt;<br />&lt;/beans&gt; </p><img src ="http://J2eeExploiter.blogjava.net/aggbug/85594.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangrenquan/" target="_blank">kelven</a> 2006-12-05 15:40 <a href="http://www.blogjava.net/zhangrenquan/articles/85594.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>十大最欺骗眼睛的图片</title><link>http://www.blogjava.net/zhangrenquan/articles/81922.html</link><dc:creator>kelven</dc:creator><author>kelven</author><pubDate>Sat, 18 Nov 2006 06:15:00 GMT</pubDate><guid>http://www.blogjava.net/zhangrenquan/articles/81922.html</guid><description><![CDATA[<p>
				<font color="#ff0000" size="4">1.柱子是圆的还是方的？不仔细看还真以为是方的！<br /></font>
		</p>
		<p>
				<img alt="" src="http://yaosansi.com/blog/attachments/month_0610/120061030164152.jpg" />
		</p>
		<p> <font color="#ff0000"><font style="FONT-SIZE: 18px">2.据说能看见9张脸的智商有一百八十了 <br /><img alt="" src="http://yaosansi.com/blog/attachments/month_0610/q2006103016423.jpg" /><br /><font color="#000000"> </font><font style="FONT-SIZE: 18px"><font color="#ff0000">3.狮子在哪里? </font></font><br /><img alt="" src="http://yaosansi.com/blog/attachments/month_0610/920061030164219.jpg" /><br />4.那个红衣女人是真实的还是拼图里的??? <br /><img alt="" src="http://yaosansi.com/blog/attachments/month_0610/p20061030164229.jpg" /><br />5. 十二个人还是十三个人？<br /><img alt="" src="http://yaosansi.com/blog/attachments/month_0610/920061030164249.gif" /><br /><br /><br /><img alt="" src="http://yaosansi.com/blog/attachments/month_0610/j20061030164310.gif" /><br />6.有几个黑点??? <br /><img alt="" src="http://yaosansi.com/blog/attachments/month_0610/w20061030164324.jpg" /><br />7.是静的还是动的? <br /><a title="在新窗口打开图片" href="http://yaosansi.com/blog/attachments/month_0610/9200610301642190458e.jpg" target="_blank"><img alt="" src="http://yaosansi.com/blog/attachments/month_0610/9200610301642190458e.jpg" width="500" /></a><br />8.看得出图里有一张脸吗? <br /><br /><a title="在新窗口打开图片" href="http://yaosansi.com/blog/attachments/month_0610/c2006103016479.jpg" target="_blank"><img alt="" src="http://yaosansi.com/blog/attachments/month_0610/c2006103016479.jpg" width="500" /></a><br /><font color="#000000">　 <br /></font><font style="FONT-SIZE: 18px"><font color="#ff0000">9.一张只要你能在图中找出9颗心就可以许个愿望而且它会马上实现的神奇图片！并且能和自己心爱的人在一起！但是如果你看了这幅图不回帖或半途而废,你将成为天刹孤星 ,孤独终老..希望大家认真观察.能找出几颗算几颗.找的越多.你将来越幸福.千万别看了图不找...后果自负.信不信由你 , 天国神秘的照片 预测你一生的幸福 </font></font><br /><br /><img alt="" src="http://yaosansi.com/blog/attachments/month_0610/v20061030164723.jpg" /><br /><br />10. 看着黑点身体前后移动,发现了什么？<font color="#000000"></font><br /></font></font></p>
		<p> </p>
		<!--NEWSZW_HZH_BEGIN-->
		<a title="在新窗口打开图片" href="http://yaosansi.com/blog/attachments/month_0610/h20061030164732.jpg" target="_blank">
				<img alt="" src="http://yaosansi.com/blog/attachments/month_0610/h20061030164732.jpg" width="500" />
		</a>
		<br clear="all" />
		<br /><img src ="http://J2eeExploiter.blogjava.net/aggbug/81922.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangrenquan/" target="_blank">kelven</a> 2006-11-18 14:15 <a href="http://www.blogjava.net/zhangrenquan/articles/81922.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Div+CSS布局入门教程(一)</title><link>http://www.blogjava.net/zhangrenquan/articles/81920.html</link><dc:creator>kelven</dc:creator><author>kelven</author><pubDate>Sat, 18 Nov 2006 06:08:00 GMT</pubDate><guid>http://www.blogjava.net/zhangrenquan/articles/81920.html</guid><description><![CDATA[[摘录自：<a href="http://www.tblog.com.cn/article.asp?id=283">http://www.tblog.com.cn/article.asp?id=283</a>]<br /><br />一、页面布局与规划<br /><br />　　好久没有认真写点东西了，想起最近这些时间经常有朋友问到我有关于DIV+CSS布局的问题，其实归根结底还是由于没有入门造成的。那么接下来的这篇文章就带领大家入门吧...<br /><br />　　在网页制作中，有许多的术语，例如：CSS、HTML、DHTML、XHTML等等。在下面的文章中我们将会用到一些有关于HTML的基本知识，而在你学习这篇入门教程之前，请确定你已经具有了一定的HTML基础。下面我们就开始一步一步使用DIV+CSS进行网页布局设计吧。<br /><br />　　所有的设计第一步就是构思，构思好了，一般来说还需要用PhotoShop或FireWorks(以下简称PS或FW)等图片处理软件将需要制作的界面布局简单的构画出来，以下是我构思好的界面布局图。<br /><br /><img alt="" src="http://www.tblog.com.cn/attachments/month_0603/w2006318142229.jpg" border="0" /><br /><br />　　下面，我们需要根据构思图来规划一下页面的布局，仔细分析一下该图，我们不难发现，图片大致分为以下几个部分：<br />　　1、顶部部分，其中又包括了LOGO、MENU和一幅Banner图片；<br />　　2、内容部分又可分为侧边栏、主体内容；<br />　　3、底部，包括一些版权信息。<br />　　有了以上的分析，我们就可以很容易的布局了，我们设计层如下图：<br /><img alt="" src="http://www.tblog.com.cn/attachments/month_0603/72006318142329.jpg" border="0" /><br /><br />　　根据上图，我再画了一个实际的页面布局图，说明一下层的嵌套关系，这样理解起来就会更简单了。<br /><br /><img alt="" src="http://www.tblog.com.cn/attachments/month_0603/j200631814242.gif" border="0" /><br />　　DIV结构如下：<br />　　│body {}　/*这是一个HTML元素，具体我就不说明了*/<br />　　└#Container {}　/*页面层容器*/<br />　　　　　├#Header {}　/*页面头部*/<br />　　　　　├#PageBody {}　/*页面主体*/<br />　　　　　│　├#Sidebar {}　/*侧边栏*/<br />　　　　　│　└#MainBody {}　/*主体内容*/<br />　　　　　└#Footer {}　/*页面底部*/<br />　　至此，页面布局与规划已经完成，接下来我们要做的就是开始书写HTML代码和CSS。<br /><img src ="http://J2eeExploiter.blogjava.net/aggbug/81920.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangrenquan/" target="_blank">kelven</a> 2006-11-18 14:08 <a href="http://www.blogjava.net/zhangrenquan/articles/81920.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>div＋css布局入门</title><link>http://www.blogjava.net/zhangrenquan/articles/81919.html</link><dc:creator>kelven</dc:creator><author>kelven</author><pubDate>Sat, 18 Nov 2006 06:05:00 GMT</pubDate><guid>http://www.blogjava.net/zhangrenquan/articles/81919.html</guid><description><![CDATA[[摘录：<a href="http://www.tblog.com.cn/article.asp?id=189">http://www.tblog.com.cn/article.asp?id=189</a>]<br /><br />这是在网页设计师上看到的一篇文章，很适合入门div＋css布局的人看，转了过来收藏，hoho～～<br /><br />你正在学习CSS布局吗？是不是还不能完全掌握纯CSS布局？通常有两种情况阻碍你的学习：<br /><br />第一种可能是你还没有理解CSS处理页面的原理。在你考虑你的页面整体表现效果前，你应当先考虑内容的语义和结构，然后再针对语义、结构添加CSS。这篇文章将告诉你应该怎样把HTML结构化。<br /><br />另一种原因是你对那些非常熟悉的表现层属性(例如：cellpadding,、hspace、align="left"等等)束手无策，不知道该转换成对应的什么CSS语句。当你解决了第一种问题，知道了如何结构化你的HTML，我再给出一个列表，详细列出原来的表现属性用什么CSS来代替。<br /><br />结构化HTML<br />我们在刚学习网页制作时，总是先考虑怎么设计，考虑那些图片、字体、颜色、以及布局方案。然后我们用Photoshop或者Fireworks画出来、切割成小图。最后再通过编辑HTML将所有设计还原表现在页面上。<br /><br />如果你希望你的HTML页面用CSS布局(是CSS-friendly的)，你需要回头重来，先不考虑“外观”，要先思考你的页面内容的语义和结构。<br /><br />外观并不是最重要的。一个结构良好的HTML页面可以以任何外观表现出来，CSS Zen Garden是一个典型的例子。CSS Zen Garden帮助我们最终认识到CSS的强大力量。<br /><br />HTML不仅仅只在电脑屏幕上阅读。你用photoshop精心设计的画面可能不能显示在PDA、移动电话和屏幕阅读机上。但是一个结构良好的HTML页面可以通过CSS的不同定义，显示在任何地方，任何网络设备上。<br /><br />开始思考<br />首先要学习什么是"结构"，一些作家也称之为"语义"。这个术语的意思是你需要分析你的内容块，以及每块内容服务的目的，然后再根据这些内容目的建立起相应的HTML结构。<br /><br />如果你坐下来仔细分析和规划你的页面结构，你可能得到类似这样的几块：<br /><br />标志和站点名称 <br />主页面内容 <br />站点导航(主菜单) <br />子菜单 <br />搜索框 <br />功能区(例如购物车、收银台) <br />页脚(版权和有关法律声明) <br />我们通常采用DIV元素来将这些结构定义出来，类似这样：<br /><br />&lt;div id="header"&gt;&lt;/div&gt;<br /><br />&lt;div id="content"&gt;&lt;/div&gt;<br /><br />&lt;div id="globalnav"&gt;&lt;/div&gt;<br /><br />&lt;div id="subnav"&gt;&lt;/div&gt;<br /><br />&lt;div id="search"&gt;&lt;/div&gt;<br /><br />&lt;div id="shop"&gt;&lt;/div&gt;<br /><br />&lt;div id="footer"&gt;&lt;/div&gt; <br /><br />这不是布局，是结构。这是一个对内容块的语义说明。当你理解了你的结构，就可以加对应的ID在DIV上。DIV容器中可以包含任何内容块，也可以嵌套另一个DIV。内容块可以包含任意的HTML元素---标题、段落、图片、表格、列表等等。<br /><br />根据上面讲述的，你已经知道如何结构化HTML，现在你可以进行布局和样式定义了。每一个内容块都可以放在页面上任何地方，再指定这个块的颜色、字体、边框、背景以及对齐属性等等。<br /><br />使用选择器是件美妙的事<br />id的名称是控制某一内容块的手段,通过给这个内容块套上DIV并加上唯一的id,你就可以用CSS选择器来精确定义每一个页面元素的外观表现,包括标题、列表、图片、链接或者段落等等。例如你为#header写一个CSS规则，就可以完全不同于#content里的图片规则。<br /><br />另外一个例子是：你可以通过不同规则来定义不同内容块里的链接样式。类似这样：#globalnav a:link或者 #subnav a:link或者#content a:link。你也可以定义不同内容块中相同元素的样式不一样。例如，通过#content p和#footer p分别定义#content和#footer中p的样式。从结构上讲，你的页面是由图片、链接、列表、段落等组成的，这些元素本身并不会对显示在什么网络设备中(PDA还是手机或者网络电视)有影响，它们可以被定义为任何的表现外观。<br /><br />一个仔细结构化的HTML页面非常简单，每一个元素都被用于结构目的。当你想缩进一个段落，不需要使用blockquote标签，只要使用p标签，并对p加一个CSS的margin规则就可以实现缩进目的。p是结构化标签，margin是表现属性，前者属于HTML，后者属于CSS。(这就是结构于表现的相分离.)<br /><br />良好结构的HTML页面内几乎没有表现属性的标签。代码非常干净简洁。例如，原先的代码&lt;table width="80%" cellpadding="3" border="2" align="left"&gt;，现在可以只在HTML中写&lt;table&gt;，所有控制表现的东西都写到CSS中去，在结构化的HTML中，table就是表格，而不是其他什么(比如被用来布局和定位)。<br /><br />亲自实践一下结构化<br />上面说的只是最基本的结构，实际应用中，你可以根据需要来调整内容块。常常会出现DIV嵌套的情况，你会看到"container"层中又有其它层，结构类似这样：<br /><br />&lt;div id="navcontainer"&gt;<br /><br />&lt;div id="globalnav"&gt;<br /><br />&lt;ul&gt;a list&lt;/ul&gt;<br /><br />&lt;/div&gt;<br /><br />&lt;div id="subnav"&gt;<br /><br />&lt;ul&gt;another list&lt;/ul&gt;<br /><br />&lt;/div&gt;<br /><br />&lt;/div&gt; <br /><br />嵌套的div元素允许你定义更多的CSS规则来控制表现，例如：你可以给#navcontainer一个规则让列表居右，再给#globalnav一个规则让列表居左，而给#subnav的list另一个完全不同的表现。<br /><br />用CSS替换传统方法<br />下面的列表将帮助你用CSS替换传统方法：<br /><br />HTML属性以及相对应的CSS方法<br />HTML属性  CSS方法  说明 <br />align="left"<br /><br />align="right"  float: left; <br /><br />float: right;  使用CSS可以浮动 任何元素:图片、段落、div、标题、表格、列表等等 <br /><br />当你使用float属性，必须给这个浮动元素定义一个宽度。<br /><br />marginwidth="0" leftmargin="0" marginheight="0" topmargin="0" margin: 0;  使用CSS, margin可以设置在任何元素上, 不仅仅是body元素.更重要的，你可以分别指定元素的top, right, bottom和left的margin值。<br /><br />vlink="#333399" alink="#000000" link="#3333FF" a:link #3ff;<br /><br />a:visited: #339;<br /><br />a:hover: #999;<br /><br />a:active: #00f; <br />在HTML中，链接的颜色作为body的一个属性值定义。整个页面的链接风格都一样。使用CSS的选择器，页面不同部分的链接样式可以不一样。<br /><br />bgcolor="#FFFFFF" background-color: #fff;  在CSS中，任何元素都可以定义背景颜色，不仅仅局限于body和table元素。<br /><br />bordercolor="#FFFFFF" border-color: #fff; 任何元素都可以设置边框(boeder)，你可以分别定义top, right, bottom和left<br /><br />border="3"<br /><br />cellspacing="3"  border-width: 3px;  用CSS，你可以定义table的边框为统一样式，也可以分别定义top, right, bottom and left边框的颜色、尺寸和样式。 <br /><br />你可以使用 table, td or th 这些选择器. <br /><br />如果你需要设置无边框效果，可以使用CSS定义： border-collapse: collapse;<br /><br />&lt;br clear="left"&gt;<br /><br />&lt;br clear="right"&gt;<br /><br />&lt;br clear="all"&gt; <br />clear: left;<br /><br />clear: right;<br /><br />clear: both; <br />许多2列或者3列布局都使用 float属性来定位。如果你在浮动层中定义了背景颜色或者背景图片，你可以使用clear属性.<br /><br />cellpadding="3"<br /><br />vspace="3"<br /><br />hspace="3"  padding: 3px;  用CSS，任何元素都可以设定padding属性，同样，padding可以分别设置top, right, bottom and left。padding是透明的。<br /><br />align="center" text-align: center;<br /><br />margin-right: auto; margin-left: auto; <br />Text-align 只适用于文本. <br /><br />象div，p这样的块级怨毒可以通过margin-right: auto; 和margin-left: auto;来水平居中<br /><br /><br />一些令人遗憾的技巧和工作环境<br />由于浏览器对CSS支持的不完善，我们有时候不得不采取一些技巧(hacks)或建立一种环境(Workarounds)来让CSS实现传统方法同样的效果。例如块级元素有时侯需要使用水平居中的技巧，盒模型bug的技巧等等。所有这些技巧都在Molly Holzschlag的文章《Integrated Web Design: Strategies for Long-Term CSS Hack Management》中有详细说明。<br /><br />另外一个关于CSS技巧的资源站点是Big John和Holly Bergevin的“Position is Everything”。<br /><br />理解浮动行为<br />Eric Meyer的《Containing Floats》将帮助你掌握如何使用float属性布局。float元素有时候需要清除(clear)，阅读《How To Clear Floats Without Structural Markup》将非常有帮助。<br /><br />更多帮助<br />已有的《CSS Discussion》列表是很好的资源，它收集了一个WiKiA讨论组的信息，其中包括CSS布局总结(css-discuss.incutio.com/?page=CssLayouts)，CSS 技巧总结 (css-discuss.incutio.com/?page=CssHack) 以及更多 <br /><br /><img src ="http://J2eeExploiter.blogjava.net/aggbug/81919.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangrenquan/" target="_blank">kelven</a> 2006-11-18 14:05 <a href="http://www.blogjava.net/zhangrenquan/articles/81919.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在主页中制作会移动的文字</title><link>http://www.blogjava.net/zhangrenquan/articles/81917.html</link><dc:creator>kelven</dc:creator><author>kelven</author><pubDate>Sat, 18 Nov 2006 06:01:00 GMT</pubDate><guid>http://www.blogjava.net/zhangrenquan/articles/81917.html</guid><description><![CDATA[<br />基本语法：<br /><br />　　&lt;marquee&gt;需要移动的文字&lt;/marquee&gt;&lt;direction=＃&gt;<br /><br />　　1.方向＃=left, right<br /><br />　　例:&lt;marquee direction=left&gt;从右向左移动&lt;/marquee&gt;&gt;<br />　　 &lt;marquee direction=right&gt;从左向右移动&lt;/marquee&gt;&gt;<br /><br />　　2.次数&lt;bihavior=＃&gt;＃=scroll, slide, alternate<br /><br />　　例:&lt;marquee behavior=scroll&gt;一圈一圈的绕着移动&lt;/marquee&gt;&gt;<br />　　 &lt;marquee behavior=slide&gt;只移动一次就停&lt;/marquee&gt;&gt;&lt;marqueebehavior=alternate&gt;来回移动，不停&lt;/marquee&gt;&gt;<br /><br />　　3.循环&lt;loop=＃&gt;＃=次数，若未指定则循环不止(infinite)<br /><br />　　例:&lt;marquee loop=3 width=50％behavior=scroll&gt;只走3趟&lt;/marquee&gt;<br /><br />　　4.速度加快&lt;scrollamount=＃&gt;<br /><br />　　例:&lt;marquee scrollamount=20&gt;移动速度加快&lt;/marquee&gt;&gt;<br /><br />　　5.速度减慢&lt;scrolldelay=＃&gt;<br /><br />　　例:&lt;marquee scrolldelay=500 scrollamount=100&gt;移动速度减慢&lt;/marquee&gt;<br />　　 <br />　　 6.底色&lt;bgcolor=＃&gt;＃=rrggbb 16进制数码，或者是下列预定义色彩<br />：Black, Olive, Teal, Red, Blue, Maroon, Navy, Gray, Lime,<br />Fuchsia,White, Green, Purple, Silver, Yellow, Aqua<br /><br />　　例:&lt;marquee bgcolor=red&gt;是红色的&lt;/marquee&gt;<br /><br />　　7.面积&lt;height=＃width=＃&gt;<br /><br />　　例:&lt;marquee height=80 bgcolor=red&gt;面积变大了&lt;/marquee&gt; <br /> <br /><img src ="http://J2eeExploiter.blogjava.net/aggbug/81917.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangrenquan/" target="_blank">kelven</a> 2006-11-18 14:01 <a href="http://www.blogjava.net/zhangrenquan/articles/81917.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>