﻿<?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-nbtymm-随笔分类-HTML&amp;CSS&amp;JavaScript</title><link>http://www.blogjava.net/nbtymm/category/12209.html</link><description>&lt;/br&gt;&lt;a href="http://www.fastonlineusers.com"&gt;&lt;b&gt;&lt;font color=red&gt;共有&lt;script src=http://fastonlineusers.com/online.php?d=bluedavy.blogjava.net&gt;&lt;/script&gt;人在同时阅读此Blog&lt;/font&gt;&lt;/b&gt;&lt;/a&gt;</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 07:08:42 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 07:08:42 GMT</pubDate><ttl>60</ttl><item><title>JSTL详解(六)</title><link>http://www.blogjava.net/nbtymm/archive/2007/01/18/94655.html</link><dc:creator>nbt</dc:creator><author>nbt</author><pubDate>Thu, 18 Jan 2007 07:18:00 GMT</pubDate><guid>http://www.blogjava.net/nbtymm/archive/2007/01/18/94655.html</guid><wfw:comment>http://www.blogjava.net/nbtymm/comments/94655.html</wfw:comment><comments>http://www.blogjava.net/nbtymm/archive/2007/01/18/94655.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nbtymm/comments/commentRss/94655.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nbtymm/services/trackbacks/94655.html</trackback:ping><description><![CDATA[
		<h2 align="center">
				<a name="_Toc134092070">
				</a>
				<a name="_Toc133721058">
				</a>
				<a name="_Toc133394909">
				</a>
				<a name="_Toc132191856">
				</a>
				<a name="_Toc132021691">
						<span>
								<span>
										<span>
												<span>
														<span>9.6  Database access</span>
												</span>
										</span>
								</span>
						</span>
				</a>
				<font face="Arial">
						<span>
								<span>
										<span>
												<span>
														<span>
																<span>标签库</span>
														</span>
												</span>
										</span>
								</span>
						</span>
				</font>
		</h2>
		<p>
				<span>
						<font face="Times New Roman">Database access</font>
				</span>
				<span>标签库中的标签用来提供在</span>
				<span>
						<font face="Times New Roman">JSP</font>
				</span>
				<span>页面中可以与数据库进行交互的功能，虽然它的存在对于早期纯</span>
				<span>
						<font face="Times New Roman">JSP</font>
				</span>
				<span>开发的应用以及小型的开发有着意义重大的贡献，但是对于</span>
				<span>
						<font face="Times New Roman">MVC</font>
				</span>
				<span>模型来说，它却是违反规范的。因为与数据库交互的工作本身就属于业务逻辑层的工作，所以不应该在</span>
				<span>
						<font face="Times New Roman">JSP</font>
				</span>
				<span>页面中出现，而是应该在模型层中进行。</span>
		</p>
		<p>
				<span>对于</span>
				<span>
						<font face="Times New Roman">Database access</font>
				</span>
				<span>标签库本书不作重点介绍，只给出几个简单示例让读者略微了解它们的功能。</span>
		</p>
		<p>
				<span>
						<font face="Times New Roman">Database access</font>
				</span>
				<span>标签库有以下</span>
				<span>
						<font face="Times New Roman">6</font>
				</span>
				<span>组标签来进行工作：</span>
				<span>
						<font face="Times New Roman">&lt;sql:setDataSource&gt;</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">&lt;sql:query&gt;</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">&lt;sql:update&gt;</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">&lt;sql:transaction&gt;</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">&lt;sql:setDataSource&gt;</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">&lt;sql:param&gt;</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">&lt;sql:dateParam&gt;</font>
				</span>
				<span>。</span>
		</p>
		<h3>
				<a name="_Toc134092071">
				</a>
				<a name="_Toc133721059">
				</a>
				<a name="_Toc133394910">
						<span>
								<span>
										<span>
												<font face="Arial">9.6.1 </font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>用于设置数据源的</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">&lt;sql:setDataSource&gt;</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>标签</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<span>
						<font face="Times New Roman">&lt;sql:setDataSource&gt;</font>
				</span>
				<span>标签用于设置数据源，下面看一个示例：</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">&lt;sql:setDataSource </font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">
										<span>         </span>var="dataSrc" </font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">
										<span>         </span>url="jdbc:postgresql://localhost:5432/myDB" </font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">
										<span>         </span>driver="org.postgresql.Driver" </font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">
										<span>         </span>user="admin" </font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">
										<span>         </span>password="1111"/&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>该示例定义一个数据源并保存在“</span>
				<span>
						<font face="Times New Roman">dataSrc</font>
				</span>
				<span>”变量内。</span>
		</p>
		<h3>
				<a name="_Toc134092072">
				</a>
				<a name="_Toc133721060">
				</a>
				<a name="_Toc133394911">
						<span>
								<span>
										<span>
												<font face="Arial">9.6.2 </font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>用于查询的</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">&lt;sql:query&gt;</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>标签</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<span>
						<font face="Times New Roman">&lt;sql:query&gt;</font>
				</span>
				<span>标签用于查询数据库，它标签体内可以是一句查询</span>
				<span>
						<font face="Times New Roman">SQL</font>
				</span>
				<span>。下面看一个示例：</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">&lt;sql:query var="queryResults" dataSource="${dataSrc}"&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial"> <span>     </span>select * from table1</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">&lt;/sql:query&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>该示例将返回查询的结果到变量“</span>
				<span>
						<font face="Times New Roman">queryResults</font>
				</span>
				<span>”中，保存的结果是</span>
				<span>
						<font face="Times New Roman">javax.servlet.jsp.jstl.sql.Result</font>
				</span>
				<span>类型的实例。要取得结果集中的数据可以使用</span>
				<span>
						<font face="Times New Roman">&lt;c:forEach&gt;</font>
				</span>
				<span>循环来进行。下面看一个示例。</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">&lt;c:forEach var="row" items="${queryResults.rows}"&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial"> <span>     </span>&lt;tr&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">
										<span>    </span>
										<span>           </span>&lt;td&gt;${row.userName}&lt;/td&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">
										<span>                   </span>&lt;td&gt;${row.passWord}&lt;/td&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial"> <span>     </span>&lt;/tr&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>
						<font size="+0">
								<font face="Arial">&lt;/c:forEach&gt;</font>
						</font>
				</span>
		</p>
		<p>
				<span>“</span>
				<span>rows</span>
				<span>”是</span>
				<span>
						<font face="Times New Roman">javax.servlet.jsp.jstl.sql.Result</font>
				</span>
				<span>实例的变量属性之一，用来表示数据库表中的“列”集合，循环时，通过“</span>
				<span>
						<font face="Times New Roman">${row.XXX}</font>
				</span>
				<span>”表达式可以取得每一列的数据，“</span>
				<span>
						<font face="Times New Roman">XXX</font>
				</span>
				<span>”是表中的列名。</span>
		</p>
		<h3>
				<a name="_Toc134092073">
				</a>
				<a name="_Toc133721061">
				</a>
				<a name="_Toc133394912">
						<span>
								<span>
										<span>
												<font face="Arial">9.6.3 </font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>用于更新的</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">&lt;sql:update&gt;</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>标签</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<span>
						<font face="Times New Roman">&lt;sql:update&gt;</font>
				</span>
				<span>标签用于更新数据库，它的标签体内可以是一句更新的</span>
				<span>
						<font face="Times New Roman">SQL</font>
				</span>
				<span>语句。其使用和</span>
				<span>
						<font face="Times New Roman">&lt;sql:query&gt;</font>
				</span>
				<span>标签没有什么不同。</span>
		</p>
		<h3>
				<a name="_Toc134092074">
				</a>
				<a name="_Toc133721062">
				</a>
				<a name="_Toc133394913">
						<span>
								<span>
										<span>
												<font face="Arial">9.6.4 </font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>用于事务处理的</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">&lt;sql:transaction&gt;</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>标签</span>
								</span>
						</span>
				</span>
		</h3>
		<p>
				<span>
						<font face="Times New Roman">&lt;sql:transaction&gt;</font>
				</span>
				<span>标签用于数据库的事务处理，在该标签体内可以使用</span>
				<span>
						<font face="Times New Roman">&lt;sql:update&gt;</font>
				</span>
				<span>标签和</span>
				<span>
						<font face="Times New Roman">&lt;sql:query&gt;</font>
				</span>
				<span>标签，而</span>
				<span>
						<font face="Times New Roman">&lt;sql:transaction&gt;</font>
				</span>
				<span>标签的事务管理将作用于它们之上。</span>
		</p>
		<p>
				<span>
						<font face="Times New Roman">&lt;sql:transaction&gt;</font>
				</span>
				<span>标签对于事务处理定义了</span>
				<span>
						<font face="Times New Roman">read_committed</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">read_uncommitted</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">repeatable_read</font>
				</span>
				<span>、</span>
				<span>
						<font face="Times New Roman">serializable4</font>
				</span>
				<span>个隔离级别。</span>
		</p>
		<h3>
				<a name="_Toc134092075">
				</a>
				<a name="_Toc133721063">
				</a>
				<a name="_Toc133394914">
						<span>
								<span>
										<span>
												<font face="Arial">9.6.5 </font>
										</span>
								</span>
						</span>
				</a>
				<span>
						<span>
								<span>
										<span>用于事务处理的</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">&lt;sql:param&gt;</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>、</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>
												<font face="Arial">&lt;sql:dateParam&gt;</font>
										</span>
								</span>
						</span>
				</span>
				<span>
						<span>
								<span>
										<span>标签</span>
								</span>
						</span>
				</span>
		</h3>
		<div>
				<span>这两个标签用于向</span>
				<span>
						<font face="Times New Roman">SQL</font>
				</span>
				<span>语句提供参数，就好像程序中预处理</span>
				<span>
						<font face="Times New Roman">SQL</font>
				</span>
				<span>的“</span>
				<span>
						<font face="Times New Roman">?</font>
				</span>
				<span>”一样。</span>
				<span>
						<font face="Times New Roman">&lt;sql:param&gt;</font>
				</span>
				<span>标签传递除</span>
				<span>
						<font face="Times New Roman">java.util.Date</font>
				</span>
				<span>类型以外的所有相融参数，</span>
				<span>
						<font face="Times New Roman">&lt;sql:dateParam&gt;</font>
				</span>
				<span>标签则指定必须传递</span>
				<span>
						<font face="Times New Roman">java.util.Date</font>
				</span>
				<span>类型的参数。</span>
				<br />
		</div>
<img src ="http://www.blogjava.net/nbtymm/aggbug/94655.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nbtymm/" target="_blank">nbt</a> 2007-01-18 15:18 <a href="http://www.blogjava.net/nbtymm/archive/2007/01/18/94655.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp中生成图片验证码</title><link>http://www.blogjava.net/nbtymm/archive/2006/07/21/59350.html</link><dc:creator>nbt</dc:creator><author>nbt</author><pubDate>Fri, 21 Jul 2006 01:36:00 GMT</pubDate><guid>http://www.blogjava.net/nbtymm/archive/2006/07/21/59350.html</guid><wfw:comment>http://www.blogjava.net/nbtymm/comments/59350.html</wfw:comment><comments>http://www.blogjava.net/nbtymm/archive/2006/07/21/59350.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/nbtymm/comments/commentRss/59350.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nbtymm/services/trackbacks/59350.html</trackback:ping><description><![CDATA[
		<p>image.jsp-------------------生成随即验证码图片的jsp页面<br />代码如下：<br />&lt;%@ page contentType="image/jpeg" import="java.awt.*,<br />java.awt.image.*,java.util.*,javax.imageio.*" %&gt;<br />&lt;%!<br />Color getRandColor(int fc,int bc)<br />{<br /> Random random = new Random();<br /> if(fc&gt;255) fc=255;<br /> if(bc&gt;255) bc=255;<br /> int r=fc+random.nextInt(bc-fc);<br /> int g=fc+random.nextInt(bc-fc);<br /> int b=fc+random.nextInt(bc-fc);<br /> return new Color(r,g,b);<br />}<br />%&gt;<br />&lt;%<br />out.clear();//这句针对resin服务器，如果是tomacat可以不要这句<br />response.setHeader("Pragma","No-cache");<br />response.setHeader("Cache-Control","no-cache");<br />response.setDateHeader("Expires", 0);</p>
		<p>int width=60, height=20;<br />BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);</p>
		<p>
				<br />Graphics g = image.getGraphics();<br />Random random = new Random();</p>
		<p>g.setColor(getRandColor(200,250));<br />g.fillRect(0, 0, width, height);</p>
		<p>g.setFont(new Font("Times New Roman",Font.PLAIN,18));</p>
		<p> </p>
		<p>g.setColor(getRandColor(160,200));<br />for (int i=0;i&lt;155;i++)<br />{<br />int x = random.nextInt(width);<br />int y = random.nextInt(height);<br />int xl = random.nextInt(12);<br />int yl = random.nextInt(12);<br />g.drawLine(x,y,x+xl,y+yl);<br />}</p>
		<p>
				<br />String sRand="";<br />for (int i=0;i&lt;4;i++){<br />String rand=String.valueOf(random.nextInt(10));<br />sRand+=rand;</p>
		<p>g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));<br />g.drawString(rand,13*i+6,16);<br />}</p>
		<p>// 将认证码存入SESSION<br />session.setAttribute("rand",sRand);</p>
		<p>g.dispose();</p>
		<p>ImageIO.write(image, "JPEG", response.getOutputStream());<br />%&gt;</p>
		<p>login.jsp--------------------登录页面，在这里我是提供输入验证码然后提交进行验证<br />代码如下：<br />&lt;%@ page language="java" import="java.sql.*" errorPage="" %&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br />&lt;title&gt;用户登录&lt;/title&gt;<br />&lt;script language="javascript"&gt;<br />  function loadimage(){<br />    document.getElementById("randImage").src = "image.jsp?"+Math.random();<br />  }<br />  &lt;/script&gt;<br />&lt;/head&gt;</p>
		<p>&lt;body&gt;</p>
		<p>&lt;table width="256" border="0" cellpadding="0" cellspacing="0"&gt;<br />  &lt;!--DWLayoutTable--&gt;<br />  &lt;form action="validate.jsp" method="post" name="loginForm"&gt;<br />  &lt;tr&gt;<br />    &lt;td width="118" height="22" valign="middle" align="center"&gt;&lt;input type="text" name="rand" size="15"&gt;&lt;/td&gt;<br />    &lt;td width="138" valign="middle" align="center"&gt;&lt;img alt="code..." name="randImage" id="randImage" src="image.jsp" width="60" height="20" border="1" align="absmiddle"&gt;&lt;/td&gt;<br />  &lt;/tr&gt;<br />  &lt;tr&gt;<br />    &lt;td height="36" colspan="2" align="center" valign="middle"&gt;&lt;a href="javascript:loadimage();"&gt;&lt;font class=pt95&gt;看不清点我&lt;/font&gt;&lt;/a&gt;&lt;/td&gt;<br />  &lt;/tr&gt;<br />  &lt;tr&gt;<br />    &lt;td height="36" colspan="2" align="center" valign="middle"&gt;&lt;input type="submit" name="login" value="提交"&gt;&lt;/td&gt;<br />  &lt;/tr&gt;<br />  &lt;/form&gt;<br />&lt;/table&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</p>
		<p>validate.jsp-------------用来验证输入的验证码是否正确<br />代码如下：<br />&lt;%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %&gt;<br />&lt;%<br />String rand = (String)session.getAttribute("rand");<br />String input = request.getParameter("rand");<br />if(rand.equals(input)){<br /> out.print("&lt;script&gt;alert('验证通过！');&lt;/script&gt;");<br />} else{<br /> out.print("&lt;script&gt;alert('请输入正确的验证码！');location.href='login.jsp';&lt;/script&gt;");<br />}<br />%&gt;</p>
		<p>上面生成的是纯数字的验证码，我们对其进行一下修改就可以生成数字字母混合的验证码了。<br />修改部分的代码如下：</p>
		<p>&lt;%<br />......<br />......<br />......<br />for (int i=0;i&lt;155;i++)<br />{<br />  ......<br />  ......<br />}<br />//-----------------以下是要添加的代码--------------<br />char c[] = new char[62];</p>
		<p>for (int i = 97, j = 0; i &lt; 123; i++, j++) {<br />c[j] = (char) i;<br />}<br />for (int o = 65, p = 26; o &lt; 91; o++, p++) {<br />c[p] = (char) o;<br />}<br />for (int m = 48, n = 52; m &lt; 58; m++, n++) {<br />c[n] = (char) m;<br />}        <br />String sRand="";<br />for (int i=0;i&lt;4;i++){<br />int x = random.nextInt(62);<br />String rand=String.valueOf(c[x]);<br />sRand+=rand;<br />//---------------------------------------------<br />%&gt;<br />据有部分朋友反应，在测试过程中出现java.lang.IllegalStateException: getOutputStream() has already been called for this response的异常，经过测试发现，使用tomcat5一下的版本确实会出现该问题，解决的办法就是把tomcat换成高点版本就可以了。</p>
<img src ="http://www.blogjava.net/nbtymm/aggbug/59350.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nbtymm/" target="_blank">nbt</a> 2006-07-21 09:36 <a href="http://www.blogjava.net/nbtymm/archive/2006/07/21/59350.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTML结构化：实践DIV＋CSS网页布局入门指南(转载)</title><link>http://www.blogjava.net/nbtymm/archive/2006/06/15/53045.html</link><dc:creator>nbt</dc:creator><author>nbt</author><pubDate>Thu, 15 Jun 2006 09:54:00 GMT</pubDate><guid>http://www.blogjava.net/nbtymm/archive/2006/06/15/53045.html</guid><wfw:comment>http://www.blogjava.net/nbtymm/comments/53045.html</wfw:comment><comments>http://www.blogjava.net/nbtymm/archive/2006/06/15/53045.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nbtymm/comments/commentRss/53045.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nbtymm/services/trackbacks/53045.html</trackback:ping><description><![CDATA[
		<p style="TEXT-INDENT: 2em">你正在学习CSS布局吗？是不是还不能完全掌握纯CSS布局？通常有两种情况阻碍你的学习： </p>
		<p style="TEXT-INDENT: 2em">第一种可能是你还没有理解CSS处理页面的原理。在你考虑你的页面整体表现效果前，你应当先考虑内容的语义和结构，然后再针对语义、结构添加CSS。这篇文章将告诉你应该怎样把HTML结构化。 </p>
		<p style="TEXT-INDENT: 2em">另一种原因是你对那些非常熟悉的表现层属性(例如：cellpadding,、hspace、align="left"等等)束手无策，不知道该转换成对 应的什么CSS语句。 当你解决了第一种问题，知道了如何结构化你的HTML，我再给出一个列表，详细列出原来的表现属性用什么CSS来代替。 </p>
		<p style="TEXT-INDENT: 2em">
				<strong>结构化HTML</strong>
		</p>
		<p style="TEXT-INDENT: 2em">我们在刚学习网页制作时，总是先考虑怎么设计，考虑那些图片、字体、颜色、以及布局方案。然后我们用Photoshop或者Fireworks画出来、切割成小图。最后再通过编辑HTML将所有设计还原表现在页面上。 </p>
		<p style="TEXT-INDENT: 2em">如果你希望你的HTML页面用CSS布局(是CSS-friendly的)，你需要回头重来，先不考虑“外观”，要先思考你的页面内容的语义和结构。 </p>
		<p style="TEXT-INDENT: 2em">外观并不是最重要的。一个结构良好的HTML页面可以以任何外观表现出来，CSS Zen Garden是一个典型的例子。CSS Zen Garden帮助我们最终认识到CSS的强大力量。 </p>
		<p style="TEXT-INDENT: 2em">HTML不仅仅只在电脑屏幕上阅读。你用photoshop精心设计的画面可能不能显示在PDA、移动电话和屏幕阅读机上。但是一个结构良好的HTML页面可以通过CSS的不同定义，显示在任何地方，任何网络设备上。 </p>
		<p style="TEXT-INDENT: 2em">
				<strong>开始思考</strong>
		</p>
		<p style="TEXT-INDENT: 2em">首先要学习什么是"结构"，一些作家也称之为"语义"。这个术语的意思是你需要分析你的内容块，以及每块内容服务的目的，然后再根据这些内容目的建立起相应的HTML结构。 </p>
		<p style="TEXT-INDENT: 2em">如果你坐下来仔细分析和规划你的页面结构，你可能得到类似这样的几块： </p>
		<p style="TEXT-INDENT: 2em">标志和站点名称 </p>
		<p style="TEXT-INDENT: 2em">主页面内容 </p>
		<p style="TEXT-INDENT: 2em">站点导航(主菜单) </p>
		<p style="TEXT-INDENT: 2em">子菜单 </p>
		<p style="TEXT-INDENT: 2em">搜索框 </p>
		<p style="TEXT-INDENT: 2em">功能区(例如购物车、收银台) </p>
		<p style="TEXT-INDENT: 2em">页脚(版权和有关法律声明) </p>
		<p style="TEXT-INDENT: 2em">我们通常采用DIV元素来将这些结构定义出来，类似这样： </p>
		<p style="TEXT-INDENT: 2em">＜div id="header"＞＜/div＞ </p>
		<p style="TEXT-INDENT: 2em">＜div id="content"＞＜/div＞ </p>
		<p style="TEXT-INDENT: 2em">＜div id="globalnav"＞＜/div＞ </p>
		<p style="TEXT-INDENT: 2em">＜div id="subnav"＞＜/div＞ </p>
		<p style="TEXT-INDENT: 2em">＜div id="search"＞＜/div＞ </p>
		<p style="TEXT-INDENT: 2em">＜div id="shop"＞＜/div＞ </p>
		<p style="TEXT-INDENT: 2em">＜div id="footer"＞＜/div＞ </p>
		<p style="TEXT-INDENT: 2em">这不是布局，是结构。这是一个对内容块的语义说明。当你理解了你的结构，就可以加对应的ID在DIV上。DIV容器中可以包含任何内容块，也可以嵌套另一个DIV。内容块可以包含任意的HTML元素---标题、段落、图片、表格、列表等等。 </p>
		<p style="TEXT-INDENT: 2em">根据上面讲述的，你已经知道如何结构化HTML，现在你可以进行布局和样式定义了。每一个内容块都可以放在页面上任何地方，再指定这个块的颜色、字体、边框、背景以及对齐属性等等。 </p>
		<p style="TEXT-INDENT: 2em">
				<strong>使用选择器是件美妙的事</strong>
		</p>
		<p style="TEXT-INDENT: 2em">id的名称是控制某一内容块的手段,通过给这个内容块套上DIV并加上唯一的id,你就可以用CSS选择器来精确定义每一个页面元素的外观表现,包括标 题、列表、图片、链接或者段落等等。例如你为#header写一个CSS规则，就可以完全不同于#content里的图片规则。 </p>
		<p style="TEXT-INDENT: 2em">另外一个例子是：你可以通过不同规则来定义不同内容块里的链接样式。类似这样：#globalnav a:link或者 #subnav a:link或者#content a:link。你也可以定义不同内容块中相同元素的样式不一样。例如，通过#content p和#footer p分别定义#content和#footer中p的样式。从结构上讲，你的页面是由图片、链接、列表、段落等组成的，这些元素本身并不会对显示在什么网络 设备中(PDA还是手机或者网络电视)有影响，它们可以被定义为任何的表现外观。 </p>
		<p style="TEXT-INDENT: 2em">一个仔细结构化的HTML页面非常简单，每一个元素都被用于结构目的。当你想缩进一个段落，不需要使用blockquote标签，只要使用p标签，并对p 加一个CSS的margin规则就可以实现缩进目的。p是结构化标签，margin是表现属性，前者属于HTML，后者属于CSS。(这就是结构于表现的 相分离.) </p>
		<p style="TEXT-INDENT: 2em">良好结构的HTML页面内几乎没有表现属性的标签。代码非常干净简洁。例如，原先的代码＜table width="80%" cellpadding="3" border="2" align="left"＞，现在可以只在HTML中写＜table＞，所有控制表现的东西都写到CSS中去，在结构化的HTML中， table就是表格，而不是其他什么(比如被用来布局和定位)。 </p>
		<p style="TEXT-INDENT: 2em">
				<a name="part">
						<strong>亲自实践一下结构化</strong>
				</a>
		</p>
		<p style="TEXT-INDENT: 2em">上面说的只是最基本的结构，实际应用中，你可以根据需要来调整内容块。常常会出现DIV嵌套的情况，你会看到"container"层中又有其它层，结构类似这样： </p>
		<p style="TEXT-INDENT: 2em">＜div id="navcontainer"＞ </p>
		<p style="TEXT-INDENT: 2em">＜div id="globalnav"＞ </p>
		<p style="TEXT-INDENT: 2em">＜ul＞a list＜/ul＞ </p>
		<p style="TEXT-INDENT: 2em">＜/div＞ </p>
		<p style="TEXT-INDENT: 2em">＜div id="subnav"＞ </p>
		<p style="TEXT-INDENT: 2em">＜ul＞another list＜/ul＞ </p>
		<p style="TEXT-INDENT: 2em">＜/div＞ </p>
		<p style="TEXT-INDENT: 2em">＜/div＞ </p>
		<p style="TEXT-INDENT: 2em">嵌套的div元素允许你定义更多的CSS规则来控制表现，例如：你可以给#navcontainer一个规则让列表居右，再给#globalnav一个规则让列表居左，而给#subnav的list另一个完全不同的表现。 </p>
		<p style="TEXT-INDENT: 2em">
				<strong>用CSS替换传统方法</strong>
		</p>
		<p style="TEXT-INDENT: 2em">下面的列表将帮助你用CSS替换传统方法： </p>
		<p style="TEXT-INDENT: 2em">HTML属性以及相对应的CSS方法 </p>
		<p style="TEXT-INDENT: 2em">HTML属性 </p>
		<p style="TEXT-INDENT: 2em">CSS方法说明 </p>
		<p style="TEXT-INDENT: 2em">align="left" </p>
		<p style="TEXT-INDENT: 2em">align="right" float: left; </p>
		<p style="TEXT-INDENT: 2em">float: right; 使用CSS可以浮动 任何元素:图片、段落、div、标题、表格、列表等等 </p>
		<p style="TEXT-INDENT: 2em">当你使用float属性，必须给这个浮动元素定义一个宽度。 </p>
		<p style="TEXT-INDENT: 2em">marginwidth="0" leftmargin="0" marginheight="0" topmargin="0" margin: 0; 使用CSS, margin可以设置在任何元素上, 不仅仅是body元素.更重要的，你可以分别指定元素的top, right, bottom和left的margin值。 </p>
		<p style="TEXT-INDENT: 2em">vlink="#333399" alink="#000000" link="#3333FF" a:link #3ff; </p>
		<p style="TEXT-INDENT: 2em">a:visited: #339; </p>
		<p style="TEXT-INDENT: 2em">a:hover: #999; </p>
		<p style="TEXT-INDENT: 2em">a:active: #00f; </p>
		<p style="TEXT-INDENT: 2em">在HTML中，链接的颜色作为body的一个属性值定义。整个页面的链接风格都一样。使用CSS的选择器，页面不同部分的链接样式可以不一样。 </p>
		<p style="TEXT-INDENT: 2em">bgcolor="#FFFFFF" background-color: #fff; 在CSS中，任何元素都可以定义背景颜色，不仅仅局限于body和table元素。 </p>
		<p style="TEXT-INDENT: 2em">bordercolor="#FFFFFF" border-color: #fff; 任何元素都可以设置边框(boeder)，你可以分别定义top, right, bottom和left </p>
		<p style="TEXT-INDENT: 2em">border="3"cellspacing="3" border-width: 3px; 用CSS，你可以定义table的边框为统一样式，也可以分别定义top, right, bottom and left边框的颜色、尺寸和样式。 </p>
		<p style="TEXT-INDENT: 2em">你可以使用 table, td or th 这些选择器. </p>
		<p style="TEXT-INDENT: 2em">如果你需要设置无边框效果，可以使用CSS定义： border-collapse: collapse; </p>
		<p style="TEXT-INDENT: 2em">＜br clear="left"＞ </p>
		<p style="TEXT-INDENT: 2em">＜br clear="right"＞ </p>
		<p style="TEXT-INDENT: 2em">＜br clear="all"＞ </p>
		<p style="TEXT-INDENT: 2em">clear: left; </p>
		<p style="TEXT-INDENT: 2em">clear: right; </p>
		<p style="TEXT-INDENT: 2em">clear: both; </p>
		<p style="TEXT-INDENT: 2em">许多2列或者3列布局都使用 float属性来定位。如果你在浮动层中定义了背景颜色或者背景图片，你可以使用clear属性. </p>
		<p style="TEXT-INDENT: 2em">cellpadding="3" </p>
		<p style="TEXT-INDENT: 2em">vspace="3" </p>
		<p style="TEXT-INDENT: 2em">hspace="3" padding: 3px; 用CSS，任何元素都可以设定padding属性，同样，padding可以分别设置top, right, bottom and left。padding是透明的。 </p>
		<p style="TEXT-INDENT: 2em">align="center" text-align: center; </p>
		<p style="TEXT-INDENT: 2em">margin-right: auto; margin-left: auto; </p>
		<p style="TEXT-INDENT: 2em">Text-align 只适用于文本. </p>
		<p style="TEXT-INDENT: 2em">象div，p这样的块级可以通过margin-right: auto; 和margin-left: auto;来水平居中 </p>
		<p style="TEXT-INDENT: 2em">
				<strong>一些令人遗憾的技巧和工作环境 </strong>
		</p>
		<p style="TEXT-INDENT: 2em">由于浏览器对CSS支持的不完善，我们有时候不得不采取一些技巧(hacks)或建立一种环境(Workarounds)来让CSS实现传统方法同样的效 果。例如块级元素有时侯需要使用水平居中的技巧，盒模型bug的技巧等等。所有这些技巧都在Molly Holzschlag的文章《Integrated Web Design: Strategies for Long-Term CSS Hack Management》中有详细说明</p>
<img src ="http://www.blogjava.net/nbtymm/aggbug/53045.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nbtymm/" target="_blank">nbt</a> 2006-06-15 17:54 <a href="http://www.blogjava.net/nbtymm/archive/2006/06/15/53045.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>