<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java Blog From WeiChunHua

    Java

    常用鏈接

    統(tǒng)計(jì)

    develop

    news

    最新評(píng)論

    2008年6月26日 #

    JDBC連接數(shù)據(jù)庫(kù)大全

              現(xiàn)在有好多初學(xué)jsp的網(wǎng)友經(jīng)常會(huì)問數(shù)據(jù)庫(kù)怎么連接啊,怎么老出錯(cuò)???所以我集中的在這寫篇文章供大家參考,其實(shí)這種把數(shù)據(jù)庫(kù)邏輯全部放在jsp里未必是好的做法,但是有利于初學(xué)者學(xué)習(xí),所以我就這樣做了,當(dāng)大家學(xué)到一定程度的時(shí)候,可以考慮用MVC的模式開發(fā)。在練習(xí)這些代碼的時(shí)候,你一定將jdbc的驅(qū)動(dòng)程序放到服務(wù)器的類路徑里,然后要在數(shù)據(jù)庫(kù)里建一個(gè)表test,有兩個(gè)字段比如為test1test2,可以用下面SQL
    create table test(test1 varchar(20),test2 varchar(20)
    然后向這個(gè)表寫入一條測(cè)試紀(jì)錄
    那么現(xiàn)在開始我們的jsp和數(shù)據(jù)庫(kù)之旅吧。
    一、jsp連接Oracle8/8i/9i數(shù)據(jù)庫(kù)(用thin模式)
    testoracle.jsp
    如下:
    <%@ page contentType="text/html;charset=gb2312"%>
    <%@ page import="java.sql.*"%>
    <html>
    <body>
    <%Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
    String url="jdbc:oracle:thin:@localhost:1521:orcl";
    //orcl
    為你的數(shù)據(jù)庫(kù)的SID
    String user="scott";
    String password="tiger";
    Connection conn= DriverManager.getConnection(url,user,password);
    Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
    String sql="select * from test";
    ResultSet rs=stmt.executeQuery(sql);
    while(rs.next()) {%>
    您的第一個(gè)字段內(nèi)容為:<%=rs.getString(1)%>
    您的第二個(gè)字段內(nèi)容為:<%=rs.getString(2)%>
    <%}%>
    <%out.print("
    數(shù)據(jù)庫(kù)操作成功,恭喜你");%>
    <%rs.close();
    stmt.close();
    conn.close();
    %>
    </body>
    </html>
    二、jsp連接Sql Server7.0/2000數(shù)據(jù)庫(kù)
    testsqlserver.jsp
    如下:
    <%@ page contentType="text/html;charset=gb2312"%>
    <%@ page import="java.sql.*"%>
    <html>
    <body>
    <%Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
    String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
    //pubs
    為你的數(shù)據(jù)庫(kù)的
    String user="sa";
    String password="";
    Connection conn= DriverManager.getConnection(url,user,password);
    Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
    String sql="select * from test";
    ResultSet rs=stmt.executeQuery(sql);
    while(rs.next()) {%>
    您的第一個(gè)字段內(nèi)容為:<%=rs.getString(1)%>
    您的第二個(gè)字段內(nèi)容為:<%=rs.getString(2)%>
    <%}%>
    <%out.print("
    數(shù)據(jù)庫(kù)操作成功,恭喜你");%>
    <%rs.close();
    stmt.close();
    conn.close();
    %>
    </body>
    </html>
    三、jsp連接DB2數(shù)據(jù)庫(kù)
    testdb2.jsp
    如下:
    <%@ page contentType="text/html;charset=gb2312"%>
    <%@ page import="java.sql.*"%>
    <html>
    <body>
    <%Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
    String url="jdbc:db2://localhost:5000/sample";
    //sample
    為你的數(shù)據(jù)庫(kù)名
    String user="admin";
    String password="";
    Connection conn= DriverManager.getConnection(url,user,password);
    Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
    String sql="select * from test";
    ResultSet rs=stmt.executeQuery(sql);
    while(rs.next()) {%>
    您的第一個(gè)字段內(nèi)容為:<%=rs.getString(1)%>
    您的第二個(gè)字段內(nèi)容為:<%=rs.getString(2)%>
    <%}%>
    <%out.print("
    數(shù)據(jù)庫(kù)操作成功,恭喜你");%>
    <%rs.close();
    stmt.close();
    conn.close();
    %>
    </body>
    </html>
    四、jsp連接Informix數(shù)據(jù)庫(kù)
    testinformix.jsp
    如下:
    <%@ page contentType="text/html;charset=gb2312"%>
    <%@ page import="java.sql.*"%>
    <html>
    <body>
    <%Class.forName("com.informix.jdbc.IfxDriver").newInstance();
    String url =
    "jdbc:informix-sqli://123.45.67.89:1533/testDB:INFORMIXSERVER=myserver;
    user=testuser;password=testpassword";
    //testDB
    為你的數(shù)據(jù)庫(kù)名
    Connection conn= DriverManager.getConnection(url);
    Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
    String sql="select * from test";
    ResultSet rs=stmt.executeQuery(sql);
    while(rs.next()) {%>
    您的第一個(gè)字段內(nèi)容為:<%=rs.getString(1)%>
    您的第二個(gè)字段內(nèi)容為:<%=rs.getString(2)%>
    <%}%>
    <%out.print("
    數(shù)據(jù)庫(kù)操作成功,恭喜你");%>
    <%rs.close();
    stmt.close();
    conn.close();
    %>
    </body>
    </html>
    五、jsp連接Sybase數(shù)據(jù)庫(kù)
    testmysql.jsp
    如下:
    <%@ page contentType="text/html;charset=gb2312"%>
    <%@ page import="java.sql.*"%>
    <html>
    <body>
    <%Class.forName("com.sybase.jdbc.SybDriver").newInstance();
    String url =" jdbc:sybase:Tds:localhost:5007/tsdata";
    //tsdata
    為你的數(shù)據(jù)庫(kù)名
    Properties sysProps = System.getProperties();
    SysProps.put("user","userid");
    SysProps.put("password","user_password");
    Connection conn= DriverManager.getConnection(url, SysProps);
    Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
    String sql="select * from test";
    ResultSet rs=stmt.executeQuery(sql);
    while(rs.next()) {%>
    您的第一個(gè)字段內(nèi)容為:<%=rs.getString(1)%>
    您的第二個(gè)字段內(nèi)容為:<%=rs.getString(2)%>
    <%}%>
    <%out.print("
    數(shù)據(jù)庫(kù)操作成功,恭喜你");%>
    <%rs.close();
    stmt.close();
    conn.close();
    %>
    </body>
    </html>
    六、jsp連接MySQL數(shù)據(jù)庫(kù)
    testmysql.jsp
    如下:
    <%@ page contentType="text/html;charset=gb2312"%>
    <%@ page import="java.sql.*"%>
    <html>
    <body>
    <%Class.forName("org.gjt.mm.mysql.Driver").newInstance();
    String url ="jdbc:mysql://localhost/softforum?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1"
    //testDB
    為你的數(shù)據(jù)庫(kù)名
    Connection conn= DriverManager.getConnection(url);
    Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
    String sql="select * from test";
    ResultSet rs=stmt.executeQuery(sql);
    while(rs.next()) {%>
    您的第一個(gè)字段內(nèi)容為:<%=rs.getString(1)%>
    您的第二個(gè)字段內(nèi)容為:<%=rs.getString(2)%>
    <%}%>
    <%out.print("
    數(shù)據(jù)庫(kù)操作成功,恭喜你");%>
    <%rs.close();
    stmt.close();
    conn.close();
    %>
    </body>
    </html>
    七、jsp連接PostgreSQL數(shù)據(jù)庫(kù)
    testmysql.jsp
    如下:
    <%@ page contentType="text/html;charset=gb2312"%>
    <%@ page import="java.sql.*"%>
    <html>
    <body>
    <%Class.forName("org.postgresql.Driver").newInstance();
    String url ="jdbc:postgresql://localhost/soft"
    //soft
    為你的數(shù)據(jù)庫(kù)名
    String user="myuser";
    String password="mypassword";
    Connection conn= DriverManager.getConnection(url,user,password);
    Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
    String sql="select * from test";
    ResultSet rs=stmt.executeQuery(sql);
    while(rs.next()) {%>
    您的第一個(gè)字段內(nèi)容為:<%=rs.getString(1)%>
    您的第二個(gè)字段內(nèi)容為:<%=rs.getString(2)%>
    <%}%>
    <%out.print("
    數(shù)據(jù)庫(kù)操作成功,恭喜你");%>
    <%rs.close();
    stmt.close();
    conn.close();
    %>
    </body>
    </html>

    posted @ 2008-12-17 16:47 sunny spring 閱讀(311) | 評(píng)論 (0)編輯 收藏

    Hibernate入門程序

           以下程序是Hiberante入門程序:代碼如下:首先說(shuō)hibernate開發(fā)流程.A、準(zhǔn)備一個(gè)POJO類  B、創(chuàng)建類的映射和配置文件(hibernate.cfg.xml  class.hbm.xml)class.hbm.xml此配置文件是必須與POJO類中的屬性一一對(duì)應(yīng).
    現(xiàn)在我以我創(chuàng)建的程序?yàn)槔齺?lái)進(jìn)行說(shuō)明:數(shù)據(jù)庫(kù)為demo,表的名字為admin
    1、POJO類

    package com.wch.pojo;

    public class Admin {
     private int id;
     private String username;
     private String password;
     public int getId() {
      return id;
     }
     public void setId(int id) {
      this.id = id;
     }
     public String getPassword() {
      return password;
     }
     public void setPassword(String password) {
      this.password = password;
     }
     public String getUsername() {
      return username;
     }
     public void setUsername(String username) {
      this.username = username;
     }
    }

    class.hbm.xml映射文件存放位置必須于POJO位置一致.也就是說(shuō)必須放在同一個(gè)目錄.hibernate.cfg.xml放在src根目錄下.
    2、創(chuàng)建hibernate.cfg.xml和class.hbm.xml(class指的是POJO類的名字)
    class.hbm.xml:
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!--
        Mapping file autogenerated by MyEclipse Persistence Tools
    -->
    <hibernate-mapping>
        <class name="com.wch.pojo.Admin" table="admin">
            <id name="id" type="integer">
                <column name="id" />
                <generator class="assigned"></generator>
            </id>
            <property name="username" type="string">
                <column name="username" length="32" not-null="false" />
            </property>
            <property name="password" type="string">
                <column name="password" length="20" not-null="false" />
            </property>
        </class>
    </hibernate-mapping>
    hibernate.cfg.xml:

    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
              "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
              "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

    <!-- Generated by MyEclipse Hibernate Tools.                   -->
    <hibernate-configuration>

    <session-factory>
     <property name="dialect">
      org.hibernate.dialect.MySQLDialect
     </property>
     <property name="connection.url">
      jdbc:mysql://localhost:3306/demo
     </property>
     <property name="connection.username">root</property>
     <property name="connection.password">****</property>
     <property name="connection.driver_class">
      com.mysql.jdbc.Driver
     </property>
     <property name="myeclipse.connection.profile">mysql5.0</property>
     <property name="show_sql">true</property>
     <mapping resource="com/wch/pojo/Admin.hbm.xml" />

    </session-factory>

    </hibernate-configuration>


    3、創(chuàng)建應(yīng)用程序并進(jìn)行代碼測(cè)試:

    package com.wch.op;

    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;

    import com.wch.pojo.Admin;

    public class UserOperation {
     public static void main(String[] args)throws Exception{
      Configuration config = new Configuration().configure();
      // 創(chuàng)建工廠
      SessionFactory factory = config.buildSessionFactory();
      // 打開session
      Session session = factory.openSession();
      // 事務(wù)提交
      try{
       Transaction tx = session.beginTransaction();
       // 創(chuàng)建對(duì)象
       Admin hb = new Admin();
       hb.setId(3);
       hb.setUsername("Hibernate3.2");
       hb.setPassword("20081202");
       //hb.setUsername("WCH");
       //hb.setPassword("Hibernate");
       // 執(zhí)行插入語(yǔ)句,在hibernat中操作的是一個(gè)對(duì)象
       session.save(hb);
       // 提交事務(wù)
       tx.commit();
      }catch(Exception e)
      {
       System.out.println("error Msg:"+e.getMessage());
      }finally{
        // close session
        session.close();
      }
     }
    }

    更為詳細(xì)的解釋請(qǐng)參照Hibernate官方網(wǎng)站:www.hibernate.org


    posted @ 2008-12-02 10:19 sunny spring 閱讀(277) | 評(píng)論 (0)編輯 收藏

    windows系統(tǒng)命令全集

    ASSOC    顯示或修改文件擴(kuò)展名關(guān)聯(lián)。
    AT       計(jì)劃在計(jì)算機(jī)上運(yùn)行的命令和程序。
    ATTRIB   顯示或更改文件屬性。
    BREAK    設(shè)置或清除擴(kuò)展式 CTRL+C 檢查。
    CACLS    顯示或修改文件的訪問控制列表(ACLs)。
    CALL     從另一個(gè)批處理程序調(diào)用這一個(gè)。
    CD       顯示當(dāng)前目錄的名稱或?qū)⑵涓摹?br /> CHCP     顯示或設(shè)置活動(dòng)代碼頁(yè)數(shù)。
    CHDIR    顯示當(dāng)前目錄的名稱或?qū)⑵涓摹?br /> CHKDSK   檢查磁盤并顯示狀態(tài)報(bào)告。
    CHKNTFS  顯示或修改啟動(dòng)時(shí)間磁盤檢查。
    CLS      清除屏幕。
    CMD      打開另一個(gè) Windows 命令解釋程序窗口。
    COLOR    設(shè)置默認(rèn)控制臺(tái)前景和背景顏色。
    COMP     比較兩個(gè)或兩套文件的內(nèi)容。
    COMPACT  顯示或更改 NTFS 分區(qū)上文件的壓縮。
    CONVERT  將 FAT 卷轉(zhuǎn)換成 NTFS。您不能轉(zhuǎn)換
             當(dāng)前驅(qū)動(dòng)器。
    COPY     將至少一個(gè)文件復(fù)制到另一個(gè)位置。
    DATE     顯示或設(shè)置日期。
    DEL      刪除至少一個(gè)文件。
    DIR      顯示一個(gè)目錄中的文件和子目錄。
    DISKCOMP 比較兩個(gè)軟盤的內(nèi)容。
    DISKCOPY 將一個(gè)軟盤的內(nèi)容復(fù)制到另一個(gè)軟盤。
    DOSKEY   編輯命令行、調(diào)用 Windows 命令并創(chuàng)建宏。
    ECHO     顯示消息,或?qū)⒚罨仫@打開或關(guān)上。
    ENDLOCAL 結(jié)束批文件中環(huán)境更改的本地化。
    ERASE    刪除至少一個(gè)文件。
    EXIT     退出 CMD.EXE 程序(命令解釋程序)。
    FC       比較兩個(gè)或兩套文件,并顯示
             不同處。
    FIND     在文件中搜索文字字符串。
    FINDSTR  在文件中搜索字符串。
    FOR      為一套文件中的每個(gè)文件運(yùn)行一個(gè)指定的命令。
    FORMAT   格式化磁盤,以便跟 Windows 使用。
    FTYPE    顯示或修改用于文件擴(kuò)展名關(guān)聯(lián)的文件類型。
    GOTO     將 Windows 命令解釋程序指向批處理程序
             中某個(gè)標(biāo)明的行。
    GRAFTABL 啟用 Windows 來(lái)以圖像模式顯示
             擴(kuò)展字符集。
    HELP     提供 Windows 命令的幫助信息。
    IF       執(zhí)行批處理程序中的條件性處理。
    LABEL    創(chuàng)建、更改或刪除磁盤的卷標(biāo)。
    MD       創(chuàng)建目錄。
    MKDIR    創(chuàng)建目錄。
    MODE     配置系統(tǒng)設(shè)備。
    MORE     一次顯示一個(gè)結(jié)果屏幕。
    MOVE     將文件從一個(gè)目錄移到另一個(gè)目錄。
    PATH     顯示或設(shè)置可執(zhí)行文件的搜索路徑。
    PAUSE    暫停批文件的處理并顯示消息。
    POPD     還原 PUSHD 保存的當(dāng)前目錄的上一個(gè)值。
    PRINT    打印文本文件。
    PROMPT   更改 Windows 命令提示符。
    PUSHD    保存當(dāng)前目錄,然后對(duì)其進(jìn)行更改。
    RD       刪除目錄。
    RECOVER  從有問題的磁盤恢復(fù)可讀信息。
    REM      記錄批文件或 CONFIG.SYS 中的注釋。
    REN      重命名文件。
    RENAME   重命名文件。
    REPLACE  替換文件。
    RMDIR    刪除目錄。
    SET      顯示、設(shè)置或刪除 Windows 環(huán)境變量。
    SETLOCAL 開始批文件中環(huán)境更改的本地化。
    SHIFT    更換批文件中可替換參數(shù)的位置。
    SORT     對(duì)輸入進(jìn)行分類。
    START    啟動(dòng)另一個(gè)窗口來(lái)運(yùn)行指定的程序或命令。
    SUBST    將路徑跟一個(gè)驅(qū)動(dòng)器號(hào)關(guān)聯(lián)。
    TIME     顯示或設(shè)置系統(tǒng)時(shí)間。
    TITLE    設(shè)置 CMD.EXE 會(huì)話的窗口標(biāo)題。
    TREE     以圖形模式顯示驅(qū)動(dòng)器或路徑的目錄結(jié)構(gòu)。
    TYPE     顯示文本文件的內(nèi)容。
    VER      顯示 Windows 版本。
    VERIFY   告訴 Windows 是否驗(yàn)證文件是否已正確
             寫入磁盤。
    VOL      顯示磁盤卷標(biāo)和序列號(hào)。
    XCOPY    復(fù)制文件和目錄樹。

    posted @ 2008-12-01 15:58 sunny spring 閱讀(250) | 評(píng)論 (0)編輯 收藏

    quartz 詳解

             最近在開發(fā)的過程中,經(jīng)常要使用系統(tǒng)自動(dòng)清零的操作,比如說(shuō):系統(tǒng)在給定的時(shí)間跟客戶發(fā)送電子郵件,在指定的時(shí)間段內(nèi)執(zhí)行某些操作等等,如果我們只是人工去操作的話不但步驟非常的麻煩而且覺得這是一個(gè)工作量非常大的任務(wù),有了quartz框架以后我們所有的任務(wù)多可以交給它去做,程序員唯一要做的只是編寫代碼并配置一下程序就OK了,這樣大大提高了開發(fā)速度和工作效率.配置步驟如下:
    1、編寫quartz.properties文件:代碼如下:
    #============================================================================
    # Configure Main Scheduler Properties 
    #============================================================================
    org.quartz.scheduler.instanceName = QuartzScheduler
    org.quartz.scheduler.instanceId = AUTO
    #org.quartz.scheduler.rmi.export = false
    #org.quartz.scheduler.rmi.proxy = false
    #============================================================================
    # Configure ThreadPool 
    #============================================================================
    org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
    org.quartz.threadPool.threadCount = 4
    org.quartz.threadPool.threadPriority = 5
    #============================================================================
    # Configure Plugins
    #============================================================================
    #org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin
    org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
    org.quartz.plugin.jobInitializer.fileName = /scheduler/quartz_job.xml
    org.quartz.plugin.jobInitializer.overWriteExistingJobs = false
    org.quartz.plugin.jobInitializer.failOnFileNotFound = true
    org.quartz.plugin.jobInitializer.scanInterval = 10
    org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin
    org.quartz.plugin.shutdownhook.cleanShutdown = true
    #org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
    2、編寫quartz_job.xml
    <?xml version='1.0' encoding='utf-8'?>
    <quartz>
    <job>
       <job-detail>
         <name>test</name>
         <group>DEFAULT</group>
         <description>testJobhere</description>
         <job-class>scheduler.TestJob</job-class>
         <job-data-map allows-transient-data="true">
          <entry>
           <key>name</key>
           <value>test</value>
          </entry>
        </job-data-map>
      </job-detail>
       <trigger>
                  <cron>
                       <name>testCron</name>
                       <group>DEFAULT</group>
                       <job-name>test</job-name>
                      <job-group>DEFALUT</job-group>
                      <!--x/?  x表示間斷啟動(dòng)時(shí)間  ?表示執(zhí)行間隔時(shí)間  13啟動(dòng)時(shí)間-->
                      <cron-expression>0 1/2 23 * * ?</cron-expression>
                      <!--每月1號(hào)0點(diǎn)執(zhí)行
                       <cron-expression>0 1 0 1 1-12 ?</cron-expression>
                       -->
                  </cron>
            </trigger>
    </job>
    3、編寫java代碼進(jìn)行測(cè)試:
    import org.quartz.Job;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    public class ZeroCount implements Job{
        public void execute(JobExecutionContext context) throws JobExecutionException
     {
        String name = context.getJobDetail().getJobDataMap().getString("name");
    System.out.println(name);

    }
    }
    出下以下結(jié)果表示配置成功:
    test
    4、此步驟是最后一步也是最重要的一步,只要加入如下代碼的到/WEB-INF/web.xml文件中在指定的時(shí)間內(nèi)就會(huì)執(zhí)行系統(tǒng)調(diào)度.
    <servlet>
        <servlet-name>QuartzInitializer</servlet-name>
        <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
        <init-param>
         <param-name>config-file</param-name>
         <param-value>/quartz.properties</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <init-param>
         <param-name>shutdown-on-unload</param-name>
         <param-value>true</param-value>
        </init-param>
        <init-param>
         <param-name>start-scheduler-on-load</param-name>
         <param-value>true</param-value>
        </init-param>
    </servlet>

    參考網(wǎng)站:http://www.iocblog.net/project/quartz.html

    posted @ 2008-11-21 14:38 sunny spring 閱讀(4509) | 評(píng)論 (2)編輯 收藏

    struts1.0問題

    16:14:10.437] {http--8888-7} java.lang.IllegalArgumentException: Resources cannot be null.
    [16:14:10.437] {http--8888-7}  at org.apache.commons.validator.Validator.<init>(Validator.java:188)
    [16:14:10.437] {http--8888-7}  at org.apache.struts.validator.Resources.initValidator(Resources.java:475)
    [16:14:10.437] {http--8888-7}  at org.apache.struts.validator.ValidatorForm.validate(ValidatorForm.java:104)
    [16:14:10.437] {http--8888-7}  at org.apache.struts.action.RequestProcessor.processValidate(RequestProcessor.java:928)
    [16:14:10.437] {http--8888-7}  at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:204)
    [16:14:10.437] {http--8888-7}  at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
    [16:14:10.437] {http--8888-7}  at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    [16:14:10.437] {http--8888-7}  at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    [16:14:10.437] {http--8888-7}  at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    [16:14:10.437] {http--8888-7}  at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:103)
    [16:14:10.437] {http--8888-7}  at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:187)
    [16:14:10.437] {http--8888-7}  at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:266)
    [16:14:10.437] {http--8888-7}  at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:270)
    [16:14:10.437] {http--8888-7}  at com.caucho.server.port.TcpConnection.run(TcpConnection.java:678)
    [16:14:10.437] {http--8888-7}  at com.caucho.util.ThreadPool$Item.runTasks(ThreadPool.java:721)
    [16:14:10.437] {http--8888-7}  at com.caucho.util.ThreadPool$Item.run(ThreadPool.java:643)
    [16:14:10.437] {http--8888-7}  at java.lang.Thread.run(Thread.java:619)
    以上錯(cuò)誤是因?yàn)閟truts-config.xml文件中<form-beans>中form的路徑不正確所致.

    posted @ 2008-11-19 16:28 sunny spring 閱讀(245) | 評(píng)論 (0)編輯 收藏

    CSS 全解

    CSS在英文中有如下幾種常見的縮寫:

    1,Cascading Style Sheets 層疊樣式表

    2,Content Scrambling System DVD電影的加密系統(tǒng)

    3,Cast Semi-Steel 半鑄鋼, 鋼性鑄鐵

    4,College Scholarship Service 大學(xué)獎(jiǎng)學(xué)金處



    其中在網(wǎng)絡(luò)上最常見的是Cascading Style Sheets(層疊樣式表)

    感性體驗(yàn)CSS


    什么是CSS呢?你可能急迫的想知道答案。但是空泛的文字描述意義不大,讓我們先來(lái)一點(diǎn)感性體驗(yàn)吧??纯催@個(gè)沒有添加CSS的HTML文件:http://www.csszengarden.com/zengarden-sample.html
    是一個(gè)普普通通的網(wǎng)頁(yè)。然而通過給這個(gè)文件添加的CSS規(guī)則,我們可以得到十分美觀的網(wǎng)頁(yè):http://www.csszengarden.com/

    這還不是全部,不改動(dòng)HTML,只是通過添加不同的CSS規(guī)則,我們就可以得到各種不同樣式的網(wǎng)頁(yè):
    http://www.csszengarden.com/?cssfile=/208/208.css&page=0
    好了,下面我們?cè)賮?lái)回答什么是CSS這個(gè)問題。

    什么是Cascading Style Sheets(層疊樣式表)

    * CSS是Cascading Style Sheets(層疊樣式表)的簡(jiǎn)稱.
    * CSS語(yǔ)言是一種標(biāo)記語(yǔ)言,它不需要編譯,可以直接由瀏覽器執(zhí)行(屬于瀏覽器解釋型語(yǔ)言).
    * 在標(biāo)準(zhǔn)網(wǎng)頁(yè)設(shè)計(jì)中CSS負(fù)責(zé)網(wǎng)頁(yè)內(nèi)容(XHTML)的表現(xiàn).
    * CSS文件也可以說(shuō)是一個(gè)文本文件,它包含了一些CSS標(biāo)記,CSS文件必須使用css為文件名后綴.
    * 可以通過簡(jiǎn)單的更改CSS文件,改變網(wǎng)頁(yè)的整體表現(xiàn)形式,可以減少我們的工作量,所以她是每一個(gè)網(wǎng)頁(yè)設(shè)計(jì)人員的必修課.
    * CSS是由W3C的CSS工作組產(chǎn)生和維護(hù)的.
    如何將樣式表加入到網(wǎng)頁(yè)
    可以用以下三種方式將樣式表加入您的網(wǎng)頁(yè)。而最接近目標(biāo)的樣式定義優(yōu)先權(quán)越高。高優(yōu)先權(quán)樣式將繼承低優(yōu)先權(quán)樣式的未重疊定義但覆蓋重疊的定義。例外請(qǐng)參閱 !important 聲明。

    鏈入外部樣式表文件 (Linking to a Style Sheet)
    你可以先建立外部樣式表文件(.css),然后使用HTML的link對(duì)象。示例如下:
    <head>
    <title>文檔標(biāo)題</title>
    <link rel=stylesheet type="text/css">
    </head>
    而在XML中,你應(yīng)該如下例所示在聲明區(qū)中加入:
    <? xml-stylesheet type="text/css" ?>

    定義內(nèi)部樣式塊對(duì)象 (Embedding a Style Block)
    你可以在你的HTML文檔的<HTML>和<BODY>標(biāo)記之間插入一個(gè)<STYLE>...</STYLE>塊對(duì)象。 定義方式請(qǐng)參閱樣式表語(yǔ)法。示例如下:
    <html>
    <head>
    <title>文檔標(biāo)題</title>
    <style type="text/css">
    <!--
    body {font: 10pt "Arial"}
    h1 {font: 15pt/17pt "Arial"; font-weight: bold; color: maroon}
    h2 {font: 13pt/15pt "Arial"; font-weight: bold; color: blue}
    p {font: 10pt/12pt "Arial"; color: black}
    -->
    </style>
    </head>
    <body>
    請(qǐng)注意,這里將style對(duì)象的type屬性設(shè)置為"text/css",是允許不支持這類型的瀏覽器忽略樣式表單。

    內(nèi)聯(lián)定義 (Inline Styles)
    內(nèi)聯(lián)定義即是在對(duì)象的標(biāo)記內(nèi)使用對(duì)象的style屬性定義適用其的樣式表屬性。示例如下:
    這一行被增加了左右的外補(bǔ)丁


    Cascading Style Sheets(層疊樣式表)的歷史
    從1990年代初HTML被發(fā)明開始樣式表就以各種形式出現(xiàn)了,不同的瀏覽器結(jié)合了它們各自的樣式語(yǔ)言,讀者可以使用這些樣式語(yǔ)言來(lái)調(diào)節(jié)網(wǎng)頁(yè)的顯示方式。一開始樣式表是給讀者用的,最初的HTML版本只含有很少的顯示屬性,讀者來(lái)決定網(wǎng)頁(yè)應(yīng)該怎樣被顯示。
    但隨著HTML的成長(zhǎng),為了滿足設(shè)計(jì)師的要求,HTML獲得了很多顯示功能。隨著這些功能的增加外來(lái)定義樣式的語(yǔ)言越來(lái)越?jīng)]有意義了。
    1994年哈坤·利提出了CSS的最初建議。伯特·波斯(Bert Bos)當(dāng)時(shí)正在設(shè)計(jì)一個(gè)叫做Argo的瀏覽器,他們決定一起合作設(shè)計(jì)CSS。
    當(dāng)時(shí)已經(jīng)有過一些樣式表語(yǔ)言的建議了,但CSS是第一個(gè)含有“層疊”的主意的。在CSS中,一個(gè)文件的樣式可以從其它的樣式表中繼承下來(lái)。讀者在有些地方可以使用他自己更喜歡的樣式,在其他地方則繼承,或“層疊”作者的樣式。這種層疊的方式使作者和讀者都可以靈活地加入自己的設(shè)計(jì),混合各人的愛好。
    哈坤于1994年在芝加哥的一次會(huì)議上第一次展示了CSS的建議,1995年他與波斯一起再次展示這個(gè)建議。當(dāng)時(shí)W3C剛剛建立,W3C對(duì)CSS的發(fā)展很感興趣,它為此組織了一次討論會(huì)。哈坤、波斯和其他一些人(比如微軟的托馬斯·雷爾登)是這個(gè)項(xiàng)目的主要技術(shù)負(fù)責(zé)人。1996年底,CSS已經(jīng)完成。1996年12月CSS要求的第一版本被出版。
    1997年初,W3C內(nèi)組織了專門管CSS的工作組,其負(fù)責(zé)人是克里斯·里雷。這個(gè)工作組開始討論第一版中沒有涉及到的問題,其結(jié)果是1998年5月出版的第二版要求。到2004年為止,第三版還未出版。

    * 1996年W3C正式推出了CSS1.
    * 1998年W3C正式推出了CSS2.
    * CSS2.1是W3C現(xiàn)在正在推薦使用的.
    * CSS3現(xiàn)在還處于開發(fā)中.

    網(wǎng)頁(yè)設(shè)計(jì)中常用的CSS屬性

    文字或元素的顏色 color
    背景顏色 background-color
    背景圖像 background-image
    字體 font-family
    文字大小 font-size
    列表樣式 list
    鼠標(biāo)樣式 cursor
    邊框樣式 border
    內(nèi)補(bǔ)白 padding
    外邊距 margin
    等...


    CSS的語(yǔ)法:
      CSS的定義是由三個(gè)部分構(gòu)成:
      選擇符(selector),屬性(properties)和屬性的取值(value)。
      語(yǔ)法: selector {property: value} (選擇符 {屬性:值})
      說(shuō)明:
      ·選擇符是可以是多種形式,一般是你要定義樣式的HTML標(biāo)記,例如BODY、P、TABLE……,你可以通過此方法定義它的屬性和值,屬性和值要用冒號(hào)隔開:
      例子:body {color: black},此例的效果是使頁(yè)面中的文字為黑色。
      ·如果屬性的值是多個(gè)單詞組成,必須在值上加引號(hào),比如字體的名稱經(jīng)常是幾個(gè)單詞的組合:
      例子:p {font-family: "sans serif"} (定義段落字體為sans serif)
      · 如果需要對(duì)一個(gè)選擇符指定多個(gè)屬性時(shí),我們使用分號(hào)將所有的屬性和值分開:
      例子:p {text-align: center; color: red} (段落居中排列;并且段落中的文字為紅色)
      2. 選擇符組
      你可以把相同屬性和值的選擇符組合起來(lái)書寫,用逗號(hào)將選擇符分開,這樣可以減少樣式重復(fù)定義:
      h1, h2, h3, h4, h5, h6 { color: green } (這個(gè)組里包括所有的標(biāo)題元素,每個(gè)標(biāo)題元素的文字都為綠色)
      p, table{ font-size: 9pt } (段落和表格里的文字尺寸為9號(hào)字)
      效果完全等效于:
      p { font-size: 9pt }
      table { font-size: 9pt }
      3. 類選擇符
      用類選擇符你能夠把相同的元素分類定義不同的樣式,定義類選擇符時(shí),在自定類的名稱前面加一個(gè)點(diǎn)號(hào)。假如你想要兩個(gè)不同的段落,一個(gè)段落向右對(duì)齊,一個(gè)段落居中,你可以先定義兩個(gè)類:
      p.right {text-align: right}
      p.center {text-align: center}
      然后用不在不同的段落里,只要在HTML標(biāo)記里加入你定義的class參數(shù):
      這個(gè)段落向右對(duì)齊的
      這個(gè)段落是居中排列的
      類選擇符還有一種用法,在選擇符中省略HTML標(biāo)記名,這樣可以把幾個(gè)不同的元素定義成相同的樣式:
      .center {text-align: center} (定義.center的類選擇符為文字居中排列)
      這樣的類可以被應(yīng)用到任何元素上。下面我們使h1元素(標(biāo)題1)和p元素(段落)都?xì)w為“center”類,這使兩個(gè)元素的樣式都跟隨“.center”這個(gè)類選擇符:
      <h1 class="center">這個(gè)標(biāo)題是居中排列的</h1>
      這個(gè)段落也是居中排列的

      注意:這種省略HTML標(biāo)記的類選擇符是我們經(jīng)后最常用的CSS方法,使用這種方法,我們可以很方便的在任意元素上套用預(yù)先定義好的類樣式。
      4. ID選擇符
      在HTML頁(yè)面中ID參數(shù)指定了某個(gè)單一元素,ID選擇符是用來(lái)對(duì)這個(gè)單一元素定義單獨(dú)的樣式。
      ID選擇符的應(yīng)用和類選擇符類似,只要把CLASS換成ID即可。將上例中類用ID替代:
      這個(gè)段落向右對(duì)齊
      定義ID選擇符要在ID名稱前加上一個(gè)“#”號(hào)。和類選擇符相同,定義ID選擇符的屬性也有兩種方法。下面這個(gè)例子,ID屬性將匹配所有id="intro"的元素:
      #intro
      {
      font-size:110%;
      font-weight:bold;
      color:#0000ff;
      background-color:transparent
      } (字體尺寸為默認(rèn)尺寸的110%;粗體;藍(lán)色;背景顏色透明)
      下面這個(gè)例子,ID屬性只匹配id="intro"的段落元素:
      p#intro
      {
      font-size:110%;
      font-weight:bold;
      color:#0000ff;
      background-color:transparent
      }
      注意:ID選擇符局限性很大,只能單獨(dú)定義某個(gè)元素的樣式,一般只在特殊情況下使用。
      5. 包含選擇符
      可以單獨(dú)對(duì)某種元素包含關(guān)系定義的樣式表,元素1里包含元素2,這種方式只對(duì)在元素1里的元素2定義,對(duì)單獨(dú)的元素1或元素2無(wú)定義,例如:
      table a
      {
      font-size: 12px
      }
      在表格內(nèi)的鏈接改變了樣式,文字大小為12象素,而表格外的鏈接的文字仍為默認(rèn)大小。
      6. 樣式表的層疊性
      層疊性就是繼承性,樣式表的繼承規(guī)則是外部的元素樣式會(huì)保留下來(lái)繼承給這個(gè)元素所包含的其他元素。事實(shí)上,所有在元素中嵌套的元素都會(huì)繼承外層元素指定的屬性值,有時(shí)會(huì)把很多層嵌套的樣式疊加在一起,除非另外更改。例如在DIV標(biāo)記中嵌套P標(biāo)記:
      div { color: red; font-size:9pt}
      ……
      這個(gè)段落的文字為紅色9號(hào)字
      (P元素里的內(nèi)容會(huì)繼承DIV定義的屬性)
      注意:有些情況下內(nèi)部選擇符不繼承周圍選擇符的值,但理論上這些都是特殊的。例如,上邊界屬性值是不會(huì)繼承的,直覺上,一個(gè)段落不會(huì)同文檔BODY一樣的上邊界值。
      另外,當(dāng)樣式表繼承遇到?jīng)_突時(shí),總是以最后定義的樣式為準(zhǔn)。如果上例中定義了P的顏色:
      div { color: red; font-size:9pt}
      p {color: blue}
      ……
      這個(gè)段落的文字為藍(lán)色9號(hào)字
      我們可以看到段落里的文字大小為9號(hào)字是繼承div屬性的,而color屬性則依照最后定義的。
      不同的選擇符定義相同的元素時(shí),要考慮到不同的選擇符之間的優(yōu)先級(jí)。ID選擇符,類選擇符和HTML標(biāo)記選擇符,因?yàn)镮D選擇符是最后加上元素上的,所以優(yōu)先級(jí)最高,其次是類選擇符。如果想超越這三者之間的關(guān)系,可以用!important提升樣式表的優(yōu)先權(quán),例如:
      p { color: #FF0000!important }
      .blue { color: #0000FF}
      #id1 { color: #FFFF00}
      我們同時(shí)對(duì)頁(yè)面中的一個(gè)段落加上這三種樣式,它最后會(huì)依照被!important申明的HTML標(biāo)記選擇符樣式為紅色文字。如果去掉!important,則依照優(yōu)先權(quán)最高的ID選擇符為黃色文字。
      
    7. 注釋:/* ... */
      你可以在CSS中插入注釋來(lái)說(shuō)明你代碼的意思,注釋有利于你或別人以后編輯和更改代碼時(shí)理解代碼的含義。在瀏覽器中,注釋是不顯示的。CSS注釋以"/*" 開頭,以"*/" 結(jié)尾,如下:
      /* 定義段落樣式表 */
      p
      {
      text-align: center; /* 文本居中排列 */
      color: black; /* 文字為黑色 */
      font-family: arial /* 字體為arial */
      }



    css可以用任何寫文本的工具進(jìn)行開發(fā),如文本工具,dreamweaver開發(fā)
    css也是一種語(yǔ)言,這種語(yǔ)言要和html或者xhtml語(yǔ)言相結(jié)合才起作用,
    css簡(jiǎn)單來(lái)說(shuō)就是用來(lái)美化網(wǎng)頁(yè)用的,用css語(yǔ)言來(lái)控制網(wǎng)頁(yè)的外觀
    舉個(gè)例子
    xhtml部分:
    <ul>
    <li>主頁(yè)</li>
    <li>留言</li>
    <li>論壇</li>
    </ul>
    此時(shí)在頁(yè)面上的表達(dá)形式是一個(gè)豎向列表,這樣不夠美觀,
    可以css來(lái)改善這個(gè)列表為一個(gè)橫向?qū)Ш綏l和超鏈接
    css部分:
    ul{list-style:none;margin:0px;padding:0px}
    ul li{margin:0px;padding:0px;float:left;}
    ul li a{display:block;width:100px;height:30px;background:#efefef;color:#333;text-decoration:none;text-align:center}
    ul li a:hover{background:#333;color:#fff;}
    添加上css后,這個(gè)列表變成橫向的導(dǎo)航條了,超級(jí)鏈接是淡色背景,灰色字體,沒有下劃線,高度是30像素,寬度是100像素
    當(dāng)我們鼠標(biāo)經(jīng)過這個(gè)超級(jí)鏈接時(shí)候,變成灰色背景,白色字體


    在主頁(yè)制作時(shí)采用CSS技術(shù),可以有效地對(duì)頁(yè)面的布局、字體、顏色、背景和其它效果實(shí)現(xiàn)更加精確的控制。

    只要對(duì)相應(yīng)的代碼做一些簡(jiǎn)單的修改,就可以改變同一頁(yè)面的不同部分,或者頁(yè)數(shù)不同的網(wǎng)頁(yè)的外觀和格式。

    它的作用可以達(dá)到:

    (1)在幾乎所有的瀏覽器上都可以使用。

    (2)以前一些非得通過圖片轉(zhuǎn)換實(shí)現(xiàn)的功能,現(xiàn)在只要用CSS就可以輕松實(shí)現(xiàn),從而更快地下載頁(yè)面。

    (3)使頁(yè)面的字體變得更漂亮,更容易編排,使頁(yè)面真正賞心悅目。

    (4)你可以輕松地控制頁(yè)面的布局 。

    (5)你可以將許多網(wǎng)頁(yè)的風(fēng)格格式同時(shí)更新,不用再一頁(yè)一頁(yè)地更新了。你可以將站點(diǎn)上所有的網(wǎng)頁(yè)風(fēng)格都使用一個(gè)CSS文件進(jìn)行控制,只要修改這個(gè)CSS文件中相應(yīng)的行,那么整個(gè)站點(diǎn)的所有頁(yè)面都會(huì)隨之發(fā)生變動(dòng)。

    想一想,沒有使用CSS前我們是如何控制字體的顏色和大小以及所使用的字體的?我們一般使用HTML標(biāo)簽來(lái)實(shí)現(xiàn),代碼非常煩瑣。

    很難想象,如果在一個(gè)頁(yè)面里需要頻繁地更替字體的顏色大小,最終生成的HTML代碼的長(zhǎng)度一定臃腫不堪。

    說(shuō)實(shí)話,CSS就是為了簡(jiǎn)化這樣的工作誕生的,當(dāng)然其功能決非這么簡(jiǎn)單。

    CSS是通過對(duì)頁(yè)面結(jié)構(gòu)的風(fēng)格控制的思想,控制整個(gè)頁(yè)面的風(fēng)格的。

    式樣單放在頁(yè)面中,通過瀏覽器的解釋執(zhí)行,是完全的文本,任何懂得HTML的人都可以掌握,非常的容易。甚至對(duì)一些非常老的瀏覽器,也不會(huì)產(chǎn)生頁(yè)面混亂的現(xiàn)象。

    CSS的一大優(yōu)點(diǎn)是它的圖片傳輸速度比較完全的HTML網(wǎng)頁(yè)要快一點(diǎn)。

    CSS:
    Chinese,Surface-to-Surface
    中國(guó)面對(duì)面導(dǎo)彈 簡(jiǎn)稱CSS-N
    CSS具有兩面性。就像它在格式化文本、導(dǎo)航欄、圖片以及其他小小的網(wǎng)頁(yè)方面很棒一樣,當(dāng)你準(zhǔn)備好布局完整的網(wǎng)頁(yè)時(shí),它真正可怕的一面也展現(xiàn)出來(lái)了。
    CSS布局有兩種風(fēng)格——絕對(duì)定位和浮動(dòng)。絕對(duì)定位讓你把一個(gè)元素以像素級(jí)的精確性定位在網(wǎng)頁(yè)的任何位置——或者理論上是這樣。這種整體控制令人興奮,就如你將在下一章中所看到的,但是實(shí)際上很難實(shí)現(xiàn)。這就是大量網(wǎng)頁(yè)使用基于浮動(dòng)的布局的原因,也是本章的主題。
    CSS布局如何進(jìn)行
    How CSS Layout Works
    如在第1章中討論過的,HTML的局限性迫使設(shè)計(jì)師們?nèi)ラ_發(fā)更聰明的方式來(lái)使他們的網(wǎng)頁(yè)更美觀。過去最常用的工具是[table]標(biāo)簽,它本是用來(lái)創(chuàng)建電子數(shù)據(jù)表——比如由數(shù)據(jù)行和列組成的信息顯示表。但是設(shè)計(jì)師們卻用HTML的表格來(lái)創(chuàng)建一種用來(lái)組織網(wǎng)頁(yè)內(nèi)容的腳手架(見圖11-1)??墒怯捎赱table]標(biāo)簽本來(lái)不是要用于布局的,因此設(shè)計(jì)師們不得不經(jīng)常以各種不尋常的方式來(lái)使用這個(gè)標(biāo)簽——比如把一個(gè)表格放在另一個(gè)表格的單元里面——僅僅為了得到他們想要的效果。這種方法的工作量很大,增加了大量額外的HTML代碼,并使得后面要修改設(shè)計(jì)很難。但是在CSS出現(xiàn)之前,那就是網(wǎng)頁(yè)設(shè)計(jì)師們所擁有的一切辦法。
    如果你已經(jīng)習(xí)慣于使用[table]標(biāo)簽,那么當(dāng)你開始使用CSS進(jìn)行布局時(shí),必須發(fā)展一種新的思維。首先,忘掉行和列(運(yùn)用表格時(shí)的一種重要的觀念)。沒有
    列跨度、行跨度和格子狀的表格結(jié)構(gòu)在CSS中是找不到的。然而,你可以把一個(gè)標(biāo)簽當(dāng)成一個(gè)表格單元。有了表格單元,標(biāo)簽就是把你要的內(nèi)容定位在網(wǎng)頁(yè)區(qū)域的一個(gè)邏輯位置。此外,如你所見,CSS設(shè)計(jì)經(jīng)常把一個(gè)div嵌套在另一個(gè)div里面,就像你把表格嵌套在表格里面來(lái)獲得特定的效果一樣——但是,幸運(yùn)的是,CSS方法只用少得多的HTML代碼。
    強(qiáng)大的標(biāo)簽
    The Mighty   Tag
    無(wú)論使用表格還是CSS,網(wǎng)頁(yè)布局都是把大塊的內(nèi)容放進(jìn)網(wǎng)頁(yè)的不同區(qū)域里面。有了CSS,最常用來(lái)組織內(nèi)容的元素就是標(biāo)簽。如第18頁(yè)所述,標(biāo)簽是沒有固有格式化屬性的一個(gè)HTML元素(除了瀏覽器把這個(gè)標(biāo)簽當(dāng)成前后有換行的塊之外);反之,它被用來(lái)標(biāo)識(shí)元素的一個(gè)邏輯組合或者網(wǎng)頁(yè)中的一個(gè)分區(qū)。
    你將代表性地把一大塊屬于一起的HTML包圍在一個(gè)里面。圖11-1中包含logo和導(dǎo)航欄的元素占據(jù)了網(wǎng)頁(yè)頂部,因此用一個(gè)標(biāo)簽把它們包圍起來(lái)很有意義。至少,你要給網(wǎng)頁(yè)的所有主要區(qū)域包含標(biāo)簽,例如橫幅、主要內(nèi)容區(qū)域、工具條、頁(yè)腳,等等。但是它也可能把一個(gè)或者更多的div包在一個(gè)里面。一種最常用的方法就是把<body>標(biāo)簽里面的HTML包在一個(gè)里面。然后可以通過把CSS應(yīng)用到包裝,設(shè)置基礎(chǔ)的頁(yè)面屬性。你可以給網(wǎng)頁(yè)內(nèi)容設(shè)定一個(gè)整體的寬度,設(shè)置左邊距和右邊距,或者把所有網(wǎng)頁(yè)內(nèi)容在屏幕的中間居中。(在第313頁(yè)的教程中,你有機(jī)會(huì)用到一個(gè)包裝。)
    一旦已經(jīng)把標(biāo)簽放在了適當(dāng)?shù)奈恢蒙希俳o每個(gè)標(biāo)簽添加一個(gè)類或者ID,變成你分別對(duì)每個(gè)定義樣式的句柄。對(duì)于只出現(xiàn)一次和形成網(wǎng)頁(yè)的基本構(gòu)建塊的網(wǎng)頁(yè)部位,設(shè)計(jì)師們通常使用一個(gè)ID。一個(gè)網(wǎng)頁(yè)橫幅區(qū)域的標(biāo)
    簽看起來(lái)可能像這樣:。你可以對(duì)一個(gè)ID每頁(yè)只使用一次,因此當(dāng)有一個(gè)多次顯示的元素時(shí),就用一個(gè)類代替。如果你有幾個(gè)定位照片和照片說(shuō)明的div時(shí),可以創(chuàng)建一個(gè)樣式像這樣:。
    有了類似這些的樣式,就可以定位各種各樣的網(wǎng)頁(yè)元素了。利用CSS的float屬性,你可以定位不同的內(nèi)容塊給一張網(wǎng)頁(yè)的左邊或者右邊(或者一個(gè)包含塊比如另一個(gè)的左邊或者右邊)。
    至理名言
    更多并非更好
    雖然div對(duì)于CSS布局很重要,但也別對(duì)你的網(wǎng)頁(yè)濫用div。一個(gè)常見的陷阱是相信你必須把一張網(wǎng)頁(yè)中的一切都包圍在一個(gè)標(biāo)簽里面。假設(shè)你的主導(dǎo)航欄是一個(gè)鏈接的無(wú)序列表
    (就像第218頁(yè)中所述)。由于它是一個(gè)重要的元素,你可能會(huì)試探用一個(gè)來(lái)把它圍起來(lái):<ul>...</ul>
    。但是當(dāng)<ul>標(biāo)簽唾手可得時(shí),就沒有必要去添加一個(gè)了。只要<ul>包含主要的導(dǎo)航欄鏈接,就只需添加ID樣式給這個(gè)標(biāo)簽:<ul id= "mainNav">。多余的只是一些沒有必要的代碼。

    posted @ 2008-06-30 11:22 sunny spring 閱讀(351) | 評(píng)論 (0)編輯 收藏

    jspSmartUpload上傳下載全攻略

    一、安裝篇

      jspSmartUpload是由www.jspsmart.com網(wǎng)站開發(fā)的一個(gè)可免費(fèi)使用的全功能的文件上傳下載組件,適于嵌入執(zhí)行上傳下載操作的JSP文件中。該組件有以下幾個(gè)特點(diǎn):

    1、使用簡(jiǎn)單。在JSP文件中僅僅書寫三五行JAVA代碼就可以搞定文件的上傳或下載,方便。

    2、能全程控制上傳。利用jspSmartUpload組件提供的對(duì)象及其操作方法,可以獲得全部上傳文件的信息(包括文件名,大小,類型,擴(kuò)展名,文件數(shù)據(jù)等),方便存取。

    3、能對(duì)上傳的文件在大小、類型等方面做出限制。如此可以濾掉不符合要求的文件。

    4、下載靈活。僅寫兩行代碼,就能把Web服務(wù)器變成文件服務(wù)器。不管文件在Web服務(wù)器的目錄下或在其它任何目錄下,都可以利用jspSmartUpload進(jìn)行下載。

    5、能將文件上傳到數(shù)據(jù)庫(kù)中,也能將數(shù)據(jù)庫(kù)中的數(shù)據(jù)下載下來(lái)。這種功能針對(duì)的是MYSQL數(shù)據(jù)庫(kù),因?yàn)椴痪哂型ㄓ眯?,所以本文不?zhǔn)備舉例介紹這種用法。

      jspSmartUpload組件可以從http://www.edufans.com/html/JSP/JSP_down/2006/200610054829.html網(wǎng)站上自由下載,壓縮包的名字是jspSmartUpload.zip。下載后,用WinZip或WinRAR將其解壓到Tomcat的webapps目錄下(本文以Tomcat服務(wù)器為例進(jìn)行介紹)。解壓后,將webapps/jspsmartupload目錄下的子目錄Web-inf名字改為全大寫的WEB-INF,這樣一改jspSmartUpload類才能使用。因?yàn)門omcat對(duì)文件名大小寫敏感,它要求Web應(yīng)用程序相關(guān)的類所在目錄為WEB-INF,且必須是大寫。接著重新啟動(dòng)Tomcat,這樣就可以在JSP文件中使用jspSmartUpload組件了。

      注意,按上述方法安裝后,只有webapps/jspsmartupload目錄下的程序可以使用jspSmartUpload組件,如果想讓Tomcat服務(wù)器的所有Web應(yīng)用程序都能用它,必須做如下工作:

    1.進(jìn)入命令行狀態(tài),將目錄切換到Tomcat的webapps/jspsmartupload/WEB-INF目錄下。

    2.運(yùn)行JAR打包命令:jar cvf jspSmartUpload.jar com

    (也可以打開資源管理器,切換到當(dāng)前目錄,用WinZip將com目錄下的所有文件壓縮成jspSmartUpload.zip,然后將jspSmartUpload.zip換名為jspSmartUpload.jar文件即可。)

    3.將jspSmartUpload.jar拷貝到Tomcat的shared/lib目錄下。

    二、相關(guān)類說(shuō)明篇

    File類

      這個(gè)類包裝了一個(gè)上傳文件的所有信息。通過它,可以得到上傳文件的文件名、文件大小、擴(kuò)展名、文件數(shù)據(jù)等信息。

      File類主要提供以下方法:

    1、saveAs作用:將文件換名另存。

    原型:

    public void saveAs(java.lang.String destFilePathName)



    public void saveAs(java.lang.String destFilePathName, int optionSaveAs)

    其中,destFilePathName是另存的文件名,optionSaveAs是另存的選項(xiàng),該選項(xiàng)有三個(gè)值,分別是SAVEAS_PHYSICAL,SAVEAS_VIRTUAL,SAVEAS_AUTO。SAVEAS_PHYSICAL表明以操作系統(tǒng)的根目錄為文件根目錄另存文件,SAVEAS_VIRTUAL表明以Web應(yīng)用程序的根目錄為文件根目錄另存文件,SAVEAS_AUTO則表示讓組件決定,當(dāng)Web應(yīng)用程序的根目錄存在另存文件的目錄時(shí),它會(huì)選擇SAVEAS_VIRTUAL,否則會(huì)選擇SAVEAS_PHYSICAL。

    例如,saveAs("/upload/sample.zip",SAVEAS_PHYSICAL)執(zhí)行后若Web服務(wù)器安裝在C盤,則另存的文件名實(shí)際是c:uploadsample.zip。而saveAs("/upload/sample.zip",SAVEAS_VIRTUAL)執(zhí)行后若Web應(yīng)用程序的根目錄是webapps/jspsmartupload,則另存的文件名實(shí)際是webapps/jspsmartupload/upload/sample.zip。saveAs("/upload/sample.zip",SAVEAS_AUTO)執(zhí)行時(shí)若Web應(yīng)用程序根目錄下存在upload目錄,則其效果同saveAs("/upload/sample.zip",SAVEAS_VIRTUAL),否則同saveAs("/upload/sample.zip",SAVEAS_PHYSICAL)。

    建議:對(duì)于Web程序的開發(fā)來(lái)說(shuō),最好使用SAVEAS_VIRTUAL,以便移植。

    2、isMissing

    作用:這個(gè)方法用于判斷用戶是否選擇了文件,也即對(duì)應(yīng)的表單項(xiàng)是否有值。選擇了文件時(shí),它返回false。未選文件時(shí),它返回true。

    原型:public boolean isMissing()

    3、getFieldName

    作用:取HTML表單中對(duì)應(yīng)于此上傳文件的表單項(xiàng)的名字。

    原型:public String getFieldName()

    4、getFileName

    作用:取文件名(不含目錄信息)

    原型:public String getFileName()

    5、getFilePathName

    作用:取文件全名(帶目錄)

    原型:public String getFilePathName

    6、getFileExt

    作用:取文件擴(kuò)展名(后綴)

    原型:public String getFileExt()

    7、getSize

    作用:取文件長(zhǎng)度(以字節(jié)計(jì))

    原型:public int getSize()

    8、getBinaryData

    作用:取文件數(shù)據(jù)中指定位移處的一個(gè)字節(jié),用于檢測(cè)文件等處理。

    原型:public byte getBinaryData(int index)。其中,index表示位移,其值在0到getSize()-1之間。

    Files類

      這個(gè)類表示所有上傳文件的集合,通過它可以得到上傳文件的數(shù)目、大小等信息。有以下方法:

    1、getCount

    作用:取得上傳文件的數(shù)目。

    原型:public int getCount()

    2、getFile

    作用:取得指定位移處的文件對(duì)象File(這是com.jspsmart.upload.File,不是java.io.File,注意區(qū)分)。

    原型:public File getFile(int index)。其中,index為指定位移,其值在0到getCount()-1之間。

    3、getSize

    作用:取得上傳文件的總長(zhǎng)度,可用于限制一次性上傳的數(shù)據(jù)量大小。

    原型:public long getSize()

    4、getCollection

    作用:將所有上傳文件對(duì)象以Collection的形式返回,以便其它應(yīng)用程序引用,瀏覽上傳文件信息。

    原型:public Collection getCollection()

    5、getEnumeration

    作用:將所有上傳文件對(duì)象以Enumeration(枚舉)的形式返回,以便其它應(yīng)用程序?yàn)g覽上傳文件信息。

    原型:public Enumeration getEnumeration()

    Request類

      這個(gè)類的功能等同于JSP內(nèi)置的對(duì)象request。只所以提供這個(gè)類,是因?yàn)閷?duì)于文件上傳表單,通過request對(duì)象無(wú)法獲得表單項(xiàng)的值,必須通過jspSmartUpload組件提供的Request對(duì)象來(lái)獲取。該類提供如下方法:

    1、getParameter

    作用:獲取指定參數(shù)之值。當(dāng)參數(shù)不存在時(shí),返回值為null。

    原型:public String getParameter(String name)。其中,name為參數(shù)的名字。

    2、getParameterValues

    作用:當(dāng)一個(gè)參數(shù)可以有多個(gè)值時(shí),用此方法來(lái)取其值。它返回的是一個(gè)字符串?dāng)?shù)組。當(dāng)參數(shù)不存在時(shí),返回值為null。

    原型:public String[] getParameterValues(String name)。其中,name為參數(shù)的名字。

    3、getParameterNames

    作用:取得Request對(duì)象中所有參數(shù)的名字,用于遍歷所有參數(shù)。它返回的是一個(gè)枚舉型的對(duì)象。

    原型:public Enumeration getParameterNames()
    ㈣ SmartUpload類這個(gè)類完成上傳下載工作。

    A.上傳與下載共用的方法:

    只有一個(gè):initialize。

    作用:執(zhí)行上傳下載的初始化工作,必須第一個(gè)執(zhí)行。

    原型:有多個(gè),主要使用下面這個(gè):

    public final void initialize(javax.servlet.jsp.PageContext pageContext)

    其中,pageContext為JSP頁(yè)面內(nèi)置對(duì)象(頁(yè)面上下文)。

    B.上傳文件使用的方法:

    1、upload

    作用:上傳文件數(shù)據(jù)。對(duì)于上傳操作,第一步執(zhí)行initialize方法,第二步就要執(zhí)行這個(gè)方法。

    原型:public void upload()

    2、save

    作用:將全部上傳文件保存到指定目錄下,并返回保存的文件個(gè)數(shù)。

    原型:public int save(String destPathName)

    和public int save(String destPathName,int option)

    其中,destPathName為文件保存目錄,option為保存選項(xiàng),它有三個(gè)值,分別是SAVE_PHYSICAL,SAVE_VIRTUAL和SAVE_AUTO。(同F(xiàn)ile類的saveAs方法的選項(xiàng)之值類似)SAVE_PHYSICAL指示組件將文件保存到以操作系統(tǒng)根目錄為文件根目錄的目錄下,SAVE_VIRTUAL指示組件將文件保存到以Web應(yīng)用程序根目錄為文件根目錄的目錄下,而SAVE_AUTO則表示由組件自動(dòng)選擇。

    注:save(destPathName)作用等同于save(destPathName,SAVE_AUTO)。

    3、getSize

    作用:取上傳文件數(shù)據(jù)的總長(zhǎng)度

    原型:public int getSize()

    4、getFiles

    作用:取全部上傳文件,以Files對(duì)象形式返回,可以利用Files類的操作方法來(lái)獲得上傳文件的數(shù)目等信息。

    原型:public Files getFiles()

    5、getRequest

    作用:取得Request對(duì)象,以便由此對(duì)象獲得上傳表單參數(shù)之值。

    原型:public Request getRequest()

    6、setAllowedFilesList

    作用:設(shè)定允許上傳帶有指定擴(kuò)展名的文件,當(dāng)上傳過程中有文件名不允許時(shí),組件將拋出異常。

    原型:public void setAllowedFilesList(String allowedFilesList)

    其中,allowedFilesList為允許上傳的文件擴(kuò)展名列表,各個(gè)擴(kuò)展名之間以逗號(hào)分隔。如果想允許上傳那些沒有擴(kuò)展名的文件,可以用兩個(gè)逗號(hào)表示。例如:setAllowedFilesList("doc,txt,,")將允許上傳帶doc和txt擴(kuò)展名的文件以及沒有擴(kuò)展名的文件。

    7、setDeniedFilesList

    作用:用于限制上傳那些帶有指定擴(kuò)展名的文件。若有文件擴(kuò)展名被限制,則上傳時(shí)組件將拋出異常。

    原型:public void setDeniedFilesList(String deniedFilesList)

    其中,deniedFilesList為禁止上傳的文件擴(kuò)展名列表,各個(gè)擴(kuò)展名之間以逗號(hào)分隔。如果想禁止上傳那些沒有擴(kuò)展名的文件,可以用兩個(gè)逗號(hào)來(lái)表示。例如:setDeniedFilesList("exe,bat,,")將禁止上傳帶exe和bat擴(kuò)展名的文件以及沒有擴(kuò)展名的文件。

    8、setMaxFileSize

    作用:設(shè)定每個(gè)文件允許上傳的最大長(zhǎng)度。

    原型:public void setMaxFileSize(long maxFileSize)

    其中,maxFileSize為為每個(gè)文件允許上傳的最大長(zhǎng)度,當(dāng)文件超出此長(zhǎng)度時(shí),將不被上傳。

    9、setTotalMaxFileSize

    作用:設(shè)定允許上傳的文件的總長(zhǎng)度,用于限制一次性上傳的數(shù)據(jù)量大小。

    原型:public void setTotalMaxFileSize(long totalMaxFileSize)

    其中,totalMaxFileSize為允許上傳的文件的總長(zhǎng)度。

    C.下載文件常用的方法

    1、setContentDisposition

    作用:將數(shù)據(jù)追加到MIME文件頭的CONTENT-DISPOSITION域。jspSmartUpload組件會(huì)在返回下載的信息時(shí)自動(dòng)填寫MIME文件頭的CONTENT-DISPOSITION域,如果用戶需要添加額外信息,請(qǐng)用此方法。

    原型:public void setContentDisposition(String contentDisposition)

    其中,contentDisposition為要添加的數(shù)據(jù)。如果contentDisposition為null,則組件將自動(dòng)添加"attachment;",以表明將下載的文件作為附件,結(jié)果是IE瀏覽器將會(huì)提示另存文件,而不是自動(dòng)打開這個(gè)文件(IE瀏覽器一般根據(jù)下載的文件擴(kuò)展名決定執(zhí)行什么操作,擴(kuò)展名為doc的將用word程序打開,擴(kuò)展名為pdf的將用acrobat程序打開,等等)。

    2、downloadFile

    作用:下載文件。

    原型:共有以下三個(gè)原型可用,第一個(gè)最常用,后兩個(gè)用于特殊情況下的文件下載(如更改內(nèi)容類型,更改另存的文件名)。

    ① public void downloadFile(String sourceFilePathName)

    其中,sourceFilePathName為要下載的文件名(帶目錄的文件全名)

    ② public void downloadFile(String sourceFilePathName,String contentType)

    其中,sourceFilePathName為要下載的文件名(帶目錄的文件全名),contentType為內(nèi)容類型(MIME格式的文件類型信息,可被瀏覽器識(shí)別)。

    ③ public void downloadFile(String sourceFilePathName,String contentType,String destFileName)

    其中,sourceFilePathName為要下載的文件名(帶目錄的文件全名),contentType為內(nèi)容類型(MIME格式的文件類型信息,可被瀏覽器識(shí)別),destFileName為下載后默認(rèn)的另存文件名。

    三、文件上傳篇

    ㈠ 表單要求

    對(duì)于上傳文件的FORM表單,有兩個(gè)要求:

    1、METHOD應(yīng)用POST,即METHOD="POST"。

    2、增加屬性:ENCTYPE="multipart/form-data"

    下面是一個(gè)用于上傳文件的FORM表單的例子:

    <FORM METHOD="POST" ENCTYPE="multipart/form-data"
                ACTION="/jspSmartUpload/upload.jsp">
                <INPUT TYPE="FILE" NAME="MYFILE">
                <INPUT TYPE="SUBMIT">
                </FORM>


    ㈡ 上傳的例子

    1、上傳頁(yè)面upload.html

    本頁(yè)面提供表單,讓用戶選擇要上傳的文件,點(diǎn)擊"上傳"按鈕執(zhí)行上傳操作。

    頁(yè)面源碼如下:

    <!--
                文件名:upload.html
                作  者:縱橫軟件制作中心雨亦奇(zhsoft88@sohu.com)
                -->
                <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
                <html>
                <head>
                <title>文件上傳</title>
                <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
                </head>
                <body>
                <p>&nbsp;</p>
                <p align="center">上傳文件選擇</p>
                <FORM METHOD="POST" ACTION="jsp/do_upload.jsp"
                ENCTYPE="multipart/form-data">
                <input type="hidden" name="TEST" value="good">
                <table width="75%" border="1" align="center">
                <tr>
                <td><div align="center">1、
                <input type="FILE" name="FILE1" size="30">
                </div></td>
                </tr>
                <tr>
                <td><div align="center">2、
                <input type="FILE" name="FILE2" size="30">
                </div></td>
                </tr>
                <tr>
                <td><div align="center">3、
                <input type="FILE" name="FILE3" size="30">
                </div></td>
                </tr>
                <tr>
                <td><div align="center">4、
                <input type="FILE" name="FILE4" size="30">
                </div></td>
                </tr>
                <tr>
                <td><div align="center">
                <input type="submit" name="Submit" value="上傳它!">
                </div></td>
                </tr>
                </table>
                </FORM>
                </body>
                </html>


    2、上傳處理頁(yè)面do_upload.jsp

    本頁(yè)面執(zhí)行文件上傳操作。頁(yè)面源碼中詳細(xì)介紹了上傳方法的用法,在此不贅述了。

    頁(yè)面源碼如下:

    <%--
                文件名:do_upload.jsp
                作  者:縱橫軟件制作中心雨亦奇(zhsoft88@sohu.com)
                --%>
                <%@ page contentType="text/html; charset=gb2312" language="java"
                import="java.util.*,com.jspsmart.upload.*" errorPage="" %>
                <html>
                <head>
                <title>文件上傳處理頁(yè)面</title>
                <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
                </head>
                <body>
                <%
                // 新建一個(gè)SmartUpload對(duì)象
                SmartUpload su = new SmartUpload();
                // 上傳初始化
                su.initialize(pageContext);
                // 設(shè)定上傳限制
                // 1.限制每個(gè)上傳文件的最大長(zhǎng)度。
                // su.setMaxFileSize(10000);
                // 2.限制總上傳數(shù)據(jù)的長(zhǎng)度。
                // su.setTotalMaxFileSize(20000);
                // 3.設(shè)定允許上傳的文件(通過擴(kuò)展名限制),僅允許doc,txt文件。
                // su.setAllowedFilesList("doc,txt");
                // 4.設(shè)定禁止上傳的文件(通過擴(kuò)展名限制),禁止上傳帶有exe,bat,
                jsp,htm,html擴(kuò)展名的文件和沒有擴(kuò)展名的文件。
                // su.setDeniedFilesList("exe,bat,jsp,htm,html,,");
                // 上傳文件
                su.upload();
                // 將上傳文件全部保存到指定目錄
                int count = su.save("/upload");
                out.println(count+"個(gè)文件上傳成功!<br>");
                // 利用Request對(duì)象獲取參數(shù)之值
                out.println("TEST="+su.getRequest().getParameter("TEST")
                +"<BR><BR>");
                // 逐一提取上傳文件信息,同時(shí)可保存文件。
                for (int i=0;i<su.getFiles().getCount();i++)
                {
                com.jspsmart.upload.File file = su.getFiles().getFile(i);
                // 若文件不存在則繼續(xù)
                if (file.isMissing()) continue;
                // 顯示當(dāng)前文件信息
                out.println("<TABLE BORDER=1>");
                out.println("<TR><TD>表單項(xiàng)名(FieldName)</TD><TD>"
                + file.getFieldName() + "</TD></TR>");
                out.println("<TR><TD>文件長(zhǎng)度(Size)</TD><TD>" +
                file.getSize() + "</TD></TR>");
                out.println("<TR><TD>文件名(FileName)</TD><TD>"
                + file.getFileName() + "</TD></TR>");
                out.println("<TR><TD>文件擴(kuò)展名(FileExt)</TD><TD>"
                + file.getFileExt() + "</TD></TR>");
                out.println("<TR><TD>文件全名(FilePathName)</TD><TD>"
                + file.getFilePathName() + "</TD></TR>");
                out.println("</TABLE><BR>");
                // 將文件另存
                // file.saveAs("/upload/" + myFile.getFileName());
                // 另存到以WEB應(yīng)用程序的根目錄為文件根目錄的目錄下
                // file.saveAs("/upload/" + myFile.getFileName(),
                su.SAVE_VIRTUAL);
                // 另存到操作系統(tǒng)的根目錄為文件根目錄的目錄下
                // file.saveAs("c:\\temp\\" + myFile.getFileName(),
                su.SAVE_PHYSICAL);
                }
                %>
                </body>
                </html>


    四、文件下載篇

    1、下載鏈接頁(yè)面download.html

    頁(yè)面源碼如下:

    <!--
                文件名:download.html
                作  者:縱橫軟件制作中心雨亦奇(zhsoft88@sohu.com)
                -->
                <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
                <html>
                <head>
                <title>下載</title>
                <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
                </head>
                <body>
                <a href="jsp/do_download.jsp">點(diǎn)擊下載</a>
                </body>
                </html>


    2、下載處理頁(yè)面do_download.jsp do_download.jsp展示了如何利用jspSmartUpload組件來(lái)下載文件,從下面的源碼中就可以看到,下載何其簡(jiǎn)單。

    源碼如下:

    <%@ page contentType="text/html;charset=gb2312"
                import="com.jspsmart.upload.*" %><%
                // 新建一個(gè)SmartUpload對(duì)象
                SmartUpload su = new SmartUpload();
                // 初始化
                su.initialize(pageContext);
                // 設(shè)定contentDisposition為null以禁止瀏覽器自動(dòng)打開文件,
                //保證點(diǎn)擊鏈接后是下載文件。若不設(shè)定,則下載的文件擴(kuò)展名為
                //doc時(shí),瀏覽器將自動(dòng)用word打開它。擴(kuò)展名為pdf時(shí),
                //瀏覽器將用acrobat打開。
                su.setContentDisposition(null);
                // 下載文件
                su.downloadFile("/upload/如何賺取我的第一桶金.doc");
                %>


    注意,執(zhí)行下載的頁(yè)面,在Java腳本范圍外(即<% ... %>之外),不要包含HTML代碼、空格、回車或換行等字符,有的話將不能正確下載。不信的話,可以在上述源碼中%><%之間加入一個(gè)換行符,再下載一下,保證出錯(cuò)。因?yàn)樗绊懥朔祷亟o瀏覽器的數(shù)據(jù)流,導(dǎo)致解析出錯(cuò)。

    3、如何下載中文文件

    jspSmartUpload雖然能下載文件,但對(duì)中文支持不足。若下載的文件名中有漢字,則瀏覽器在提示另存的文件名時(shí),顯示的是一堆亂碼,很掃人興。上面的例子就是這樣。(這個(gè)問題也是眾多下載組件所存在的問題,很少有人解決,搜索不到相關(guān)資料,可嘆!)

    為了給jspSmartUpload組件增加下載中文文件的支持,我對(duì)該組件進(jìn)行了研究,發(fā)現(xiàn)對(duì)返回給瀏覽器的另存文件名進(jìn)行UTF-8編碼后,瀏覽器便能正確顯示中文名字了。這是一個(gè)令人高興的發(fā)現(xiàn)。于是我對(duì)jspSmartUpload組件的SmartUpload類做了升級(jí)處理,增加了toUtf8String這個(gè)方法,改動(dòng)部分源碼如下:

    public void downloadFile(String s, String s1, String s2, int i)
                throws ServletException, IOException, SmartUploadException
                {
                if(s == null)
                throw new IllegalArgumentException("File '" + s +
                "' not found (1040).");
                if(s.equals(""))
                throw new IllegalArgumentException("File '" + s +
                "' not found (1040).");
                if(!isVirtual(s) && m_denyPhysicalPath)
                throw new SecurityException("Physical path is
                denied (1035).");
                if(isVirtual(s))
                s = m_application.getRealPath(s);
                java.io.File file = new java.io.File(s);
                FileInputStream fileinputstream = new FileInputStream(file);
                long l = file.length();
                boolean flag = false;
                int k = 0;
                byte abyte0[] = new byte[i];
                if(s1 == null)
                m_response.setContentType("application/x-msdownload");
                else
                if(s1.length() == 0)
                m_response.setContentType("application/x-msdownload");
                else
                m_response.setContentType(s1);
                m_response.setContentLength((int)l);
                m_contentDisposition = m_contentDisposition != null ?
                m_contentDisposition : "attachment;";
                if(s2 == null)
                m_response.setHeader("Content-Disposition",
                m_contentDisposition + " filename=" +
                toUtf8String(getFileName(s)));
                else
                if(s2.length() == 0)
                m_response.setHeader("Content-Disposition",
                m_contentDisposition);
                else
                m_response.setHeader("Content-Disposition",
                m_contentDisposition + " filename=" + toUtf8String(s2));
                while((long)k < l)
                {
                int j = fileinputstream.read(abyte0, 0, i);
                k += j;
                m_response.getOutputStream().write(abyte0, 0, j);
                }
                fileinputstream.close();
                }
                /**
                * 將文件名中的漢字轉(zhuǎn)為UTF8編碼的串,以便下載時(shí)能正確顯示另存的文件名.
                * 縱橫軟件制作中心雨亦奇2003.08.01
                * @param s 原文件名
                * @return 重新編碼后的文件名
                */
                public static String toUtf8String(String s) {
                StringBuffer sb = new StringBuffer();
                for (int i=0;i<s.length();i++) {
                char c = s.charAt(i);
                if (c >= 0 && c <= 255) {
                sb.append(c);
                } else {
                byte[] b;
                try {
                b = Character.toString(c).getBytes("utf-8");
                } catch (Exception ex) {
                System.out.println(ex);
                b = new byte[0];
                }
                for (int j = 0; j < b.length; j++) {
                int k = b[j];
                if (k < 0) k += 256;
                sb.append("%" + Integer.toHexString(k).
                toUpperCase());
                }
                }
                }
                return sb.toString();
                }


    注意源碼中粗體部分,原jspSmartUpload組件對(duì)返回的文件未作任何處理,現(xiàn)在做了編碼的轉(zhuǎn)換工作,將文件名轉(zhuǎn)換為UTF-8形式的編碼形式。UTF-8編碼對(duì)英文未作任何處理,對(duì)中文則需要轉(zhuǎn)換為%XX的形式。toUtf8String方法中,直接利用Java語(yǔ)言提供的編碼轉(zhuǎn)換方法獲得漢字字符的UTF-8編碼,之后將其轉(zhuǎn)換為%XX的形式。

    將源碼編譯后打包成jspSmartUpload.jar,拷貝到Tomcat的shared/lib目錄下(可為所有WEB應(yīng)用程序所共享),然后重啟Tomcat服務(wù)器就可以正常下載含有中文名字的文件了。另,toUtf8String方法也可用于轉(zhuǎn)換含有中文的超級(jí)鏈接,以保證鏈接的有效,因?yàn)橛械腤EB服務(wù)器不支持中文鏈接。

    小結(jié):jspSmartUpload組件是應(yīng)用JSP進(jìn)行B/S程序開發(fā)過程中經(jīng)常使用的上傳下載組件,它使用簡(jiǎn)單,方便?,F(xiàn)在我又為其加上了下載中文名字的文件的支持,真?zhèn)€是如虎添翼,必將贏得更多開發(fā)者的青睞。

    posted @ 2008-06-30 11:21 sunny spring 閱讀(313) | 評(píng)論 (0)編輯 收藏

    JavaScript

    1. 狀態(tài)欄 (statusbar)顯功能
    2. 日期物件
    3. 隨數(shù)的產(chǎn)生
    4. 開啟新窗囗

    范 例 5:

    在 這 一 部 分 首 先 要 為 你 展 示 的 JavaScript 特 性 是 將 你 的 滑 鼠 移 到 這 個(gè) 不 同 顏 色

    連 結(jié)上 面, 此 時(shí) 看 看 瀏 覽 器 下 的 狀 態(tài) 列 有 何 結(jié) 果。 然 後 這 樣 的 功 能 我 們 可 以

    與 JavaScript 的 功 能 相 結(jié) 合。 好, 現(xiàn) 在 再 將 你 的 滑 鼠 移 到 本 處 不 同 顏 色 的連 結(jié)

    面, 你 應(yīng) 該 會(huì) 發(fā) 現(xiàn) 有 一 個(gè) 視 窗 出 現(xiàn), 是 吧?! 如 何! 怎 麼 做 到 的 呢? 以 下 就 是

    這 一 個(gè) 連 結(jié) 的 作 法:

    <a href="tpage.htm" onMouseOver="window.status='Just another stupid link...'; return true">
    在 這 兒 你 只 要 在 傳 統(tǒng) <a> 的 標(biāo) 簽 中 加 入 onMouseOver 的 method, 就 可 達(dá) 成 你 要 的

    效 果 了。 這 里 的 window.status 是 用 來(lái) 讓 你 可 以 在 WWW 瀏 覽 器 的 狀 態(tài) 列 上 顯 示

    一 些 訊 息 用 的。 在 語(yǔ) 法 中, 你 可 以 看 到 訊 息 部 分 是 用 ' 括 起 來(lái) 的 部 分, 而 非 以 " 括

    起 來(lái), 在 訊 息 部 分 結(jié) 束 之 後, 必 須 加 上 ; return true。

    好 了, 利 用 以 上 的 特 性 可 以 很 簡(jiǎn) 單 的 完 成 第 二 個(gè) 連 結(jié) 的 例 子! 相 當(dāng) 簡(jiǎn) 單, 以

    onMouseOver 的 method 然 後 配 合 事 件 發(fā) 生 時(shí) 去 呼 叫 函 數(shù) hello() 就 行 了, 不 再

    多 加 解 釋 了, 作 法 如 下:

    <html>
    <head>
    <script language="LiveScript">
    <!-- Hiding
    function hello() {
    alert("哈 羅!");
    }
    </script>
    </head>
    <body>
    <a href="" onMouseOver="hello()">link</a>
    </body>
    </html>


    范 例 6:

    接 下 來(lái) 我 們 要 告 訴 你 一 個(gè) 使 用 日 期 和 時(shí) 間 的 例 子。 在 第 一 部 分 中, 你 已 看 過 了

    lastModified 的 用 法 和 作 法。 現(xiàn) 在 要 告 訴 你 的 并 非 是 印 出 網(wǎng) 路 上 伺 服 器 或 文 件

    修 改 日 期, 而 是 你 個(gè) 人 客 戶 端 機(jī) 器 的 日 期 和 時(shí) 間。 以 下 就 是 執(zhí) 行 結(jié) 果:

    現(xiàn) 在 時(shí) 間 是: 14:4
    今 天 日 期 為: 6/3/2008

    做 法 如 下:

    <script language="LiveScript">
    <!-- Hiding
    today = new Date()
    document.write("現(xiàn) 在 時(shí) 間 是: ",today.getHours(),":",today.getMinutes())
    document.write("<br>今 天 日 期 為: ", today.getMonth()+1,"/",today.getDate(),"/",today.getYear());
    // end hiding contents -->
    </script>
    在 本 例 中, 我 們 必 需 首 先 建 立 一 個(gè) 日 期 變 數(shù), 這 可 以 由 today= new Date()來(lái) 完 成。

    如 果 沒 有 特 別 指 定 時(shí) 間 與 日 期 的 話, 瀏 覽 器 將 會(huì) 采 用 本 地 客 戶 端 機(jī) 器 的 時(shí) 間, 若 將

    它 放 入 變 數(shù) today 中。 這 兒 要 注 意 的 是: 我 們 并 沒 有 宣 告 today 這 個(gè) 變 數(shù) 的 型 態(tài),

    這 和 Java 或 其 他 的 程 式 語(yǔ) 言 在 用 到 變 數(shù) 之 前 必 需 先 加 以 宣 告 的 方 式 有 相 當(dāng) 大 的 不

    同。 在 完 成 today 的 日 期 變 數(shù) 後, 我 們 等 於 建 立 了 一 個(gè) 具 有 本 地 時(shí) 間 與 日 期 的 物 件

    (object)。 接 著 就 可 以 使 用 get... 的 method 以 取 得 today 這 個(gè) 物 件 的 時(shí) 間 和 日 期。

    請(qǐng) 注 意 getMonth 這 個(gè) method 所 取 得 的 月 份 范 圍 是 由 0~11, 所 以 必 須 加 1 以 代

    表 真 正 的 1 月 至 12 月。 看 完 以 上 的 例 子 後, 想 想 你 可 以 使 你 的 文 件 變 得 有 點(diǎn)

    智 慧, 例 如: 某 個(gè) 文 件 有 時(shí) 效 限 制 的 話, 你 可 以 利 用 我 們 在 上 一 部 份 的范 例 4

    中 所 提 到 的 功 能 和 這 一 個(gè) 范 例 中 所 學(xué) 習(xí) 到 的 功 能, 設(shè) 計(jì) 一 個(gè) 讓 你 的 文 件 在 第10天

    以 後 讀 到 的 話 就 會(huì) 告 訴 讀 者:"喂! 這 篇 已 過 時(shí) 了!"的 程 式, 試 試 看, 并 不 難!


    除 以 上 功 能 外, 在 建 立 日 期 物 件 時(shí) 你 也 可 以 事 先 設(shè) 定 日 期 如 下:

    docStarted= new Date(96,0,13)

    首 先 是 年(西 元), 接 著 是 月(但 記 得 減 1), 再 接 著 是 日。 同 樣 的 方 法 也 可 以

    加 上 時(shí) 間 的 設(shè) 定, 如 下:

    docStarted = new Date(96,0,13,10,50,0)

    前 三 個(gè) 是 日 期 的 年、 月、 日, 接 著 是 時(shí)、 分、 秒。 最 後, 我 們 必 須 提 醒 你,

    JavaScript 并 沒 有 實(shí) 際 的 日 期 型 態(tài), 但 是 它 卻 能 毫 不 費(fèi) 力 地 顯 示 出 日 期 和 時(shí) 間,

    原 因 是 它 是 從 1 / 1 / 1970 0:0h 開 始 以 ms(milli seconds) 來(lái) 計(jì) 算 目 前 的 時(shí) 間 的,

    這 聽 起 來(lái) 似   有 些 復(fù) 雜, 但 你 倒 不 用 擔(dān) 心, 它 有 標(biāo) 準(zhǔn) 的 共 用 函 數(shù) 可 以 計(jì) 算,

    你 只 要 知 道 如 何 用 就 可 以 了!


    范 例 7:

    接 下 來(lái) 我 們 要 為 你 介 紹 一 個(gè) 可 以 產(chǎn) 生 亂 數(shù) 的 函 數(shù), 也 是 以 JavaScript 所 寫 的。

    這 個(gè) 函 數(shù) 只 是 利 用 了 一 點(diǎn) 小 技 巧 而 已, 而 這 種 技 巧 在 大 部 分 的 編 譯 器(compiler)中,

    大 都 是 如 此(或 類 似) 計(jì) 算 出 亂 數(shù) 來(lái) 的。 我 相 信 JavaScript 最 後 應(yīng) 也 會(huì) 以 相 似 的 方

    法 來(lái) 產(chǎn) 生 這 樣 的 method , 如 果 它 會(huì) 提 供 這 樣 功 能 的 話。 以 下 是 此 函 數(shù) 的 結(jié) 果:

    這 是 一 個(gè) 計(jì) 算 產(chǎn) 生 的 亂 數(shù): 0.9836312285070992

    以 下 是 這 個(gè) 作 法 的 寫 法:

    <html>
    <head>
    <script language="LiveScript">
    function RandomNumber() {
    today = new Date();
    num = Math.abs(Math.sin(today.getTime()));
    return num;
    }
    </script>
    </head>
    <body>
    <script language="LiveScript">
    <!--
    document.write("This is a random number:", RandomNumber());
    // -->
    </script>
    </body>
    </html>

    我 們 的 做 法 是 以 上 一 個(gè) 范 例 中 的 時(shí) 間 函 數(shù); 它 會(huì) 出 現(xiàn) 一 個(gè) 很 大 的 數(shù),

    利 用 這 個(gè) 數(shù) 再 加 以 運(yùn) 算 即 可! 例 如: 將 它 拿 來(lái) 做 正 弦 函 數(shù)(sin) 的 運(yùn)

    算, 得 到 的 數(shù) 再 做 絕 對(duì) 值 的 運(yùn) 算, 結(jié) 果 可 以 得 到 一 個(gè) 介 於 0 與 1 間 的

    實(shí) 數(shù)。 因 為 時(shí) 間 的 改 變 是 ms 為 單 位, 而 且 你 絕 不 會(huì) 獲 得 相 同 的 數(shù) 字。

    不 過 這 個(gè) 做 法 并 不 適 合 拿 來(lái) 快 速 的 連 續(xù) 產(chǎn) 生 一 系 列 的 亂 數(shù), 但 如 果 你

    是 不 定 時(shí), 久 久 的 用 一 次, 那 效 果 就 不 錯(cuò) 了!


    范 例 8:

    JavaScript 的 一 個(gè) 重 要 特 點(diǎn) 是 它 可 以 制 作 視 窗。 你 可 以 產(chǎn) 生 一 個(gè) 的 視 窗, 并 且

    在 此 視 窗 中 載 入 HTML 文 件, 完 全 以 JavaScript 來(lái) 航 游 網(wǎng) 際 網(wǎng) 路(Internet )。

    接 下 來(lái) 的 范 例 就 是 告 訴 你 如 何 開 啟 一 個(gè) 視 窗 并 且 寫 點(diǎn) 東 西 進(jìn) 去, 你 可 先 試 試

    按 一 下 范 中 之 接 鈕 看 看!

    原 始 程 式 如 下:

    <html>
    <head>
    <script language="LiveScript">
    function WinOpen() {
    msg=open("","DisplayWindow","toolbar=no,directories=no,menubar=no");
    msg.document.write("<HEAD><TITLE>哈 羅!</TITLE></HEAD>");
    msg.document.write("<CENTER><H1>酷 斃 了!</H1><h2>這 是<B>JavaScript</B>所 開 的 視 窗!</h2></CENTER>");
    }
    </script>
    </head>
    <body>
    <form>
    <input type="button" name="Button1" value="Push me" onclick="WinOpen()">
    </form>
    </body>
    </html>
    這 兒 你 又 看 到 用 按 鈕 來(lái) 啟 動(dòng) 函 數(shù)。 這 次 的 函 數(shù) WinOpen()是 藉 著 一 個(gè) open

    的 method 來(lái) 產(chǎn) 生 一 個(gè) 新 的 視 窗。 第 一 對(duì) 雙 引 號(hào)("")是 用 來(lái) 描 述 欲 載 入 至 視 窗

    中 的 文 件 URL 位 置。 如 果 留 者 空 白 的 話, 那 就 會(huì) 呈 現(xiàn) 一 個(gè) 空 白 視 窗, 并 可 以

    透 過 JavaScript 寫 入 東 西! 下 一 對(duì) 雙 引 號(hào) 內(nèi) 的 內(nèi) 容 是 這 個(gè) 新 開 啟 視 窗 的 名 字,

    你 可 以 喜 歡 給 它 任 意 一 個(gè) 名 字, 但 不 可 加 入 空 白, 如 用 Display Window 的 話 便

    會(huì) 出 現(xiàn) 錯(cuò) 誤 訊 息, 請(qǐng) 注 意。 接 下 來(lái) 的 一 連 串 雙 引 號(hào) 內(nèi) 所 指 定 的 是 該 視 窗

    的 相 關(guān) 性 質(zhì)(properties), 這 些 蠻 有 趣 的, 你 可 以 指 定 要 不 要 有 工 具 棒(toolbar) 、

    卷 軸(scrollbar), 等 等, 例 如: 如 果 你 寫 toolbar = yes, 那 就 會(huì) 在 你 所 產(chǎn) 生 出

    來(lái) 的 視 窗 中 出 現(xiàn) 一 排 工 具 列。 以 下 有 許 多 你 可 以 改 變 的 視 窗 特 性, 請(qǐng) 注 意 它 們

    字 中 間 不 可 以 有 空 白:

    toolbar
    location
    directories
    status
    menubar
    scrollbars
    resizable
    copyhistory
    width=pixels
    height=pixels

    以 上 的 pixels 部 分, 你 可 以 填 入 點(diǎn) 數(shù) 的 數(shù) 值, 這 數(shù) 值 是 告 訴 瀏 覽 器 這 個(gè) 視 窗 的

    大 小。 在 開 啟 視 窗, 并 且 將 它 稱 為 msg 以 後, 就 可 以 開 始 寫 些 東 西 到 視 窗 中 了。

    你 可 以 寫 入 一 般 正 規(guī) 的 HTML 語(yǔ) 法 文 字。 哇! 這 可 不 得 了 了, 也 就 是 說(shuō), 你 可 以

    利 用 先 前 使 用 者 在 form 表 格 中 輸 入 給 你 的 文 章 直 接 將 它 回 應(yīng) 至 瀏 覽 器 上 來(lái) 了! 這 些

    功 能 在 幾 個(gè) 月 前 大 概 還 只 能 用 CGI 才 能 達(dá) 到 喔! 現(xiàn) 在 你 不 用 CGI 也 可 以 做 了!


    1. 什麼是JavaScript?
    2. 執(zhí)行 JavaScript scripts
    3. 將scripts 語(yǔ)法嵌入HTML文件之中
    4. 第一個(gè)函數(shù)
    5. 輸入型元件
    6. 日期功能 -- 最後修改期

    JavaScript 是一種新的描述語(yǔ)言,此一語(yǔ)言可以被箝入 HTML 的文件之中。

    透過 JavaScript 可以做到回應(yīng)使用者的需求事件 (如: form 的輸入) 而不用任何的網(wǎng)路

    來(lái)回傳輸資料,所以當(dāng)一位使用者輸入一項(xiàng)資料時(shí),它不用經(jīng)過傳給伺服端 (server)

    處理,再傳回來(lái)的過程,而直接可以被客戶端 (client) 的應(yīng)用程式所處理。你也可

    以想像成有一個(gè)可執(zhí)行程式在你的客端上執(zhí)行一樣!目前已有一些寫好的程式在

    Internet 上你可以連過去看看,以下有一些計(jì)算器的例子,在 Nescape 上。


    JavaScript 和 Java 很類似,但到底并不一樣! Java 是一種比 JavaScript 更復(fù)雜

    許多的程式語(yǔ)言,而 JavaScript 則是相當(dāng)容易了解的語(yǔ)言。JavaScript 創(chuàng)作者

    可以不那麼注重程式技巧,所以許多 Java 的特性在 Java Script 中并不支援。

    如需相關(guān)的更多資訊,可以去讀讀 Netscape 的有關(guān) Netscape JavaScript 之介紹。


     

    如何執(zhí)行 JaveScript? 范例 1:

    JavaScript 如何執(zhí)行呢?

    Netscape 2.0 beta 3 版以上,就可以執(zhí)行 JavaScript 的功能了,我們測(cè)試過至少

    beta 3 版以上可以,其他種類的 WWW 瀏覽器如:Internet Expore 3.0也有此一功能。


     

    以下我們就以一些例子來(lái)告訴你如何將 JavaScript 寫在 HTML 文件中,并且體會(huì)

    一下新語(yǔ)言的特性,我們從第一個(gè)例子開始:如何用 JavaScript 印出一串文字至

    HTML 文件中:

    <html>
    <head>
    My first JavaScript!
    </head>
    <body>
    <br>
    This is a normal HTML document.
    <br>
    <script language="LiveScript">
    document.write("這是以 JavaScript 印出的!")
    </script>
    <br>
    Back in HTML again.
    </body>
    </html>

    如果你使用的 WWW 瀏覽器是 Netscape 2.0 beta 3 以上版本的話,那你就可以

    看到相關(guān)的結(jié)果,而如果你的瀏覽器并非是可以支援 JavaScript 的話,那看起

    來(lái)就會(huì)有一些怪怪的了,以上范例的結(jié)果如下:

    This is a normal HTML document.
    這是以 JavaScript 印出的!
    Back in HTML again.
    此一范例并沒有太大的用處,它只是要告訴你如何使用<script>的標(biāo)簽,并

    如何將它置於 HTML 的文件之中而已,這個(gè)新的標(biāo)簽?zāi)憧梢蕴厮旁谖募?/span>

    中的任何地方。


     



    范例 2:

    接下來(lái)下一個(gè)例子所要介紹的是有關(guān)函數(shù) (function) 的使用。請(qǐng)放心,函數(shù)并

    非很難懂的東西,但它卻相當(dāng)有用。函數(shù)通常是在 HTML 文件中 <body >的

    部份被呼叫,而理所當(dāng)然地,它最好事先被宣告并放在 HTML 文件中 <body>

    的部份。好讓在 <body> 部分中使用到函數(shù)時(shí),它已確定被讀取住來(lái)。另外,

    <script> 標(biāo)簽的有關(guān)描述語(yǔ)法剖份,你可以用注解的符號(hào)將它括起來(lái),以免舊

    版或無(wú)法讀取 JavaScript 的瀏覽器讀到,而誤會(huì)了意思!

    <html>
    <head>
    <script language="LiveScript">
    function pushbutton() {
    alert("嗨! 你好");
    }
    </script>
    </head>
    <body>
    <form>
    <input type="button" name="Button1" value="Push me" onclick="pushbutton()">
    </form>
    </body>
    </html>
    
    

    如果你是使用 Netscape 2.0 beta 3 以上的瀏覽器,那以上 JavaScript 語(yǔ)法部份

    的結(jié)果如下,你可以試著按按鈕看看有何結(jié)果產(chǎn)生!

    在范例 2 中,將會(huì)產(chǎn)生一個(gè)按鈕,當(dāng)你用滑鼠去按它的時(shí)候,應(yīng)該會(huì)出現(xiàn)

    一個(gè)視窗上面有“嗨! 你好”的字串,如何?不錯(cuò)吧!這個(gè)結(jié)果是如何產(chǎn)生

    的呢?首先,在 <head>內(nèi)的函數(shù)會(huì)被載入并存於內(nèi)存中,接著一個(gè)新

    的 <form>標(biāo)簽 <input type ="button".....>將產(chǎn)生一個(gè)接鈕。然後,你可以

    在後面看到 'onClick' 的指令,這就是告訴瀏覽器,當(dāng)該按鈕被按時(shí),應(yīng)會(huì)執(zhí)行

    onClick 後的函數(shù) 'pushbutton()',而這個(gè)函數(shù)在剛剛程式被載入時(shí)就已安放在

    記憶體中了!請(qǐng)注意,在這個(gè)函數(shù)中我們用到了個(gè)新東西- alert 的 method,

    是 JavaScript 事先定義好的,它會(huì)以對(duì)話視窗產(chǎn)生內(nèi)涵的訊息,并有一"確定"

    (OK)的按鈕。 JavaScript 定義了許多的 method,你可以連至 Netscape 公司去

    獲取較完整的訊息。我想這些 method 在不久的將來(lái)會(huì)有長(zhǎng)長(zhǎng)的一串可以夠你

    學(xué)的,不過目前的 method 也已經(jīng)可以做出相當(dāng)多東西了!

    接著下個(gè)例子將告訴你如何由一個(gè)輸入型表格中讀入使用者的輸入資料,

    事實(shí)上,這也是加入個(gè)函數(shù)就可以達(dá)成的。


     



    范例 3:

    <html>
    <head>
    <script language="LiveScript">
    <!--  hide script from old browsers
    function getname(str) {
    alert("哈羅! "+ str+"!");
    }
    // end hiding contents -->
    </script>
    </head>
    <body>
    Please enter your name:
    <form>
    <input type="text" name="name" onBlur="getname(this.value)" value="">
    </form>
    </body>
    </html>
    
    

    現(xiàn)在你可以試試結(jié)果如何:

    請(qǐng)輸入你的名字:

    (<!- ... ->) 此部分即我們之前所提到的它可以避免舊版本或是不支援 JavaScript

    的 WWW 瀏覽器因?yàn)椴徽J(rèn)識(shí)這些函數(shù)而產(chǎn)生錯(cuò)誤。它的順序應(yīng) 該為 <script>

    先,接著為注解的開頭 <!-,然後是內(nèi)容,注解尾 ->, 最後是 </script>。

    另外要注意的一點(diǎn)是,語(yǔ)解尾那一行的開頭雙斜線 "http://" ,不可以省略,它代表了

    JavaScript 的注解,若省略了的話, ->之前的字會(huì)被誤認(rèn)為是 JavaScript 的指令。


    這個(gè)例子可以讓使用者輸入一段文字,然後再輸入完畢後經(jīng)由 <input>標(biāo)簽中的

    "onBlur" 事件函數(shù)偵知,於是呼叫 Getname(Str)這個(gè)函數(shù)來(lái)加以取得輸入字串,

    并將它顯示在對(duì)話視窗上!函數(shù) Getname(this.value) 中的 "this.value" 是你在文

    字輸入格式中所輸入的值。


     



    范例 4:

    這個(gè)范例更是帥了!我們?cè)?HTML 文件檔完成了以後,常會(huì)加上一行文件

    最後修改的日期,現(xiàn)在你可不用擔(dān)心每次都要去改或是忘了改了。你可以

    很簡(jiǎn)單的寫一個(gè)如下的描述語(yǔ)法程式,就可以自動(dòng)的為你每次產(chǎn)生最後修

    改的日期了:

    <html>
    <body>
    This is a simple HTML- page.
    <br>
    Last changes:
    <script language="LiveScript">
    <!--  hide script from old browsers
    document.write(document.lastModified)
    // end hiding contents -->
    </script>
    </body>
    </html>

    以上的 document.lastModified 叁數(shù)在 Netscape 2.0 beta 2 版時(shí)是被寫成

    documeut.lastmodified 的,然而,之後的版本就改為 document.lastModified,

    所以注意一下 ;JavaScript 本身是會(huì)區(qū)分大小寫的, lastmodifiedlastModified

    在它看來(lái)是不同的結(jié)果。

    最後,在這一部分結(jié)束之前,要提醒你一點(diǎn),像范例 4 ,的用法并非每一部

    機(jī)器都是一樣的,例如:PC 上跑得很正確的,在工作站上不一定會(huì)有相同的

    結(jié)果,所以,或許你仍得測(cè)一測(cè)不同機(jī)器的結(jié)果才會(huì)有所定論。當(dāng)然,這一切

    是因?yàn)?JavaScript 還正在發(fā)展的原因,最新的訊息還是得去拜訪一下Netscape

    公司才知道。也許你也不用奇怪,當(dāng)你隔周再來(lái)訪時(shí),JavaScript 可能又作了

    相當(dāng)大的改變了呢

    在這個(gè)例子中又有新的東西了。首先,讓我們注意一下,在語(yǔ)法中的注解部分

    posted @ 2008-06-30 11:20 sunny spring 閱讀(301) | 評(píng)論 (0)編輯 收藏

    HTML標(biāo)簽詳解

    HTML指令詳解
    結(jié)構(gòu)
    <html>
    <head>
    <title>標(biāo)題<title>
    </head>
    <body>..........文件內(nèi)容..........
    </body>
    </html>
    1.文件標(biāo)題
    <title>..........</title>
    2.文件更新--<meta>
    【1】10秒后自動(dòng)更新一次
    <meta http-equiv="refresh" content=10>
    【2】10秒后自動(dòng)連結(jié)到另一文件
    <meta http-equiv="refresh" content="10;URL=欲連結(jié)文件之URL">
    3.查詢用表單--<isindex>
    若欲設(shè)定查詢欄位前的提示文字:
    <isindex prompt="提示文字">
    4.預(yù)設(shè)的基準(zhǔn)路徑--<base>
    <base href="放置文件的主機(jī)之URL">
    版面
    1.標(biāo)題文字 <h#>..........</h#> #=1~6;h1為最大字,h6為最小字
    2.字體變化 <font>..........</font>
    【1】字體大小 <font size=#>..........</font> #=1~7;數(shù)字愈大字也愈大
    【2】指定字型 <font face="字型名稱">..........</font>
    【3】文字顏色 <font color=#rrggbb>..........</font> rr:表紅色(red)色碼 gg:表綠色(green)色碼 bb:表藍(lán)色(blue)色碼
    3.顯示小字體 <small>..........</small>
    4.顯示大字體 <big>..........</big>
    5.粗體字 <b>..........</b>
    6.斜體字 <i>..........</i>
    7.打字機(jī)字體 <tt>..........</tt>
    8.底線 <u>..........</u>
    9.刪除線 <strike>..........</strike>
    10.下標(biāo)字 <sub>..........</sub>
    11.上標(biāo)字 <sup>..........</sup>
    12.文字閃爍效果 <blink>..........</blink>
    13.換行 <br>
    14.分段 <p>
    15.文字的對(duì)齊方向 <p align="#"> #號(hào)可為 left:表向左對(duì)齊(預(yù)設(shè)值) center:表向中對(duì)齊 right:表向右對(duì)齊 P.S.<p align="#">之后的文字都會(huì)以所設(shè)的對(duì)齊方式顯示, 直到出現(xiàn)另一個(gè)<p align="#">改變其對(duì)齊方向,或遇到 <hr>ⅱ<h#>標(biāo)簽時(shí)會(huì)自動(dòng)設(shè)回預(yù)設(shè)的向左對(duì)齊。
    16.分隔線 <hr>
    【1】分隔線的粗細(xì) <hr size=點(diǎn)數(shù)>
    【2】分隔線的寬度 <hr size=點(diǎn)數(shù)或百分比>
    【3】分隔線對(duì)齊方向 <hr align="#"> #號(hào)可為 left:表向左對(duì)齊(預(yù)設(shè)值) center:表向中對(duì)齊 right:表向右對(duì)齊
    【4】分隔線的顏色 <hr color=#rrggbb>
    【5】實(shí)心分隔線 <hr noshade>
    17.向中對(duì)齊 <center>..........</center>
    18.依原始樣式顯示 <pre>..........</pre>
    19.<body>指令的屬性
    【1】背景顏色 -- bgcolor <body bgcolor=#rrggbb>
    【2】背景圖案 -- background <body background="圖形文件名">
    【3】設(shè)定背景圖案不會(huì)卷動(dòng) -- bgproperties <body bgproperties=fixed>
    【4】文件內(nèi)容文字的顏色 -- text <body text=#rrggbb>
    【5】超連結(jié)文字顏色 -- link <body link=#rrggbb>
    【6】正被選取的超連結(jié)文字顏色 -- vlink <body vlink=#rrggbb>
    【7】已連結(jié)過的超連結(jié)文字顏色 -- alink <body alink=#rrggbb>
    20.注解 <!--..........-->21.特殊字元表示法
    符 號(hào) 語(yǔ) 法
    < &lt
    > &gt
    & &amp
    " &quot
    空白 &nbsp

    圖片
    1.插入圖片 <img src="圖形文件名">
    2.設(shè)定圖框 -- border <img src="圖形文件名" border=點(diǎn)數(shù)>
    3.設(shè)定圖形大小 -- widthⅱheight <img src="圖形文件名" width=寬度點(diǎn)數(shù) height=高度點(diǎn)數(shù)>
    4.設(shè)定圖形上下左右留空 -- vspaceⅱhspace <img src="圖形文件名" vspace=上下留空點(diǎn)數(shù) hspace=左右留空點(diǎn)數(shù)>
    5.圖形附注 <img src="圖形文件名" alt="說(shuō)明文字">
    6.預(yù)載圖片
    <img src="高解析度圖形文件名" lowsrc="低解析度圖形文件名"> P.S.兩個(gè)圖的圖形大小最好一致
    7.影像地圖(Image Map) <img src="圖形文件名" usemap="#圖的名稱"> <map name="圖的名稱"

    <area shape=形狀 coords=區(qū)域座標(biāo)列表 href="連結(jié)點(diǎn)之URL">
    <area shape=形狀 coords=區(qū)域座標(biāo)列表 href="連結(jié)點(diǎn)之URL">
    <area shape=形狀 coords=區(qū)域座標(biāo)列表 href="連結(jié)點(diǎn)之URL">
    <area shape=形狀 coords=區(qū)域座標(biāo)列表 href="連結(jié)點(diǎn)之URL"> </map>
    【1】定義形狀 -- shape
    shape=rect:矩形 shape=circle:圓形 shape=poly:多邊形
    【2】定義區(qū)域 -- coords
    a.矩形:必須使用四個(gè)數(shù)字,前兩個(gè)數(shù)字為左上角座標(biāo),后兩個(gè)數(shù)字為右下角座標(biāo)
    例:<area shape=rect coords=100,50,200,75 href="URL">
    b.圓形:必須使用三個(gè)數(shù)字,前兩個(gè)數(shù)字為圓心的座標(biāo),最后一個(gè)數(shù)字為半徑長(zhǎng)度
    例:<area shape=circle coords=85,155,30 href="URL">
    c.任意圖形(多邊形):將圖形之每一轉(zhuǎn)折點(diǎn)座標(biāo)依序填入
    例:<area shape=poly coords=232,70,285,70,300,90,250,90,200,78 href="URL">
    表格
    1.定義表格 <table>..........</table>
    【1】設(shè)定邊框的厚度 -- border
    <table border=點(diǎn)數(shù)>
    【2】設(shè)定格線的寬度 -- cellspacing
    <table cellspacing=點(diǎn)數(shù)>
    【3】設(shè)定資料與格線的距離 -- cellpadding
    <table cellpadding=點(diǎn)數(shù)>
    【4】調(diào)整表格寬度 -- width
    <table width=點(diǎn)數(shù)或百分比>
    【5】調(diào)整表格高度 -- height
    <table height=點(diǎn)數(shù)或百分比>
    【6】設(shè)定表格背景色彩 -- bgcolor
    <table bgcolor=#rrggbb>
    【7】設(shè)定表格邊框色彩 -- bordercolor
    <table bordercolor=#rrggbb

    2.顯示格線 <table border>
    3.表格標(biāo)題
    <caption>..........</caption>
    表格標(biāo)題位置 -- align
    <caption align="#"> #號(hào)可為 top:表標(biāo)題置于表格上方(預(yù)設(shè)值)
    bottom:表標(biāo)題置于表格下方
    4.定義列 <tr>
    5.定義欄位 《1》<td>:靠左對(duì)齊
    《2》<th>:靠中對(duì)齊ⅱ粗體
    【1】水平位置 -- align <th align="#">
    #號(hào)可為 left:向左對(duì)齊
    center:向中對(duì)齊 right:向右對(duì)齊
    【2】垂直位置 -- align <th align="#"> #號(hào)可為
    top:向上對(duì)齊 middle:向中對(duì)齊
    bottom:向下對(duì)齊
    【3】欄位寬度 -- width
    <th width=點(diǎn)數(shù)或百分比>
    【4】欄位垂直合并 -- rowspan
    <th rowspan=欲合并欄位數(shù)>
    【5】欄位橫向合并 -- colspan
    <th colspan=欲合并欄位數(shù)>
    清單
    一、目錄式清單
    <dir> <li>項(xiàng)目1 <li>項(xiàng)目2 <li>項(xiàng)目3 </dir> P.S.目錄式清單每一個(gè)項(xiàng)目不能超過20個(gè)字元(即10個(gè)中文字)
    二、選項(xiàng)式清單 <menu> <li>項(xiàng)目1 <li>項(xiàng)目2 <li>項(xiàng)目3 </menu>
    三、有序號(hào)的清單 <o(jì)l> <li>項(xiàng)目1 <li>項(xiàng)目2 <li>項(xiàng)目3 </ol>
    【1】序號(hào)形式 -- type <o(jì)l type=#>或<li type=#> #號(hào)可為 A:表以大寫英文字母AⅱBⅱCⅱD...做為項(xiàng)目編號(hào) a:表以小寫英文字母aⅱbⅱcⅱd...做為項(xiàng)目編號(hào) I:表以大寫羅馬數(shù)字做為項(xiàng)目編號(hào) i:表以小寫羅馬數(shù)字做為項(xiàng)目編號(hào) 1:表以阿拉伯?dāng)?shù)字做為項(xiàng)目編號(hào)(預(yù)設(shè)值)
    【2】起始數(shù)字 -- start <o(jì)l start=欲開始計(jì)數(shù)的序數(shù)>
    【3】指定編號(hào) -- value <li value=欲指定的序數(shù)>
    四、無(wú)序號(hào)的清單 <ul> <li>項(xiàng)目1 <li>項(xiàng)目2 <li>項(xiàng)目3 </ul>

    【1】項(xiàng)目符號(hào)形式 -- type <ul type=#>或<li type=#> #號(hào)可為 disc:實(shí)心圓點(diǎn)(預(yù)設(shè)值) circle:空心圓點(diǎn) square:實(shí)心方塊
    【2】原始清單 -- plain <ul plain>
    【3】清單排列方式 -- warp 《1》清單垂直排列 <ul warp = vert> 《2》清單水平排列 <ul warp = horiz>
    五、定義式清單 <dl> <dt>項(xiàng)目1 <dd>項(xiàng)目1說(shuō)明 <dt>項(xiàng)目2 <dd>項(xiàng)目2說(shuō)明 <dt>項(xiàng)目3 <dd>項(xiàng)目3說(shuō)明 </dl>
    緊密排列 -- compact <dl compact> P.S.如此可使<dt>的內(nèi)容與<dd>的內(nèi)容在同一行,僅 以數(shù)格空白相隔而不換行,但若<dt>的文字超過一 定的長(zhǎng)度后,compact的作用就消失了!
    表單
    一、基本架構(gòu) <form action="處理資料用的CGI程式之URL"或"mailt電子信箱的URL" method="get或post"> .......... .......... .......... </form>
    二、輸入文件型表單 <form action="URL" method="post"> <input> <input> .......... .......... </form>
    【1】欄位類型 -- type <input type=#> #號(hào)可為 text:文字輸入 password:密碼 checkbox:多選鈕 radio:?jiǎn)芜x鈕 submit:接受按鈕 reset:重設(shè)按鈕 image:圖形鈕 hidden:隱藏欄位
    【2】欄位名稱 -- name <input name="資料欄名"> P.S.若type為submitⅱreset則name不必設(shè)定
    【3】文件上的預(yù)設(shè)值 -- value <input value="預(yù)設(shè)之字串">
    【4】設(shè)定欄位的寬度 -- size <input size=字元數(shù)>
    【5】限制最大輸入字串的長(zhǎng)度 -- maxlength <input maxlength=字元數(shù)>
    【6】預(yù)設(shè)checkbox或radio的初值 -- checked <input type=checkbox checked> <input type=radio checked>

    【7】指定圖形的URL -- src <input type=image src="圖檔名">
    【8】圖文對(duì)齊 -- align <input type=image align="#"> #號(hào)可為 top:文字對(duì)齊圖片之頂端 middle:文字對(duì)齊圖片之中間 buttom:文字對(duì)齊圖片之底部
    三、選擇式表單 <form action="URL" method="post"> <select> <o(jì)ption> <o(jì)ption> .......... .......... </select> </form>
    A、<select>的屬性
    【1】欄位名稱 -- name <select name="資料欄位名">
    【2】設(shè)定顯示的選項(xiàng)數(shù) -- size <select size=個(gè)數(shù)>
    【3】多重選項(xiàng) -- multiple <select multiple>
    B、<o(jì)ption>的屬性
    【1】定義選項(xiàng)的傳回值 -- value <o(jì)ption value="傳回值">
    【2】預(yù)先選取的選項(xiàng) -- selected <o(jì)ption selected>
    四、多列輸入文字區(qū)表單 <form action="URL" method="post"> <textarea> .......... .......... </textarea> </form>
    【1】文字區(qū)的變數(shù)名稱 -- name <textarea name=變數(shù)名稱>
    【2】設(shè)定文字輸入?yún)^(qū)寬度 -- cols <textarea cols=字元數(shù)>
    【3】設(shè)定文字輸入?yún)^(qū)高度 -- rows <textarea rows=列數(shù)>
    【4】輸入?yún)^(qū)設(shè)定預(yù)設(shè)字串 <textarea> 預(yù)設(shè)文字 </textarea>
    【5】自動(dòng)換行與否 -- wrap <textarea wrap=#> #號(hào)可為 off:表輸入的文字超過欄寬時(shí),不會(huì)自動(dòng)換行(預(yù)設(shè)值) virtual:表輸入的文字在超過欄寬時(shí)會(huì)自動(dòng)換行
    鏈接
    一、連結(jié)至其他文件 <a href="URL">說(shuō)明文字或圖片</a>

    二、連結(jié)至文件內(nèi)之某一處(外部連結(jié))
    《1》起點(diǎn)
    <a href="檔名#名稱">..........</a>
    《2》終點(diǎn) <a name="名稱">
    三、frame的超連結(jié)
    【1】開啟新的瀏覽器來(lái)顯示連結(jié)文件 -- _blank <a href="URL" target=_blank>
    【2】顯示連結(jié)文件於目前的frame -- _self <a href="URL" target=_self>
    【3】以上一層的分割視窗顯示連結(jié)文件 -- _parent <a href="URL" target=_parent>
    【4】以全視窗顯示連結(jié)文件 -- _top <a href="URL" target=_top>
    【5】以特定視窗顯示連結(jié)文件 --<a href="URL" target="特定視窗名稱">
    FRAME
    一、分割視窗指令 <frameset>..........</frameset>
    【1】垂直(上下)分割 -- rows
    <frameset rows=#> #號(hào)可為點(diǎn)數(shù):如欲分割為100,200,300三個(gè)視窗,則
    <frameset rows=100,200,300>;亦可以*號(hào)代表,如<frameset rows=*,500,*>
    百分比:如<frameset rows=30%,70%>,各 項(xiàng)總和最好為100%
    【2】水平(左右)分割 -- cols <frameset cols=點(diǎn)數(shù)或百分比>
    二ⅱ指定視窗內(nèi)容 -- <frame>
    <frameset cols=30%,70%> <frame> <frame> </frameset>
    【1】指定視窗的文件名稱 -- src <frame src=HTML檔名>
    【2】定義視窗的名稱 -- name
    <frame name=視窗名稱>
    【3】設(shè)定文件與上下邊框的距離 -- marginheight
    <frame marginheight=點(diǎn)數(shù)>
    【4】設(shè)定文件與左右邊框的距離 -- marginwidth
    <frame marginwidth=點(diǎn)數(shù)>
    【5】設(shè)定分割視窗卷軸 -- scrollin

    <frame scrolling=#> #號(hào)可為 yes:固定出現(xiàn)卷軸
    no:不出現(xiàn)卷軸 auto:自動(dòng)判斷文件大小需不需要卷軸(預(yù)設(shè)值)
    【6】鎖住分割視窗的大小 -- noresize <frame noresize>

    posted @ 2008-06-30 11:16 sunny spring 閱讀(452) | 評(píng)論 (0)編輯 收藏

    java文件上傳代碼

    1 package com.khan.web;
       2
       3 import java.io.DataInputStream;
       4 import java.io.File;
       5 import java.io.FileNotFoundException;
       6 import java.io.FileOutputStream;
       7 import java.io.IOException;
       8 import javax.servlet.http.HttpServletRequest;
       9 import java.io.*;
    10 import java.util.HashMap;
    11
    12
    13 public class uploadFile   {
    14      public static final int MAX_SIZE = 1024 * 1024*100;
    15      public static final String FILE_DIR = "d:/temp/";
    16
    17      private int file_Size=0;
    18      private String file_Path = "";
    19      private HashMap hm = new HashMap();
    20
    21      public String upLoad(HttpServletRequest req) {
    22          String tmpString ="";
    23          String result = "";
    24          DataInputStream dis = null;
    25          String split_Str = "";
    26
    27          try {
    28              dis = new DataInputStream(req.getInputStream());
    29              String content = req.getContentType();
    30              if (content != null && content.indexOf("multipart/form-data") != -1) {
    31
    32                  int reqSize = req.getContentLength();
    33                  byte[] data = new byte[reqSize];
    34                  int bytesRead = 0;
    35                  int totalBytesRead = 0;
    36                  int sizeCheck = 0;
    37                  while (totalBytesRead < reqSize) {
    38                      // check for maximum file size violation
    39                      sizeCheck = totalBytesRead + dis.available();
    40                      if (sizeCheck > MAX_SIZE)
    41                          result = "文件太大不能上傳";
    42
    43                      bytesRead = dis.read(data, totalBytesRead, reqSize);
    44                      totalBytesRead += bytesRead;
    45                  }
    46                  String dataString = null;
    47                  //dataString = new String(data, "ISO-8859-1");
    48                  dataString = new String(data);
    49                  tmpString = new String(data);
    50                  hm = parseAnotherParam(tmpString);
    51                
    52                  //取出字段分割符
    53                  split_Str = dataString.substring(0, dataString.indexOf("\r\n"));
    54                  // 分離filepath 并賦值
    55                  dataString = dataString.substring(dataString.indexOf("filename=\""));
    56                  String filePath = dataString.substring(0, dataString.indexOf("Content-Type:"));
    57                  if (filePath==null && filePath.equals("")) return "";
    58                  //System.out.println(filePath);
    59                  dataString = new String(dataString.getBytes(),"ISO-8859-1");
    60                  // 分離contentType 并賦值
    61                  dataString = dataString.substring(dataString.indexOf("Content-Type:") + 1);
    62                  dataString = dataString.substring(dataString.indexOf("\n") + 1);
    63                  // 分離文件信息 獲得最終想要的字節(jié)
    64 //System.out.print("|"+dataString+"|");
    65                  dataString = dataString.substring(2, dataString.indexOf(split_Str));
    66 //System.out.println("|"+dataString+"|");
    67                  dataString = dataString.substring(0, dataString.lastIndexOf("\n") - 1);
    68 //System.out.print("|"+dataString+"|");
    69                  if (writeFile(dataString.getBytes("ISO-8859-1"), FILE_DIR + getFileName(filePath))) {
    70                      this.file_Size = dataString.getBytes("ISO-8859-1").length;
    71                      this.file_Path = FILE_DIR + getFileName(filePath);
    72                      result = "文件上傳完畢";
    73                  } else {
    74                      result = "文件上傳失敗";
    75                  }
    76              } else {
    77                  result = "content 必須為 multipart/form-data";
    78              }
    79          } catch (UnsupportedEncodingException ex4) {
    80              result = "getBytes 失敗 UnsupportedEncodingException錯(cuò)誤";
    81          } catch (NullPointerException e) {
    82              result = "getBytes 失敗 NullPointerException錯(cuò)誤";
    83          } catch (IOException ex1) {
    84              result = "IOException 錯(cuò)誤 ";
    85          }
    86
    87          return result;
    88      }
    89
    90      public String getFilePath(){
    91          return this.file_Path;
    92      }
    93
    94      public int getFileSize(){
    95          return this.file_Size;
    96      }
    97
    98      public boolean writeFile(byte[] data, String path) {
    99          File f = null;
    100          FileOutputStream fos = null;
    101          try {
    102              f = new File(path);
    103              f.createNewFile();
    104              fos = new FileOutputStream(f);
    105              fos.write(data, 0, data.length);
    106          } catch (FileNotFoundException e) {
    107              return false;
    108          } catch (IOException e) {
    109              return false;
    110          } finally {
    111              try {
    112                  fos.close();
    113              } catch (IOException e) {
    114                  return false;
    115              }
    116          }
    117          return true;
    118      }
    119
    120      public String getFileName(String arg) {
    121          String path = "";
    122          if (arg.indexOf("\"") > -1)
    123              path = arg.substring(arg.indexOf("\"") + 1, arg.lastIndexOf("\""));
    124          else
    125              path = arg;
    126      //System.out.println("file_path:"+arg);
    127          path = path.substring(path.lastIndexOf("\\") + 1);
    128          return path;
    129      }
    130
    131
    132      public HashMap parseAnotherParam(String str){
    133        HashMap hm= new HashMap();
    134        String key="";
    135        String value="";
    136        int startindex = 0;
    137        int endindex = 0;
    138
    139        startindex = str.indexOf("Content-Disposition: form-data; name=\"") + "Content-Disposition: form-data; name=\"".length();
    140        endindex = str.indexOf("\"\r\n\r\n");
    141
    142        while ( startindex >-1 && endindex > -1 ){
    143          key = str.substring(startindex, endindex);
    144
    145          if(!str.substring(endindex , endindex + 5).equals("\"\r\n\r\n")   ){//去掉沒有value的元素
    146              str = str.substring(endindex);
    147              startindex = str.indexOf("Content-Disposition: form-data; name=\"") + "Content-Disposition: form-data; name=\"".length();
    148              endindex = str.indexOf("\"\r\n\r\n");
    149              continue;
    150          }
    151          if( key.indexOf("\";") > -1){//去掉上傳文件的參數(shù)以及編碼
    152             str = str.substring(str.indexOf("\";") + 2);
    153             startindex = str.indexOf("Content-Disposition: form-data; name=\"") + "Content-Disposition: form-data; name=\"".length();
    154             endindex = str.indexOf("\"\r\n\r\n");
    155
    156             continue;
    157          } else
    158              str = str.substring(endindex + 5);
    159
    160          value = str.substring(0, str.indexOf("\r\n"));
    161          str = str.substring(str.indexOf("\r\n") + 2);
    162          //System.out.println("key:"+key+" value:"+value);
    163          hm.put(key,value);
    164
    165          startindex = str.indexOf("Content-Disposition: form-data; name=\"") + "Content-Disposition: form-data; name=\"".length();
    166          endindex = str.indexOf("\"\r\n\r\n");
    167
    168        }
    169        return hm;
    170      }
    171
    172      public String getParameter(String param){
    173          //System.out.println(hm.toString());
    174        return (String)hm.get(param);
    175      }
    176
    177
    178 }

    posted @ 2008-06-30 11:10 sunny spring 閱讀(5295) | 評(píng)論 (1)編輯 收藏

    ResultSet大全

    開發(fā)的朋友,在操作數(shù)據(jù)庫(kù)的時(shí)候,相信絕大部分人都用過它。但它不僅僅就是一個(gè)結(jié)果集的純載體,僅僅只有存儲(chǔ)的功能。下面就簡(jiǎn)略說(shuō)一下它的功能。
      
       結(jié)果集大體上可以分為四類,它們各有特點(diǎn),基本上都和Statement語(yǔ)句的創(chuàng)建方式有關(guān)。
       1、基本型(最基本,用得最廣泛)
       創(chuàng)建方式:無(wú)參數(shù)創(chuàng)建型
       Statement st = conn.CreateStatement
       ResultSet rs = Statement.excuteQuery(sqlStr);
       特點(diǎn):這種最簡(jiǎn)單,沒有特別的功能(不支持滾動(dòng)、更新等等),只能用next()逐個(gè)單方向去讀取數(shù)據(jù)。
      
       2、滾動(dòng)型
       創(chuàng)建方式:參數(shù)創(chuàng)建型
       Statement st = conn.createStatement(int resultSetType, int resultSetConcurrency)
       ResultSet rs = st.executeQuery(sqlStr)
       參數(shù):
       resultSetType是設(shè)置ResultSet對(duì)象的類型可滾動(dòng)
       resultSetConcurency是設(shè)置ResultSet對(duì)象能夠修改的
       具體的參數(shù)值見ResultSet.
      
       特點(diǎn):(和具體參數(shù)的設(shè)置有關(guān)。)這種類型支持滾動(dòng)獲取記錄,可以向前向后操作,類似于分頁(yè)功能的操作方式。如支持:next()、previous()、first()、absolute(int n)等等。
      
      
       3、更新型
       創(chuàng)建方式:(和2一樣,不過參數(shù)選取不同)
       Statement st = createstatement(Result.TYPE_SCROLL_INSENSITIVE,Result.CONCUR_UPDATABLE)
      
       特點(diǎn):可以完成對(duì)數(shù)據(jù)庫(kù)的更新操作。更新的方法是,把ResultSet的游標(biāo)移動(dòng)到你要更新的行,然后調(diào)用updateXXX(),再用updateRow()完成對(duì)數(shù)據(jù)庫(kù)的寫入。
      
       限制/要求:(1)對(duì)單表操作。(2)不包含join或者group by子句。
      
       4、保持型
       創(chuàng)建方式:
       Statement st=createStatement(int resultsetscrollable,int resultsetupdateable,int resultsetSetHoldability)
       ResultSet rs = st.excuteQuery(sqlStr);
      
       參數(shù):只介紹第三個(gè)resultsetSetHoldability,表示在結(jié)果集提交后結(jié)果集是否打開,其值為
       ResultSet.HOLD_CURSORS_OVER_COMMIT:表示修改提交時(shí),不關(guān)閉數(shù)據(jù)庫(kù)。
       ResultSet.CLOSE_CURSORS_AT_COMMIT:表示修改提交時(shí)ResultSet關(guān)閉
      
       特點(diǎn):一般情況下,在使用Statement執(zhí)行完一個(gè)查詢,又去執(zhí)行另一個(gè)查詢的時(shí)候,第一個(gè)查詢的結(jié)果集就會(huì)被關(guān)閉。該方式可以自由設(shè)定是否關(guān)閉結(jié)果集。
       限制/要求:(1)只是在JDBC3.0的驅(qū)動(dòng)下才能成立。

    可更新的結(jié)果集:

    更新一行:

                         

    UpdateXXX()è cancelRowUpdates()èupdateRow()èrowUpdated()。

    UpadateXXX()方法只能修改當(dāng)前行的數(shù)據(jù),并不能修改數(shù)據(jù)庫(kù)中的數(shù)據(jù),所以在調(diào)用updateXXX()后,還要調(diào)用updateRow()方法,用當(dāng)前行中的新數(shù)據(jù)更新數(shù)據(jù)庫(kù)。

    CancelRowUpdates()方法用來(lái)放棄對(duì)當(dāng)前行的修改,注意,要讓這個(gè)方法有效,必須在調(diào)用updteRow()方法之前調(diào)用它。

    rowUpdated()方法來(lái)判斷當(dāng)前行是否被更新。

    插入行:

    moveToInsertRow()方法移動(dòng)游標(biāo)到插入行,插入行是一個(gè)與可更新的結(jié)果集相聯(lián)系的特殊的緩存行。

    moveToInsertRow()èupdateXXX()ègetXXX()èinsertRow()èrowInserted()

    insertRow()將新行傳遞給數(shù)據(jù)庫(kù),從而在新數(shù)據(jù)庫(kù)中真正插入一行數(shù)據(jù)

    rowInserted()方法來(lái)判斷當(dāng)前行是否是插入行。

    刪除一行:

    deletRow()從結(jié)果集中和數(shù)據(jù)庫(kù)中刪除一行,當(dāng)游標(biāo)指向插入行的時(shí)候,不能調(diào)用這個(gè)方法。一個(gè)被刪除的行可能在結(jié)果集中留下一個(gè)空的位置,可以調(diào)用 rowDeleted()方法來(lái)判斷一行是否被刪除。

    可更新結(jié)果集的使用必須滿足下面3個(gè)條件:

    1, 只能是針對(duì)數(shù)據(jù)庫(kù)中單張表單的查詢

    2, 查詢語(yǔ)句中不能包含任何的join操作。

    3, 查詢操作的表中必須有主鍵,而且在查詢的結(jié)果集中必須包含作為主鍵的字段。

    結(jié)果集中執(zhí)行插入操作,還應(yīng)該滿足下面兩個(gè)條件

    1, 查詢操作必須選擇數(shù)據(jù)庫(kù)表中所有不能為空的列

    2, 查詢操作必須選擇所有沒有默認(rèn)值的列。

    判斷ResultSet是否為空

    ResultSet rs=stmt.executeQuery(sql);
    rs == null;
    rs.size()這個(gè)方法沒有的
    rs為ResultSet的引用,即使結(jié)果集里有0條記錄,rs也不為空,所以用rs == null來(lái)判斷結(jié)果集里是否有0條記錄是錯(cuò)誤的,而要用
    rs.getRow(); 為0則表示沒有記錄--使用的時(shí)候也有問題
    使用rs.next()是否為true來(lái)判斷,會(huì)使游標(biāo)前移一位,可能丟掉一條記錄,不合適
    boolean hasRows = false;

    下面的方法較合適
    while (rs.next()){
    hasRows = true;
    //Do your stuff
    }

    if (!hasRows ){
    //Empty result set
    }

    //You dont have to test for null result set

    posted @ 2008-06-30 11:06 sunny spring 閱讀(985) | 評(píng)論 (0)編輯 收藏

    javascript頁(yè)面間傳參數(shù)

    a.html:

     

    a.html
    <script language="javascript">
    function a(){
    document.cookie="aaa1111";
    //alert(document.cookie);
    //window.location.href("b.html");
    top.window.location = 'b.html';
    }


    </script>
    <div>
    <input type="button" onclick="a()" value="轉(zhuǎn)到b.html" />
    </div>

    posted @ 2008-06-30 11:04 sunny spring 閱讀(405) | 評(píng)論 (0)編輯 收藏

    HTTP Status 403 - Access to the requested resource has been denied

    剛剛解壓版的Tomcat5.0.12,啟動(dòng)setup.bat后,通過瀏覽器訪問:http://127.0.0.1:8080/admin

    在登錄界面輸入用戶名 both 和密碼 tomcat 后出現(xiàn)下面的錯(cuò)誤提示:

    HTTP Status 403 - Access to the requested resource has been denied

     

    問題原因:

    D:\Tomcat5.0\conf 目錄下的

    tomcat-users.xml 文件內(nèi)容如下:

    <?xml version='1.0' encoding='utf-8'?>
    <tomcat-users>
       <role rolename="tomcat"/>
       <role rolename="role1"/>
       <user username="tomcat" password="tomcat" roles="tomcat"/>
       <user username="role1" password="tomcat" roles="role1"/>
       <user username="both" password="tomcat" roles="tomcat,role1"/>
    </tomcat-users>

    問題修改:將tomcat-users.xml 文件內(nèi)容改為

    <?xml version='1.0' encoding='utf-8'?>
    <tomcat-users>
       <role rolename="tomcat"/>
       <role rolename="role1"/>
       <role rolename="manager"/>
       <role rolename="admin"/>

       <user username="admin" password="admin" roles="admin,manager"/>
       <user username="tomcat" password="tomcat" roles="tomcat"/>
       <user username="role1" password="tomcat" roles="role1"/>
       <user username="both" password="tomcat" roles="tomcat,role1"/>
    </tomcat-users>

    重新啟動(dòng)Tomcat ,在登錄時(shí)使用 用戶名admin 密碼 admin 登錄即可。

    posted @ 2008-06-30 11:00 sunny spring 閱讀(8187) | 評(píng)論 (4)編輯 收藏

    JAVA正則表達(dá)式

    public class Regular{

    public static void main(String[]args){

    //把字符串中的 "aaa"全部替換為"z" 打印zbzcz

    System.out.println("aaabaaacaaa".replaceAll("a{3}","z"));

    //把字符串的"aaa","aa"或者"a" 全部替換為"*" 打印*b*c*

    System.out.println("aaabaaca".replaceAll("a{1,3},"\\*"));

    //把字符串中的數(shù)字全部替換為"z" 打印zzzazzbzzcc

    System.out.println("123a44b35cc".replaceAll("\ \d","z"));

    //把字符串中的非數(shù)字全部替換為"0" 打印1234000435000

    System.out.println("1234abc435def".replaceAll("\ \D","0"));

    //把字符串中的"."全部替換為"\"打印abc\def\ghi\jk

    System.out.println("abc.def.ghi.jk".replaceAll("\\.","\\\\"));

    //把字符串中的"a.b"全部替換為"-","a.b"表示長(zhǎng)度為3的字符串,以a開頭以b結(jié)尾

    //打印-hello-lining

    System.out.println("axbhelloasblining".replaceAll("a.b","-"));

    //把字符串中的所有詞字符替換為"#"

    //正則表達(dá)式"[a-zA-Z_0-9]等價(jià)于"\w"

    //打印#.#.#.#.#.

    System.out.println("a.b.c.1.2.".replace("\w","#"));

    }



    /**
         * filter all html element.
         * For example:<a href="www.sohu.com/test">hello!</a>
         * The filter result is :hello!
         * Notice:This method filter the text between "<" and ">"
         * @param element
         * @return
         */
         public static String getTxtWithoutHTMLElement (String element)
         {
    //       String reg="<[^<|^>]+>";
    //       return   element.replaceAll(reg,"");
            
             if(null==element||"".equals(element.trim()))
             {
                 return element;
             }

             Pattern pattern=Pattern.compile("<[^<|^>]*>");
             Matcher matcher=pattern.matcher(element);
             StringBuffer txt=new StringBuffer();
             while(matcher.find())
             {
                 String group=matcher.group();
                 if(group.matches("<[\\s]*>"))
                 {
                     matcher.appendReplacement(txt,group);    
                 }
                 else
                 {
                     matcher.appendReplacement(txt,"");
                 }
             }
             matcher.appendTail(txt);
             repaceEntities(txt,"&","&");
             repaceEntities(txt,"<","<");        
             repaceEntities(txt,">",">");
             repaceEntities(txt,""","\"");
             repaceEntities(txt," ","");
            
             return txt.toString();
         }



    下面是測(cè)試用例:
    public void testGetTxtWithoutHTMLElement ()
         {
            
             assertEquals("test",ExcelHssfView.getTxtWithoutHTMLElement("<a href='a/test'>test</a>"));
            
             assertEquals("test",ExcelHssfView.getTxtWithoutHTMLElement("<a href='a/test'>test"));
            
             assertEquals("test",ExcelHssfView.getTxtWithoutHTMLElement("<input type='text'>test</input>"));
            
             assertEquals("test",ExcelHssfView.getTxtWithoutHTMLElement("<p>test"));
            
             assertEquals("test",ExcelHssfView.getTxtWithoutHTMLElement("<table><tr><td>test</td></tr></table>"));
            
             assertEquals("te<st",ExcelHssfView.getTxtWithoutHTMLElement("<p>te<st"));
            
             assertEquals("te>st",ExcelHssfView.getTxtWithoutHTMLElement("<p>te>st"));
            
             assertEquals("tst",ExcelHssfView.getTxtWithoutHTMLElement("<p>t<e>st"));
            
             assertEquals("t<st",ExcelHssfView.getTxtWithoutHTMLElement("<p>t<<e>st"));
            
             assertEquals("<>test",ExcelHssfView.getTxtWithoutHTMLElement("<p><>test"));
            
             assertEquals("< >test",ExcelHssfView.getTxtWithoutHTMLElement("<p>< >test"));
            
             assertEquals("<<>test",ExcelHssfView.getTxtWithoutHTMLElement("<p><<>test"));
            
             assertEquals("test",ExcelHssfView.getTxtWithoutHTMLElement("<table><tr><td> test</td></tr></table>"));
            
         }

    }

    posted @ 2008-06-30 10:58 sunny spring 閱讀(154) | 評(píng)論 (0)編輯 收藏

    MyEclipse5.5下載 MyEclipse5.5注冊(cè)碼

    到官方網(wǎng)站下載,這里有myeclipse5.5,有一個(gè)是MyEclipse5.5+Eclipse3.2.2
    http://www.myeclipseide.com/index.php?module=htmlpages&func=display&pid=4


    MyEclipse5.5   http://www.myeclipseide.com/module-htmlpages-display-pid-4.html
    Eclipse3.2.2   http://mirror.in.th/eclipse/eclipse/downloads/drops/R-3.2.2-200702121330/eclipse-SDK-3.2.2-win32.zip   


    MyEclipse5.5             注冊(cè)碼

                         Subscriber: www.1cn.biz
                         Subscriber Code: jLR8ZC-655355-5450765457039125
                        
                         Subscriber: www.1cn.biz
                         Subscriber Code: jLR7ZL-655355-5450755330522962

                         Subscriber: www.1cn.biz          
                         Subscriber Code: jLR8ZC-444-55-4467865481680090

                         MyEclipse5.5 M2注冊(cè)碼:適用于早期的 5.5 M2 版本的:
                         Subscriber: www.1cn.biz
                         Subscriber Code: jLR8ZC-956-55-5467865833584547

    posted @ 2008-06-30 10:53 sunny spring 閱讀(24647) | 評(píng)論 (44)編輯 收藏

    不同數(shù)據(jù)庫(kù)分頁(yè)代碼

    1. ORACLE
    SELECT * FROM TABLE1 WHERE ROWNUM<=N
    2. INFORMIX
    SELECT FIRST N * FROM TABLE1
    3. DB2
    SELECT * ROW_NUMBER() OVER(ORDER BY COL1 DESC) AS ROWNUM WHERE ROWNUM<=N
    或者
    SELECT COLUMN FROM TABLE FETCH FIRST N ROWS ONLY
    4. SQL SERVER
    SELECT TOP N * FROM TABLE1
    5. SYBASE
    SET ROWCOUNT N
    GO
    SELECT * FROM TABLE1
    6. MYSQL
    SELECT * FROM TABLE1 LIMIT N
    7. FOXPRO
    SELECT * TOP N FROM TABLE ORDER BY COLUMN

    雖然 select * from table where rownum< 你要查的記錄條數(shù),能夠取出前幾條記錄,但是你如果要把排序后記錄取前幾條結(jié)果就不對(duì),如下 SQL 語(yǔ)句select * from table where rownum<50 order by 字段名 desc ,取出來(lái)的不時(shí)按照先排序后取前幾名,而是先取前幾名,再排序。

    要實(shí)現(xiàn)先排序,再取前幾名用下面這條語(yǔ)句select * from (select * from table order by 字段名 desc) where rownum<50

    某一個(gè)字段沒有重復(fù)的
    其他的不要管 只要這條記錄重復(fù)的情況下的第一條
    select * from f where id in (select max(id) from f group by jid)

    posted @ 2008-06-30 10:52 sunny spring 閱讀(169) | 評(píng)論 (0)編輯 收藏

    java概述

    J2EE是一套全然不同于傳統(tǒng)應(yīng)用開發(fā)的技術(shù)架構(gòu),包含許多組件,主要可簡(jiǎn)化且規(guī)范應(yīng)用系統(tǒng)的開發(fā)與部署,進(jìn)而提高可移植性、安全與再用價(jià)值。
    J2EE核心是一組技術(shù)規(guī)范與指南,其中所包含的各類組件、服務(wù)架構(gòu)及技術(shù)層次,均有共通的標(biāo)準(zhǔn)及規(guī)格,讓各種依循J2EE架構(gòu)的不同平臺(tái)之間,存在良好的兼容性,解決過去企業(yè)后端使用的信息產(chǎn)品彼此之間無(wú)法兼容,導(dǎo)致企業(yè)內(nèi)部或外部難以互通的窘境。
    在J2EE架構(gòu)下,開發(fā)人員可依循規(guī)范基礎(chǔ),進(jìn)而開發(fā)企業(yè)級(jí)應(yīng)用;而不同J2EE供貨商,同會(huì)支持不同J2EE版本內(nèi)所擬定的標(biāo)準(zhǔn),以確保不同J2EE平臺(tái)與產(chǎn)品之間的兼容性。換言之,植基J2EE架構(gòu)的應(yīng)用系統(tǒng),基本上可部署在不同的應(yīng)用服務(wù)器之上,無(wú)需或者只須要進(jìn)行少量的代碼修改,即能大幅提高應(yīng)用系統(tǒng)的可移植性(Portability)。
    J2EE主由升陽(yáng)與IBM等廠商協(xié)同業(yè)界共同擬定而成的技術(shù)規(guī)范,以企業(yè)與企業(yè)之間的運(yùn)算為導(dǎo)向的JAVA開發(fā)環(huán)境。J2EE架構(gòu)定義各類不同組件,如Web Component、EJB Component…等,而各類組件可以再用(reuse),讓已開發(fā)完成的組件,或者是經(jīng)由市面采購(gòu)而得的組件,均能進(jìn)一步組裝成不同的系統(tǒng)。
    對(duì)于開發(fā)人員而言,只需要專注于各種應(yīng)用系統(tǒng)的商業(yè)邏輯與架構(gòu)設(shè)計(jì),至于底層繁瑣的程序撰寫工作,可搭配不同的開發(fā)平臺(tái),以讓應(yīng)用系統(tǒng)的開發(fā)與部署效率大幅提升。
    J2EE的核心規(guī)范是 Enterprise Java Beans(EJBs)。EJB依照特性的不同,目前共分為三種,分別是Session Bean、Entity Bean,以及 Message Driven Bean 。其中 Session Bean 與Entity Bean 算是EJB的始祖,這兩種EJB規(guī)格在EJB 1.x版本推出時(shí)就已經(jīng)存在,而Message Driven Bean則是出現(xiàn)在EJB 2.0的規(guī)格之中。
    目前業(yè)界許多程序設(shè)計(jì)師,或者是網(wǎng)頁(yè)設(shè)計(jì)人員,多利用JSP/Servlet的便利性,進(jìn)而在J2EE服務(wù)器之上開發(fā)相關(guān)的應(yīng)用,或是整合公司內(nèi)部的各種資源。
    Java 2平臺(tái)依照應(yīng)用領(lǐng)域的不同,共分為三大版本,分別是J2EE、標(biāo)準(zhǔn)版本J2SE(Java 2 Platform, Standard Edition)、微型版本J2ME(Java 2 Platform, Micro Edition),以及Java Card等。
    從整體上講,J2EE是使用Java技術(shù)開發(fā)企業(yè)級(jí)應(yīng)用的一種事實(shí)上的工業(yè)標(biāo)準(zhǔn)(Sun公司出于其自身利益的考慮,至今沒有將Java及其相關(guān)技術(shù)納入標(biāo)準(zhǔn)化組織的體系),它是Java技術(shù)不斷適應(yīng)和促進(jìn)企業(yè)級(jí)應(yīng)用過程中的產(chǎn)物。Sun推出J2EE的目的是為了克服傳統(tǒng)Client/Server模式的弊病,迎合Browser/Server架構(gòu)的潮流,為應(yīng)用Java技術(shù)開發(fā)服務(wù)器端應(yīng)用提供一個(gè)平臺(tái)獨(dú)立的、可移植的、多用戶的、安全的和基于標(biāo)準(zhǔn)的企業(yè)級(jí)平臺(tái),從而簡(jiǎn)化企業(yè)應(yīng)用的開發(fā)、管理和部署。J2EE是一個(gè)標(biāo)準(zhǔn),而不是一個(gè)現(xiàn)成的產(chǎn)品。各個(gè)平臺(tái)開發(fā)商按照J(rèn)2EE規(guī)范分別開發(fā)了不同的J2EE應(yīng)用服務(wù)器,J2EE應(yīng)用服務(wù)器是J2EE企業(yè)級(jí)應(yīng)用的部署平臺(tái)。由于它們都遵循了J2EE規(guī)范,因此,使用J2EE技術(shù)開發(fā)的企業(yè)級(jí)應(yīng)用可以部署在各種J2EE應(yīng)用服務(wù)器上。
    為了推廣并規(guī)范化使用J2EE架構(gòu)企業(yè)級(jí)應(yīng)用的體系架構(gòu),Sun同時(shí)給出了一個(gè)建議性的J2EE應(yīng)用設(shè)計(jì)模型:J2EE Blueprints。J2EE Blueprints提供了實(shí)施J2EE企業(yè)級(jí)應(yīng)用的體系架構(gòu)、設(shè)計(jì)模式和相關(guān)的代碼,通過應(yīng)用J2EE Blueprints所描述的體系模型,能夠部分簡(jiǎn)化架構(gòu)企業(yè)級(jí)應(yīng)用這項(xiàng)復(fù)雜的工作。J2EE Blueprints是開發(fā)人員設(shè)計(jì)和優(yōu)化J2EE組件的基本原則,同時(shí)為圍繞開發(fā)工作進(jìn)行職能分工給出了指導(dǎo)性策略,以幫助應(yīng)用開發(fā)設(shè)計(jì)人員合理地分配技術(shù)資源。
    J2EE組成了一個(gè)完整企業(yè)級(jí)應(yīng)用的不同部分納入不同的容器(Container),每個(gè)容器中都包含若干組件(這些組件是需要部署在相應(yīng)容器中的),同時(shí)各種組件都能使用各種J2EE Service/API。J2EE容器包括:
    ◆ Web容器 服務(wù)器端容器,包括兩種組件JSP和Servlet,JSP和Servlet都是Web服務(wù)器的功能擴(kuò)展,接受Web請(qǐng)求,返回動(dòng)態(tài)的Web頁(yè)面。Web容器中的組件可使用EJB容器中的組件完成復(fù)雜的商務(wù)邏輯。
    ◆ EJB容器 服務(wù)器端容器,包含的組件為EJB(Enterprise JavaBeans),它是J2EE的核心之一,主要用于服務(wù)器端的商業(yè)邏輯的實(shí)現(xiàn)。EJB規(guī)范定義了一個(gè)開發(fā)和部署分布式商業(yè)邏輯的框架,以簡(jiǎn)化企業(yè)級(jí)應(yīng)用的開發(fā),使其較容易地具備可伸縮性、可移植性、分布式事務(wù)處理、多用戶和安全性等。
    ◆ Applet容器 客戶端容器,包含的組件為Applet。Applet是嵌在瀏覽器中的一種輕量級(jí)客戶端,一般而言,僅當(dāng)使用Web頁(yè)面無(wú)法充分地表現(xiàn)數(shù)據(jù)或應(yīng)用界面的時(shí)候,才使用它。Applet是一種替代Web頁(yè)面的手段,我們僅能夠使用J2SE開發(fā)Applet,Applet無(wú)法使用J2EE的各種Service和API,這是為了安全性的考慮。
    ◆ Application Client容器 客戶端容器,包含的組件為Application Client。Application Client相對(duì)Applet而言是一種較重量級(jí)的客戶端,它能夠使用J2EE的大多數(shù)Service和API。
    通過這四個(gè)容器,J2EE能夠靈活地實(shí)現(xiàn)前面描述的企業(yè)級(jí)應(yīng)用的架構(gòu)。
    在View部分,J2EE提供了三種手段:Web容器中的JSP(或Servlet)、Applet和Application Client,分別能夠?qū)崿F(xiàn)面向?yàn)g覽器的數(shù)據(jù)表現(xiàn)和面向桌面應(yīng)用的數(shù)據(jù)表現(xiàn)。Web容器中的Servlet是實(shí)現(xiàn)Controller部分業(yè)務(wù)流程控制的主要手段;而EJB則主要針對(duì)Model部分的業(yè)務(wù)邏輯實(shí)現(xiàn)。至于與各種企業(yè)資源和企業(yè)級(jí)應(yīng)用相連接,則是依靠J2EE的各種服務(wù)和API。
    在J2EE的各種服務(wù)和API中,JDBC和JCA用于企業(yè)資源(各種企業(yè)信息系統(tǒng)和數(shù)據(jù)庫(kù)等)的連接,JAX-RPC、JAXR和SAAJ則是實(shí)現(xiàn)Web Services和Web Services連接的基本支持。
    J2EE的各種組件
    我們就J2EE的各種組件、服務(wù)和API,進(jìn)行更加詳細(xì)的闡述,看看在開發(fā)不同類型的企業(yè)級(jí)應(yīng)用時(shí),根據(jù)各自需求和目標(biāo)的不同,應(yīng)當(dāng)如何靈活使用并組合不同的組件和服務(wù)。
    · Servlet
    Servlet是Java平臺(tái)上的CGI技術(shù)。Servlet在服務(wù)器端運(yùn)行,動(dòng)態(tài)地生成Web頁(yè)面。與傳統(tǒng)的CGI和許多其它類似CGI的技術(shù)相比,Java Servlet具有更高的效率并更容易使用。對(duì)于Servlet,重復(fù)的請(qǐng)求不會(huì)導(dǎo)致同一程序的多次轉(zhuǎn)載,它是依靠線程的方式來(lái)支持并發(fā)訪問的。
    · JSP
    JSP(Java Server Page)是一種實(shí)現(xiàn)普通靜態(tài)HTML和動(dòng)態(tài)頁(yè)面輸出混合編碼的技術(shù)。從這一點(diǎn)來(lái)看,非常類似Microsoft ASP、PHP等技術(shù)。借助形式上的內(nèi)容和外觀表現(xiàn)的分離,Web頁(yè)面制作的任務(wù)可以比較方便地劃分給頁(yè)面設(shè)計(jì)人員和程序員,并方便地通過JSP來(lái)合成。在運(yùn)行時(shí)態(tài),JSP將會(huì)被首先轉(zhuǎn)換成Servlet,并以Servlet的形態(tài)編譯運(yùn)行,因此它的效率和功能與Servlet相比沒有差別,一樣具有很高的效率。
    · EJB
    EJB定義了一組可重用的組件:Enterprise Beans。開發(fā)人員可以利用這些組件,像搭積木一樣建立分布式應(yīng)用。在裝配組件時(shí),所有的Enterprise Beans都需要配置到EJB服務(wù)器(一般的Weblogic、WebSphere等J2EE應(yīng)用服務(wù)器都是EJB服務(wù)器)中。EJB服務(wù)器作為容器和低層平臺(tái)的橋梁管理著EJB容器,并向該容器提供訪問系統(tǒng)服務(wù)的能力。所有的EJB實(shí)例都運(yùn)行在EJB容器中。EJB容器提供了系統(tǒng)級(jí)的服務(wù),控制了EJB的生命周期。EJB容器為它的開發(fā)人員代管了諸如安全性、遠(yuǎn)程連接、生命周期管理及事務(wù)管理等技術(shù)環(huán)節(jié),簡(jiǎn)化了商業(yè)邏輯的開發(fā)。EJB中定義了三種Enterprise Beans:
    ◆ Session Beans
    ◆ Entity Beans
    ◆ Message-driven Beans
    · JDBC
    JDBC(Java Database Connectivity,Java數(shù)據(jù)庫(kù)連接)API是一個(gè)標(biāo)準(zhǔn)SQL(Structured Query Language,結(jié)構(gòu)化查詢語(yǔ)言)數(shù)據(jù)庫(kù)訪問接口,它使數(shù)據(jù)庫(kù)開發(fā)人員能夠用標(biāo)準(zhǔn)Java API編寫數(shù)據(jù)庫(kù)應(yīng)用程序。JDBC API主要用來(lái)連接數(shù)據(jù)庫(kù)和直接調(diào)用SQL命令執(zhí)行各種SQL語(yǔ)句。利用JDBC API可以執(zhí)行一般的SQL語(yǔ)句、動(dòng)態(tài)SQL語(yǔ)句及帶IN和OUT參數(shù)的存儲(chǔ)過程。Java中的JDBC相當(dāng)與Microsoft平臺(tái)中的ODBC(Open Database Connectivity)。
    · JMS
    JMS(Java Message Service,Java消息服務(wù))是一組Java應(yīng)用接口,它提供創(chuàng)建、發(fā)送、接收、讀取消息的服務(wù)。JMS API定義了一組公共的應(yīng)用程序接口和相應(yīng)語(yǔ)法,使得Java應(yīng)用能夠和各種消息中間件進(jìn)行通信,這些消息中間件包括IBM MQ-Series、Microsoft MSMQ及純Java的SonicMQ。通過使用JMS API,開發(fā)人員無(wú)需掌握不同消息產(chǎn)品的使用方法,也可以使用統(tǒng)一的JMS API來(lái)操縱各種消息中間件。通過使用JMS,能夠最大限度地提升消息應(yīng)用的可移植性。 JMS既支持點(diǎn)對(duì)點(diǎn)的消息通信,也支持發(fā)布/訂閱式的消息通信。
    · JNDI
    由于J2EE應(yīng)用程序組件一般分布在不同的機(jī)器上,所以需要一種機(jī)制以便于組件客戶使用者查找和引用組件及資源。在J2EE體系中,使用JNDI(Java Naming and Directory Interface)定位各種對(duì)象,這些對(duì)象包括EJB、數(shù)據(jù)庫(kù)驅(qū)動(dòng)、JDBC數(shù)據(jù)源及消息連接等。JNDI API為應(yīng)用程序提供了一個(gè)統(tǒng)一的接口來(lái)完成標(biāo)準(zhǔn)的目錄操作,如通過對(duì)象屬性來(lái)查找和定位該對(duì)象。由于JNDI是獨(dú)立于目錄協(xié)議的,應(yīng)用還可以使用JNDI訪問各種特定的目錄服務(wù),如LDAP、NDS和DNS等。
    · JTA
    JTA(Java Transaction API)提供了J2EE中處理事務(wù)的標(biāo)準(zhǔn)接口,它支持事務(wù)的開始、回滾和提交。同時(shí)在一般的J2EE平臺(tái)上,總提供一個(gè)JTS(Java Transaction Service)作為標(biāo)準(zhǔn)的事務(wù)處理服務(wù),開發(fā)人員可以使用JTA來(lái)使用JTS。
    · JCA
    JCA(J2EE Connector Architecture)是J2EE體系架構(gòu)的一部分,為開發(fā)人員提供了一套連接各種企業(yè)信息系統(tǒng)(EIS,包括ERP、SCM、CRM等)的體系架構(gòu),對(duì)于EIS開發(fā)商而言,它們只需要開發(fā)一套基于JCA的EIS連接適配器,開發(fā)人員就能夠在任何的J2EE應(yīng)用服務(wù)器中連接并使用它?;贘CA的連接適配器的實(shí)現(xiàn),需要涉及J2EE中的事務(wù)管理、安全管理及連接管理等服務(wù)組件。
    · JMX
    JMX(Java Management Extensions)的前身是JMAPI。JMX致力于解決分布式系統(tǒng)管理的問題。JMX是一種應(yīng)用編程接口、可擴(kuò)展對(duì)象和方法的集合體,可以跨越各種異構(gòu)操作系統(tǒng)平臺(tái)、系統(tǒng)體系結(jié)構(gòu)和網(wǎng)絡(luò)傳輸協(xié)議,開發(fā)無(wú)縫集成的面向系統(tǒng)、網(wǎng)絡(luò)和服務(wù)的管理應(yīng)用。JMX是一個(gè)完整的網(wǎng)絡(luò)管理應(yīng)用程序開發(fā)環(huán)境,它同時(shí)提供了廠商需要收集的完整的特性清單、可生成資源清單表格、圖形化的用戶接口;訪問SNMP的網(wǎng)絡(luò)API;主機(jī)間遠(yuǎn)程過程調(diào)用;數(shù)據(jù)庫(kù)訪問方法等。
    · JAAS
    JAAS(Java Authentication and Authorization Service)實(shí)現(xiàn)了一個(gè)Java版本的標(biāo)準(zhǔn)Pluggable Authentication Module(PAM)的框架。JAAS可用來(lái)進(jìn)行用戶身份的鑒定,從而能夠可靠并安全地確定誰(shuí)在執(zhí)行Java代碼。同時(shí)JAAS還能通過對(duì)用戶進(jìn)行授權(quán),實(shí)現(xiàn)基于用戶的訪問控制。
    · JACC
    JACC(Java Authorization Service Provider Contract for Containers)在J2EE應(yīng)用服務(wù)器和特定的授權(quán)認(rèn)證服務(wù)器之間定義了一個(gè)連接的協(xié)約,以便將各種授權(quán)認(rèn)證服務(wù)器插入到J2EE產(chǎn)品中去。
    · JAX-RPC
    通過使用JAX-RPC(Java API for XML-based RPC),已有的Java類或Java應(yīng)用都能夠被重新包裝,并以Web Services的形式發(fā)布。JAX-RPC提供了將RPC參數(shù)(in/out)編碼和解碼的API,使開發(fā)人員可以方便地使用SOAP消息來(lái)完成RPC調(diào)用。同樣,對(duì)于那些使用EJB(Enterprise JavaBeans)的商業(yè)應(yīng)用而言,同樣可以使用JAX-RPC來(lái)包裝成Web服務(wù),而這個(gè)Web Servoce的WSDL界面是與原先的EJB的方法是對(duì)應(yīng)一致的。JAX-RPC為用戶包裝了Web服務(wù)的部署和實(shí)現(xiàn),對(duì)Web服務(wù)的開發(fā)人員而言,SOAP/WSDL變得透明,這有利于加速Web服務(wù)的開發(fā)周期。
    · JAXR
    JAXR(Java API for XML Registries)提供了與多種類型注冊(cè)服務(wù)進(jìn)行交互的API。JAXR運(yùn)行客戶端訪問與JAXR規(guī)范相兼容的Web Servcices,這里的Web Services即為注冊(cè)服務(wù)。一般來(lái)說(shuō),注冊(cè)服務(wù)總是以Web Services的形式運(yùn)行的。JAXR支持三種注冊(cè)服務(wù)類型:JAXR Pluggable Provider、Registry-specific JAXR Provider、JAXR Bridge Provider(支持UDDI Registry和ebXML Registry/Repository等)。
    · SAAJ
    SAAJ(SOAP with Attachemnts API for Java)是JAX-RPC的一個(gè)增強(qiáng),為進(jìn)行低層次的SOAP消息操縱提供了支持。
    企業(yè)級(jí)應(yīng)用示例
    下面我們通過假設(shè)一個(gè)企業(yè)應(yīng)用的J2EE實(shí)現(xiàn),來(lái)了解各種組件和服務(wù)的應(yīng)用。假設(shè)應(yīng)用對(duì)象是計(jì)算機(jī)產(chǎn)品的生產(chǎn)商/零售商的銷售系統(tǒng),這個(gè)銷售系統(tǒng)能夠通過自己的網(wǎng)站發(fā)布產(chǎn)品信息,同時(shí)也能將產(chǎn)品目錄傳送給計(jì)算機(jī)產(chǎn)品交易市場(chǎng)。銷售系統(tǒng)能夠在線接受訂單(來(lái)自自己的Web網(wǎng)站或者來(lái)自計(jì)算機(jī)產(chǎn)品交易市場(chǎng)),并隨后轉(zhuǎn)入內(nèi)部企業(yè)管理系統(tǒng)進(jìn)行相關(guān)的后續(xù)處理。
    參見圖3,這個(gè)企業(yè)應(yīng)用可以這種方式架構(gòu)。該企業(yè)應(yīng)用的核心是產(chǎn)品目錄管理和產(chǎn)品定購(gòu)管理這兩個(gè)業(yè)務(wù)邏輯,使用EJB加以實(shí)現(xiàn),并部署在EJB容器中。由于產(chǎn)品目錄和定購(gòu)信息都需要持久化,因此使用JDBC連接數(shù)據(jù)庫(kù),并使用JTA來(lái)完成數(shù)據(jù)庫(kù)存取事務(wù)。
    圖3 J2EE應(yīng)用示例
    然后使用JSP/Servlet來(lái)實(shí)現(xiàn)應(yīng)用的Web表現(xiàn):在線產(chǎn)品目錄瀏覽和在線定購(gòu)。為了將產(chǎn)品目錄發(fā)送給特定的交易市場(chǎng),使用JMS實(shí)現(xiàn)異步的基于消息的產(chǎn)品目錄傳輸。為了使得更多的其它外部交易市場(chǎng)能夠集成產(chǎn)品目錄和定購(gòu)業(yè)務(wù),需要使用Web Services技術(shù)包裝商業(yè)邏輯的實(shí)現(xiàn)。由于產(chǎn)品定購(gòu)管理需要由公司內(nèi)部雇員進(jìn)行處理,因此需要集成公司內(nèi)部的用戶系統(tǒng)和訪問控制服務(wù)以方便雇員的使用,使用JACC集成內(nèi)部的訪問控制服務(wù),使用JNDI集成內(nèi)部的用戶目錄,并使用JAAS進(jìn)行訪問控制。由于產(chǎn)品訂購(gòu)事務(wù)會(huì)觸發(fā)后續(xù)的企業(yè)ERP系統(tǒng)的相關(guān)操作(包括倉(cāng)儲(chǔ)、財(cái)務(wù)、生產(chǎn)等),需要使用JCA連接企業(yè)ERP。
    最后為了將這個(gè)應(yīng)用納入到企業(yè)整體的系統(tǒng)管理體系中去,使用Application Client架構(gòu)了一個(gè)管理客戶端(與其它企業(yè)應(yīng)用管理應(yīng)用部署在一臺(tái)機(jī)器上),并通過JMX管理這個(gè)企業(yè)應(yīng)用。

    posted @ 2008-06-30 10:49 sunny spring 閱讀(102) | 評(píng)論 (0)編輯 收藏

    ping命令的作用

    Ping是潛水艇人員的專用術(shù)語(yǔ),表示回應(yīng)的聲納脈沖,在網(wǎng)絡(luò)中Ping 是一個(gè)十分好用的TCP/IP工具。它主要的功能是用來(lái)檢測(cè)網(wǎng)絡(luò)的連通情況和分析網(wǎng)絡(luò)速度。

    Ping有好的善的一面也有惡的一面。先說(shuō)一下善的一面吧。上面已經(jīng)說(shuō)過Ping的用途就是用來(lái)檢測(cè)網(wǎng)絡(luò)的連同情況和分析網(wǎng)絡(luò)速度,但它是通過什么來(lái)顯示連通呢?這首先要了解Ping的一些參數(shù)和返回信息。

    以下是PING的一些參數(shù):

    ping [-t] [-a] [-n count] [-l length] [-f] [-i ttl] [-v tos] [-r count] [-s count] [-j computer-list] | [-k computer-list] [-w timeout] destination-list

    -t
    Ping 指定的計(jì)算機(jī)直到中斷。

    -a
    將地址解析為計(jì)算機(jī)名。

    -n count
    發(fā)送 count 指定的 ECHO 數(shù)據(jù)包數(shù)。默認(rèn)值為 4。

    -l length
    發(fā)送包含由 length 指定的數(shù)據(jù)量的 ECHO 數(shù)據(jù)包。默認(rèn)為 32 字節(jié);最大值是65,527。

    -f
    在數(shù)據(jù)包中發(fā)送"不要分段"標(biāo)志。數(shù)據(jù)包就不會(huì)被路由上的網(wǎng)關(guān)分段。

    -i ttl
    將"生存時(shí)間"字段設(shè)置為 ttl 指定的值。

    -v tos
    將"服務(wù)類型"字段設(shè)置為 tos 指定的值。

    -r count
    在"記錄路由"字段中記錄傳出和返回?cái)?shù)據(jù)包的路由。count 可以指定最少 1 臺(tái),最多 9 臺(tái)計(jì)算機(jī)。

    -s count
    指定 count 指定的躍點(diǎn)數(shù)的時(shí)間戳。

    -j computer-list
    利用 computer-list 指定的計(jì)算機(jī)列表路由數(shù)據(jù)包。連續(xù)計(jì)算機(jī)可以被中間網(wǎng)關(guān)分隔(路由稀疏源)IP 允許的最大數(shù)量為 9。

    -k computer-list
    利用 computer-list 指定的計(jì)算機(jī)列表路由數(shù)據(jù)包。連續(xù)計(jì)算機(jī)不能被中間網(wǎng)關(guān)分隔(路由嚴(yán)格源)IP 允許的最大數(shù)量為 9。

    -w timeout
    指定超時(shí)間隔,單位為毫秒。

    destination-list
    指定要 ping 的遠(yuǎn)程計(jì)算機(jī)。

    Ping的返回信息有"Request Timed Out"、"Destination Net Unreachable"和"Bad IP address"還有"Source quench received"。

    "Request Timed Out"這個(gè)信息表示對(duì)方主機(jī)可以到達(dá)到TIME OUT,這種情況通常是為對(duì)方拒絕接收你發(fā)給它的數(shù)據(jù)包造成數(shù)據(jù)包丟失。大多數(shù)的原因可能是對(duì)方裝有防火墻或已下線。

    "Destination Net Unreachable"這個(gè)信息表示對(duì)方主機(jī)不存在或者沒有跟對(duì)方建立連接。這里要說(shuō)明一下"destination host unreachable"和"time out"的區(qū)別,如果所經(jīng)過的路由器的路由表中具有到達(dá)目標(biāo)的路由,而目標(biāo)因?yàn)槠渌虿豢傻竭_(dá),這時(shí)候會(huì)出現(xiàn)"time out",如果路由表中連到達(dá)目標(biāo)的路由都沒有,那就會(huì)出現(xiàn)"destination host unreachable"。

    "Bad IP address" 這個(gè)信息表示你可能沒有連接到DNS服務(wù)器所以無(wú)法解析這個(gè)IP地址,也可能是IP地址不存在。

    "Source quench received"信息比較特殊,它出現(xiàn)的機(jī)率很少。它表示對(duì)方或中途的服務(wù)器繁忙無(wú)法回應(yīng)。

    怎樣使用Ping這命令來(lái)測(cè)試網(wǎng)絡(luò)連通呢?

    連通問題是由許多原因引起的,如本地配置錯(cuò)誤、遠(yuǎn)程主機(jī)協(xié)議失效等,當(dāng)然還包括設(shè)備等造成的故障。

    首先我們講一下使用Ping命令的步驟。

    使用Ping檢查連通性有五個(gè)步驟:

    1. 使用ipconfig /all觀察本地網(wǎng)絡(luò)設(shè)置是否正確;
    2. Ping 127.0.0.1,127.0.0.1 回送地址Ping回送地址是為了檢查本地的TCP/IP協(xié)議有沒有設(shè)置好;
    3. Ping本機(jī)IP地址,這樣是為了檢查本機(jī)的IP地址是否設(shè)置有誤;
    4. Ping本網(wǎng)網(wǎng)關(guān)或本網(wǎng)IP地址,這樣的是為了檢查硬件設(shè)備是否有問題,也可以檢查本機(jī)與本地網(wǎng)絡(luò)連接是否正常;(在非局域網(wǎng)中這一步驟可以忽略)
    5. Ping遠(yuǎn)程IP地址,這主要是檢查本網(wǎng)或本機(jī)與外部的連接是否正常。

    在檢查網(wǎng)絡(luò)連通的過程中可能出現(xiàn)一些錯(cuò)誤,這些錯(cuò)誤總的來(lái)說(shuō)分為兩種最常見。

    1. Request Timed Out
    "request time out"這提示除了在《PING(一)》提到的對(duì)方可能裝有防火墻或已關(guān)機(jī)以外,還有就是本機(jī)的IP不正確和網(wǎng)關(guān)設(shè)置錯(cuò)誤。
    ①、IP不正確:
    IP不正確主要是IP地址設(shè)置錯(cuò)誤或IP地址沖突,這可以利用ipconfig /all這命令來(lái)檢查。在WIN2000下IP沖突的情況很少發(fā)生,因?yàn)橄到y(tǒng)會(huì)自動(dòng)檢測(cè)在網(wǎng)絡(luò)中是否有相同的IP地址并提醒你是否設(shè)置正確。在NT中不但會(huì)出現(xiàn)"request time out"這提示而且會(huì)出現(xiàn)"Hardware error"這提示信息比較特殊不要給它的提示所迷惑。
    ②、網(wǎng)關(guān)設(shè)置錯(cuò)誤:這個(gè)錯(cuò)誤可能會(huì)在第四個(gè)步驟出現(xiàn)。網(wǎng)關(guān)設(shè)置錯(cuò)誤主要是網(wǎng)關(guān)地址設(shè)置不正確或網(wǎng)關(guān)沒有幫你轉(zhuǎn)發(fā)數(shù)據(jù),還有就是可能遠(yuǎn)程網(wǎng)關(guān)失效。這里主要是在你Ping外部網(wǎng)絡(luò)地址時(shí)出錯(cuò)。錯(cuò)誤表現(xiàn)為無(wú)法Ping外部主機(jī)返回信息"Request timeout"。

    2. Destination Host Unreachable
    當(dāng)你在開始PING網(wǎng)絡(luò)計(jì)算機(jī)時(shí)如果網(wǎng)絡(luò)設(shè)備出錯(cuò)它返回信息會(huì)提示"destination host unreachable"。如果局域網(wǎng)中使用DHCP分配IP時(shí),而碰巧DHCP失效,這時(shí)使用 PING命令就會(huì)產(chǎn)生此錯(cuò)誤。因?yàn)樵贒HCP失效時(shí)客戶機(jī)無(wú)法分配到IP系統(tǒng)只有自設(shè)IP,它往往會(huì)設(shè)為不同子網(wǎng)的IP。所以會(huì)出現(xiàn)"Destination Host Unreachable"。另外子網(wǎng)掩碼設(shè)置錯(cuò)誤也會(huì)出現(xiàn)這錯(cuò)誤。
    還有一個(gè)比較特殊就是路由返回錯(cuò)誤信息,它一般都會(huì)在"Destination Host Unreachable"前加上IP地址說(shuō)明哪個(gè)路由不能到達(dá)目標(biāo)主機(jī)。這說(shuō)明你的機(jī)器與外部網(wǎng)絡(luò)連接沒有問題,但與某臺(tái)主機(jī)連接存在問題。

    舉個(gè)例子吧。
    我管理的網(wǎng)絡(luò)有19臺(tái)機(jī),由一臺(tái)100M集線器連接服務(wù)器,使用DHCP動(dòng)態(tài)分配IP地址。
    有一次有位同事匆忙地告訴我"我的OUTLOOK打不開了",我到他機(jī)器檢查,首先我檢查了本地網(wǎng)絡(luò)設(shè)置,我用ipconfig /all看IP分配情況一切正常。接著我就開始PING網(wǎng)絡(luò)中的其中一臺(tái)機(jī)器,第一次PING結(jié)果很正常,但OUTLOOK還是無(wú)法使用其它網(wǎng)絡(luò)軟件和Copy網(wǎng)絡(luò)文件都可以使用但網(wǎng)絡(luò)速度很慢,第二次PING我用了一個(gè)參數(shù)-t(-t可以不中斷地PING對(duì)方,當(dāng)時(shí)我想PING一次可能發(fā)現(xiàn)不了問題)發(fā)現(xiàn)有time=30ms和request time out,從服務(wù)器PING這臺(tái)機(jī)就更有趣,request time out比正常數(shù)據(jù)還多,在局域中竟然有time=30ms和request time out太不正常了。開始我認(rèn)為是網(wǎng)卡的問題但換網(wǎng)卡后故障依舊,重做網(wǎng)線還是不能解決問題,這故障真有趣!最后我沒辦法了把它插在集線器端口上的另一端的網(wǎng)線換到另一個(gè)端口,哈!故障解決了。原來(lái)是集線器端口壞了。

    如何用Ping命令來(lái)判斷一條鏈路的速度?

    Ping這個(gè)命令除了可以檢查網(wǎng)絡(luò)的連通和檢測(cè)故障以外,還有一個(gè)比較有趣的用途,那就是可以利用它的一些返回?cái)?shù)據(jù),來(lái)估算你跟某臺(tái)主機(jī)之間的速度是多少字節(jié)每秒

    我們先來(lái)看看它有那些返回?cái)?shù)據(jù)。

    Pinging 202.105.136.105 with 32 bytes of data:

    Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
    Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
    Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
    Reply from 202.105.136.105: bytes=32 time=601ms TTL=114

    Ping statistics for 202.105.136.105:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
    Approximate round trip times in milli-seconds:
    Minimum = 590ms, Maximum = 601ms, Average = 593ms

    在例子中"bytes=32"表示ICMP報(bào)文中有32個(gè)字節(jié)的測(cè)試數(shù)據(jù)(這是估算速度的關(guān)鍵數(shù)據(jù)),"time=590ms"是往返時(shí)間。

    怎樣估算鏈路的速度呢?舉個(gè)例子吧。我們把A和B之間設(shè)置為PPP鏈路。

    從上面的PING例子可以注意到,默認(rèn)情況下發(fā)送的ICMP報(bào)文有32個(gè)字節(jié)。除了這32個(gè)字節(jié)外再加上20個(gè)字節(jié)的IP首部和8個(gè)字節(jié)的ICMP首部,整個(gè)IP數(shù)據(jù)報(bào)文的總長(zhǎng)度就是60個(gè)字節(jié)(因?yàn)镮P和ICMP是Ping命令的主要使用協(xié)議,所以整個(gè)數(shù)據(jù)報(bào)文要加上它們)。另外在使用Ping命令時(shí)還使用了另一個(gè)協(xié)議進(jìn)行傳輸,那就是PPP協(xié)議(點(diǎn)對(duì)點(diǎn)協(xié)議),所以在數(shù)據(jù)的開始和結(jié)尾再加上8個(gè)字節(jié)。在傳輸過程中,由于每個(gè)字節(jié)含有8bit數(shù)據(jù)、1bit起始位和1bit結(jié)束位,因此傳輸速率是每個(gè)字節(jié)2.98ms。由此我們可以估計(jì)需要405ms。即68*2.98*2(乘2是因?yàn)槲覀冞€要計(jì)算它的往返時(shí)間)。

    我們來(lái)測(cè)試一下33600 b/s的鏈路:

    Pinging 202.105.36.125 with 32 bytes of data:

    Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
    Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
    Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
    Reply from 202.105.36.125: bytes=32 time=421ms TTL=114

    Ping statistics for 202.105.36.125:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
    Approximate round trip times in milli-seconds:
    Minimum = 415ms, Maximum = 421ms, Average = 417ms

    看是不是差不多啊。^_^

    這里大家可能要注意到,這估算值跟實(shí)際值是有誤差的,為什么呢?因?yàn)槲覀儸F(xiàn)在估算的是一個(gè)理論值,還有一些東西我們沒有考慮。比如在網(wǎng)絡(luò)中的其它干擾,這些干擾主要來(lái)之別的計(jì)算機(jī)。因?yàn)樵谀銣y(cè)試時(shí)不可能全部計(jì)算機(jī)停止使用網(wǎng)絡(luò)給你做測(cè)試,這是不實(shí)際的。另外就是傳輸設(shè)備,因?yàn)橛心承┰O(shè)備如MODEM它在傳輸時(shí)會(huì)把數(shù)據(jù)壓縮后再發(fā)送,這大大減少了傳輸時(shí)間。這些東西產(chǎn)生的誤差我們是不能避免的,但其數(shù)值大約在5%以內(nèi)我們都可以接受(利用MODEM傳輸例外),但是可以減少誤差的產(chǎn)生。比如把MODEM的壓縮功能關(guān)閉和在網(wǎng)絡(luò)沒有那么繁忙時(shí)進(jìn)行測(cè)試。有時(shí)候誤差是無(wú)須消除的。因?yàn)槲覀冃枰@些誤差跟所求得的理論值進(jìn)行比較分析,從而找出網(wǎng)絡(luò)的缺陷而進(jìn)行優(yōu)化。這時(shí)測(cè)試網(wǎng)絡(luò)的所有數(shù)據(jù)包括誤差都會(huì)成為我們優(yōu)化的依據(jù)。

    還要注意,這種算法在局域網(wǎng)并不適用,因?yàn)樵诰钟蚓W(wǎng)中速度非常的快幾乎少于1ms,而Ping的最小時(shí)間分辨率是1ms,所以根本無(wú)法用Ping命令來(lái)檢測(cè)速度。如果想測(cè)試速度那就要用專門儀器來(lái)檢測(cè)。

    總的來(lái)說(shuō),Ping命令是一個(gè)在故障檢查方面很有用而且很便利的工具,你不應(yīng)該忽視它的存在。

    posted @ 2008-06-30 10:47 sunny spring 閱讀(162) | 評(píng)論 (0)編輯 收藏

    DOS命令大全

    MD——建立子目錄
    1.功能:創(chuàng)建新的子目錄
    2.類型:內(nèi)部命令
    3.格式:MD[盤符:][路徑名]〈子目錄名〉
    4.使用說(shuō)明:
    (1)“盤符”:指定要建立子目錄的磁盤驅(qū)動(dòng)器字母,若省略,則為當(dāng)前驅(qū)動(dòng)器;
    (2)“路徑名”:要建立的子目錄的上級(jí)目錄名,若缺省則建在當(dāng)前目錄下。
    例:(1)在C盤的根目錄下創(chuàng)建名為FOX的子目錄;(2)在FOX子目錄下再創(chuàng)建USER子目錄。
    C:、>MD FOX (在當(dāng)前驅(qū)動(dòng)器C盤下創(chuàng)建子目錄FOX)
    C:、>MD FOX 、USER (在FOX 子目錄下再創(chuàng)建USER子目錄)
    (二)CD——改變當(dāng)前目錄
    1.功能:顯示當(dāng)前目錄
    2.類型:內(nèi)部命令
    3.格式:CD[盤符:][路徑名][子目錄名]
    4.使用說(shuō)明:
    (1)如果省略路徑和子目錄名則顯示當(dāng)前目錄;
    (2)如采用“CD、”格式,則退回到根目錄;
    (3)如采用“CD.。”格式則退回到上一級(jí)目錄。
    例:(1)進(jìn)入到USER子目錄;(2)從USER子目錄退回到子目錄;(3)返回到根目錄。
    C:、>CD FOX 、USER(進(jìn)入FOX子目錄下的USER子目錄)
    C:、FOX、USER>CD.。 (退回上一級(jí)根目錄)
    C:、FOX>CD、 (返回到根目錄)
    C:、>
    (三)RD——?jiǎng)h除子目錄命令
    1.功能:從指定的磁盤刪除了目錄。
    2.類型:內(nèi)部命令
    3.格式:RD[盤符:][路徑名][子目錄名]
    4.使用說(shuō)明:
    (1)子目錄在刪除前必須是空的,也就是說(shuō)需要先進(jìn)入該子目錄,使用DEL(刪除文件的命令)將其子目錄下的文件刪空,然后再退回到上一級(jí)目錄,用RD命令刪除該了目錄本身;
    (2)不能刪除根目錄和當(dāng)前目錄。
    例:要求把C盤FOX子目錄下的USER子目錄刪除,操作如下:
    第一步:先將USER子目錄下的文件刪空;
    C、>DEL C:、FOX、USER、*。*
    第二步,刪除USER子目錄。
    C、>RD C:、FOX、USER
    (四)DIR——顯示磁盤目錄命令
    1.功能:顯示磁盤目錄的內(nèi)容。
    2.類型:內(nèi)部命令
    3.格式:DIR [盤符][路徑][/P][/W]
    4.
    使用說(shuō)明:/P的使用;當(dāng)欲查看的目錄太多,無(wú)法在一屏顯示完屏幕會(huì)一直往上卷,不容易看清,加上/P參數(shù)后,屏幕上會(huì)分面一次顯示23行的文件信息,然后暫停,并提示;Press
    any key to continue
    /W的使用:加上/W只顯示文件名,至于文件大小及建立的日期和時(shí)間則都省略。加上參數(shù)后,每行可以顯示五個(gè)文件名。
    PATH——路徑設(shè)置命令
    1.功能:設(shè)備可執(zhí)行文件的搜索路徑,只對(duì)文件有效。
    2.類型:內(nèi)部命令
    3.格式:PATH[盤符1]目錄[路徑名1]{[;盤符2:],〈目錄路徑名2〉…}
    4.使用說(shuō)明:
    (1)當(dāng)運(yùn)行一個(gè)可執(zhí)行文件時(shí),DOS會(huì)先在當(dāng)前目錄中搜索該文件,若找到則運(yùn)行之;若找不到該文件,則根據(jù)PATH命令所設(shè)置的路徑,順序逐條地到目錄中搜索該文件;
    (2)PATH命令中的路徑,若有兩條以上,各路徑之間以一個(gè)分號(hào)“;”隔開;
    (3)PATH命令有三種使用方法:
    PATH[盤符1:][路徑1][盤符2:][路徑2]…(設(shè)定可執(zhí)行文件的搜索路徑) PATH:(取消所有路徑)
    PATH:(顯示目前所設(shè)的路徑)
    (六)TREE——顯示磁盤目錄結(jié)構(gòu)命令
    1.功能:顯示指定驅(qū)動(dòng)器上所有目錄路徑和這些目錄下的所有文件名。
    2.類型:外部命令
    3.格式:TREE[盤符:][/F][》PRN]
    4.使用說(shuō)明:
    (1)使用/F參數(shù)時(shí)顯示所有目錄及目錄下的所有文件,省略時(shí),只顯示目錄,不顯示目錄下的文件;
    (2)選用>PRN參數(shù)時(shí),則把所列目錄及目錄中的文件名打印輸出。
    (七)DELTREE——?jiǎng)h除整個(gè)目錄命令
    1.功能:將整個(gè)目錄及其下屬子目錄和文件刪除。
    2.類型:外部命令
    3.格式:DELTREE[盤符:]〈路徑名〉
    4.使用說(shuō)明:該命令可以一步就將目錄及其下的所有文件、子目錄、更下層的子目錄一并刪除,而且不管文件的屬性為隱藏、系統(tǒng)或只讀,只要該文件位于刪除的目錄之下,DELTREE都一視同仁,照刪不誤。使用時(shí)務(wù)必小心!!!
    五、磁盤操作類命令
    (一)formAT——磁盤格式化命令
    1.功能:對(duì)磁盤進(jìn)行格式化,劃分磁道和扇區(qū);同時(shí)檢查出整個(gè)磁盤上有無(wú)帶缺陷的磁道,對(duì)壞道加注標(biāo)記;建立目錄區(qū)和文件分配表,使磁盤作好接收DOS的準(zhǔn)備。
    2.類型:外部命令
    3.格式:formAT〈盤符:〉[/S][/4][/Q]
    4.使用說(shuō)明:
    (1)命令后的盤符不可缺省,若對(duì)硬盤進(jìn)行格式化,則會(huì)如下列提示:WARNING:ALL DATA ON NON
    ——REMOVABLE DISK
    DRIVE C:WILL BE LOST !
    Proceed with format (Y/N)?
    (警告:所有數(shù)據(jù)在C盤上,將會(huì)丟失,確實(shí)要繼續(xù)格式化嗎?)
    (2)若是對(duì)軟盤進(jìn)行格式化,則會(huì)如下提示:Insert mew diskette for drive A;
    and press ENTER when ready…
    (在A驅(qū)中插入新盤,準(zhǔn)備好后按回車鍵)。
    (3)選用[/S]參數(shù),將把DOS系統(tǒng)文件IO.SYS
    、MSDOS.SYS及COMMAND.COM復(fù)制到磁盤上,使該磁盤可以做為DOS啟動(dòng)盤。若不選用/S參數(shù),則格式化后的磙盤只能讀寫信息,而不能做為啟動(dòng)盤;
    (4)選用[/4]參數(shù),在1.2MB的高密度軟驅(qū)中格式化360KB的低密度盤;
    (5)選用[/Q]參數(shù),快速格式化,這個(gè)參數(shù)并不會(huì)重新劃分磁盤的磁道貌岸然和扇區(qū),只能將磁盤根目錄、文件分配表以及引導(dǎo)扇區(qū)清成空白,因此,格式化的速度較快。
    (6)選用[/U]參數(shù),表示無(wú)條件格式化,即破壞原來(lái)磁盤上所有數(shù)據(jù)。不加/U,則為安全格式化,這時(shí)先建立一個(gè)鏡象文件保存原來(lái)的FAT表和根目錄,必要時(shí)可用UNFORRMAT恢復(fù)原來(lái)的數(shù)據(jù)。
    (二)UNformAT恢復(fù)格式化命令
    1.功能:對(duì)進(jìn)行過格式化誤操作丟失數(shù)據(jù)的磁盤進(jìn)行恢復(fù)。
    2.類型:外部命令
    3.格式:UNformAT〈盤符〉[/L][/U][/P][/TEST]
    4.使用說(shuō)明:用于將被“非破壞性”格式化的磁盤恢復(fù)。根目錄下被刪除的文件或子目錄及磁盤的系統(tǒng)扇區(qū)(包括FAT、根目錄、BOOT扇區(qū)及硬盤分區(qū)表)受損時(shí),也可以用UNformAT來(lái)?yè)尵取?
    (1)選用/L參數(shù)列出找到的子目錄名稱、文件名稱、大孝日期等信息,但不會(huì)真的做formAT工作。
    (2)選用/P參數(shù)將顯示于屏幕的報(bào)告(包含/L參數(shù)所產(chǎn)生的信息)同時(shí)也送到打印機(jī)。運(yùn)行時(shí)屏幕會(huì)顯示:“Print out will
    be sent to LPT1”
    (3)選用/TEST參數(shù)只做模擬試驗(yàn)(TEST)不做真正的寫入動(dòng)作。使用此參數(shù)屏幕會(huì)顯示:“Simulation only”
    (4)選用/U參數(shù)不使用MIRROR映像文件的數(shù)據(jù),直接根據(jù)磁盤現(xiàn)狀進(jìn)行UNformAT。
    (5)選用/PSRTN;修復(fù)硬盤分區(qū)表。
    若在盤符之后加上/P、/L、/TEST之一,都相當(dāng)于使用了/U參數(shù),UNformAT會(huì)“假設(shè)”此時(shí)磁盤沒有MIRROR映像文件。
    注意:UNformAT對(duì)于剛formAT的磁盤,可以完全恢復(fù),但formAT后若做了其它數(shù)據(jù)的寫入,則UNformAT就不能完整的救回?cái)?shù)據(jù)了。UNformAT并非是萬(wàn)能的,由于使用UNformAT會(huì)重建FAT與根目錄,所以它也具有較高的危險(xiǎn)性,操作不當(dāng)可能會(huì)擴(kuò)大損失,如果僅誤刪了幾個(gè)文件或子目錄,只需要利用UNDELETE就夠了。
    三) CHKDSK——檢查磁盤當(dāng)前狀態(tài)命令
    1.功能:顯示磁盤狀態(tài)、內(nèi)存狀態(tài)和指定路徑下指定文件的不連續(xù)數(shù)目。
    2.類型:外部命令
    3.格式:CHKDSK [盤符:][路徑][文件名][/F][/V]
    4.使用說(shuō)明:
    (1)選用[文件名]參數(shù),則顯示該文件占用磁盤的情況;
    (2)選[/F]參數(shù),糾正在指定磁盤上發(fā)現(xiàn)的邏輯錯(cuò)誤;
    (3)選用[/V]參數(shù),顯示盤上的所有文件和路徑。
    (四)DISKCOPY——整盤復(fù)制命令
    1.功能:復(fù)制格式和內(nèi)容完全相同的軟盤。
    2.類型:外部命令
    3.格式:DISKCOPY[盤符1:][盤符2:]
    4.使用說(shuō)明:
    (1)如果目標(biāo)軟盤沒有格式化,則復(fù)制時(shí)系統(tǒng)自動(dòng)選進(jìn)行格式化。
    (2)如果目標(biāo)軟盤上原有文件,則復(fù)制后將全部丟失。
    (3)如果是單驅(qū)動(dòng)器復(fù)制,系統(tǒng)會(huì)提示適時(shí)更換源盤和目標(biāo)盤,請(qǐng)操作時(shí)注意分清源盤和目標(biāo)盤。
    (五)LABEL——建立磁盤卷標(biāo)命令
    1.功能:建立、更改、刪除磁盤卷標(biāo)。
    2.類型:外部命令
    3.格式:LABEL[盤符:][卷標(biāo)名]
    4.使用說(shuō)明:
    (1)卷標(biāo)名為要建立的卷標(biāo)名,若缺省此參數(shù),則系統(tǒng)提示鍵入卷標(biāo)名或詢問是否刪除原有的卷標(biāo)名;
    (2)卷標(biāo)名由1至11個(gè)字符組成。
    (六)VOL——顯示磁盤卷標(biāo)命令
    1.功能:查看磁盤卷標(biāo)號(hào)。
    2.類型:內(nèi)部命令
    3.格式:VOL[盤符:]
    4.使用說(shuō)明:省略盤符,顯示當(dāng)前驅(qū)動(dòng)器卷標(biāo)。
    (七)SCANDISK——檢測(cè)、修復(fù)磁盤命令
    1.功能:檢測(cè)磁盤的FAT表、目錄結(jié)構(gòu)、文件系統(tǒng)等是否有問題,并可將檢測(cè)出的問題加以修復(fù)。
    2.類型:外部命令
    3.格式:SCANDISK[盤符1:]{[盤符2:]…}[/ALL]
    4.使用說(shuō)明:
    (1)CCANDISK適用于硬盤和軟盤,可以一次指定多個(gè)磁盤或選用[/ALL]參數(shù)指定所有的磁盤;
    (2)可自動(dòng)檢測(cè)出磁盤中所發(fā)生的交叉連接、丟失簇和目錄結(jié)構(gòu)等邏輯上的錯(cuò)誤,并加以修復(fù)。
    (八)DEFRAG——重整磁盤命令
    1.。功能:整理磁盤,消除磁盤碎塊。
    2.類型:外部命令
    3.格式:DEFRAG[盤符:][/F]
    4.使用說(shuō)明:選用/F參數(shù),將文件中存在盤上的碎片消除,并調(diào)整磁盤文件的安排,確保文件之間毫無(wú)空隙。從而加快讀盤速度和節(jié)省磁盤空間。
    (九)SYS——系統(tǒng)復(fù)制命令
    1.功能:將當(dāng)前驅(qū)動(dòng)器上的DOS系統(tǒng)文件IO.SYS,MSDOS.SYS和COMMAND.COM 傳送到指定的驅(qū)動(dòng)器上。
    2.類型:外部命令
    3.格式:SYS[盤符:]
    *使用說(shuō)明:如果磁盤剩余空間不足以存放系統(tǒng)文件,則提示:No roomfor on destination disk.

    文件操作類命令
    (一) COPY文件復(fù)制命令
    1.功能:拷貝一個(gè)或多個(gè)文件到指定盤上。
    2.類型:內(nèi)部命令
    3.格式:COPY [源盤][路徑]〈源文件名〉[目標(biāo)盤][路徑][目標(biāo)文件名]
    4.使用說(shuō)明:
    (1)COPY是文件對(duì)文件的方式復(fù)制數(shù)據(jù),復(fù)制前目標(biāo)盤必須已經(jīng)格式化;
    (2)復(fù)制過程中,目標(biāo)盤上相同文件名稱的舊文件會(huì)被源文件取代;
    (3)復(fù)制文件時(shí),必須先確定目標(biāo)般有足夠的空間,否則會(huì)出現(xiàn);insufficient的錯(cuò)誤信息,提示磁盤空間不夠;
    (4)文件名中允許使用通配舉“*”“?”,可同時(shí)復(fù)制多個(gè)文件;
    (5)COPY命令中源文件名必須指出,不可以省略。
    (6)復(fù)制時(shí),目標(biāo)文件名可以與源文件名相同,稱作“同名拷貝”此時(shí)目標(biāo)文件名可以省略;
    (7)復(fù)制時(shí),目標(biāo)文件名也可以與源文件名不相同,稱作“異名拷貝”,此時(shí),目標(biāo)文件名不能省略;
    (8)復(fù)制時(shí),還可以將幾個(gè)文件合并為一個(gè)文件,稱為“合并拷貝”,格式如下:COPY;[源盤][路徑]〈源文件名1〉〈源文件名2〉…[目標(biāo)盤][路徑]〈目標(biāo)文件名〉;
    (9)利用COPY命令,還可以從鍵盤上輸入數(shù)據(jù)建立文件,格式如下:COPY CON [盤符:][路徑]〈文件名〉;
    (10)注意:COPY命令的使用格式,源文件名與目標(biāo)文件名之間必須有空格!
    (二)XCOPY——目錄復(fù)制命令
    1.功能:復(fù)制指定的目錄和目錄下的所有文件連同目錄結(jié)構(gòu)。
    2.類型:外部命令
    3.格式:XCOPY [源盤:]〈源路徑名〉[目標(biāo)盤符:][目標(biāo)路徑名][/S][/V][/E]
    4.使用說(shuō)明:
    (1)XCOPY是COPY的擴(kuò)展,可以把指定的目錄連文件和目錄結(jié)構(gòu)一并拷貝,但不能拷貝隱藏文件和系統(tǒng)文件;
    (2)使用時(shí)源盤符、源目標(biāo)路徑名、源文件名至少指定一個(gè);
    (3)選用/S時(shí)對(duì)源目錄下及其子目錄下的所有文件進(jìn)行COPY。除非指定/E參數(shù),否則/S不會(huì)拷貝空目錄,若不指定/S參數(shù),則XCOPY只拷貝源目錄本身的文件,而不涉及其下的子目錄;
    (4)選用/V參數(shù)時(shí),對(duì)的拷貝的扇區(qū)都進(jìn)行較驗(yàn),但速度會(huì)降低。
    (三)TYPE——顯示文件內(nèi)容命令
    1.功能:顯示ASCII碼文件的內(nèi)容。
    2.類型:內(nèi)部命令。
    3.格式:TYPE[盤符:][路徑]〈文件名〉
    4.使用說(shuō)明:
    (1)顯示由ASCII碼組成的文本文件,對(duì)。EXE.COM等為擴(kuò)展名的文件,其顯示的內(nèi)容是無(wú)法閱讀的,沒有實(shí)際意義2;
    (2)該命令一次只可以顯示一個(gè)文件的內(nèi)容,不能使用通配符;
    (3)如果文件有擴(kuò)展名,則必須將擴(kuò)展名寫上;
    (4)當(dāng)文件較長(zhǎng),一屏顯示不下時(shí),可以按以下格式顯示;TYPE[盤符:][路徑]〈文件名〉|MORE,MORE為分屏顯示命令,使用些參數(shù)后當(dāng)滿屏?xí)r會(huì)暫停,按任意鍵會(huì)繼續(xù)顯示。
    (5)若需將文件內(nèi)容打印出來(lái),可用如下格式:
    TYPE[盤符:][路徑]〈文件名〉,>PRN
    此時(shí),打印機(jī)應(yīng)處于聯(lián)機(jī)狀態(tài)。
    (四) REN——文件改名命令
    1.功能:更改文件名稱
    2.類型:內(nèi)部命令
    3.格式:REN[盤符:][路徑]〈舊文件名〉〈新文件名〉
    4.使用說(shuō)明:
    (1)新文件名前不可以加上盤符和路徑,因?yàn)樵撁钪荒軐?duì)同一盤上的文件更換文件名;
    (2)允許使用通配符更改一組文件名或擴(kuò)展名。
    (五)FC——文件比較命令
    1.功能:比較文件的異同,并列出差異處。
    2.類型:外部命令
    3.格式:FC[盤符:][路徑名]〈文件名〉[盤符:][路徑名][文件名][/A][/B][/C][/N]
    4.使用說(shuō)明:
    (1)選用/A參數(shù),為ASCII碼比較模式;
    (2)選用/B參數(shù),為二進(jìn)制比較模式;
    (3)選用/C參數(shù),將大小寫字符看成是相同的字符。
    (4)選用/N參數(shù),在ASCII碼比較方式下,顯示相異處的行號(hào)。
    (六)ATTRIB——修改文件屬性命令
    1.功能:修改指定文件的屬性。(文件屬性參見2.5.4(二)文件屬性一節(jié))
    2.類型:外部命令。
    3.格式:ATTRIB[文件名][R][——R][A][——A][H][——H][——S]
    4.使用說(shuō)明:
    (1)選用R參數(shù),將指定文件設(shè)為只讀屬性,使得該文件只能讀取,無(wú)法寫入數(shù)據(jù)或刪除;選用——R參數(shù),去除只讀屬性;
    (2)選用A參數(shù),將文件設(shè)置為檔案屬性;選用——A參數(shù),去除檔案屬性; (3)選用H參數(shù),將文件調(diào)協(xié)為隱含屬性;選用——H參數(shù),去隱含屬性;
    (4)選用S參數(shù),將文件設(shè)置為系統(tǒng)屬性;選用——S參數(shù),去除系統(tǒng)屬性; (5)選用/S參數(shù),對(duì)當(dāng)前目錄下的所有子目錄及作設(shè)置。
    七) DEL——?jiǎng)h除文件命令
    1.功能:刪除指定的文件。
    2.類型:內(nèi)部命令
    3.格式:DEL[盤符:][路徑]〈文件名〉[/P]
    4.使用說(shuō)明:
    (1)選用/P參數(shù),系統(tǒng)在刪除前詢問是否真要?jiǎng)h除該文件,若不使用這個(gè)參數(shù),則自動(dòng)刪除;
    (2)該命令不能刪除屬性為隱含或只讀的文件;
    (3)在文件名稱中可以使用通配符;
    (4)若要?jiǎng)h除磁盤上的所有文件(DEL*·*或DEL·),則會(huì)提示:(Arey ou sure?)(你確定嗎?)若回答Y,則進(jìn)行刪除,回答N,則取消此次刪除作業(yè)。
    (八) UNDELETE——恢復(fù)刪除命令
    1.功能:恢復(fù)被誤刪除命令
    2.類型:外部命令。
    3.格式:UNDELETE[盤符:][路徑名]〈文件名〉[/DOS]/LIST][/ALL]
    4.使用說(shuō)明:使用UNDELETE可以使用“*”和“?”通配符。
    (1)選用/DOS參數(shù)根據(jù)目錄里殘留的記錄來(lái)恢復(fù)文件。由于文件被刪除時(shí),目錄所記載斬文件名第一個(gè)字符會(huì)被改為E5,DOS即依據(jù)文件開頭的E5和其后續(xù)的字符來(lái)找到欲恢復(fù)的文件,所以,UNDELETE會(huì)要求用戶輸入一個(gè)字符,以便將文件名字補(bǔ)齊。但此字符不必和原來(lái)的一樣,只需符合DOS的文件名規(guī)則即可。
    (2)選用/LIST只“列出”符合指定條件的文件而不做恢復(fù),所以對(duì)磁盤內(nèi)容完全不會(huì)有影響。
    (3)選用/ALL自動(dòng)將可完全恢復(fù)的文件完全恢復(fù),而不一一地詢問用戶,使用此參數(shù)時(shí),若UNDELTE利用目錄里殘留的記錄來(lái)將文件恢復(fù),則會(huì)自動(dòng)選一個(gè)字符將文件名補(bǔ)齊,并且使其不與現(xiàn)存文件名相同,選用字符的優(yōu)選順序?yàn)椋?%——0000123456789A~Z。



    UNDELETE還具有建立文件的防護(hù)措施的功能,已超出本課程授課范圍,請(qǐng)讀者在使用些功能時(shí)查閱有關(guān)DOS手冊(cè)。

    七、其它命令
    (一)CLS——清屏幕命令
    1功能:清除屏幕上的所有顯示,光標(biāo)置于屏幕左上角。
    2類型:內(nèi)部命令
    3格式:CLS
    (二) VER查看系統(tǒng)版本號(hào)命令
    1功能:顯示當(dāng)前系統(tǒng)版本號(hào)
    2類型:內(nèi)部命令
    3格式:VER
    (三) DATA日期設(shè)置命令
    1功能:設(shè)置或顯示系統(tǒng)日期。
    2類型:內(nèi)部命令
    3格式:DATE[mm——dd——yy]
    4使用說(shuō)明:
    (1)省略[mm——dd——yy]顯示系統(tǒng)日期并提示輸入新的日期,不修改則可直接按回車鍵,[mm——dd——yy]為“月月——日日——年年”格式;
    (2)當(dāng)機(jī)器開始啟動(dòng)時(shí),有自動(dòng)處理文件(AUTOEXEC.BAT)被執(zhí)行,則系統(tǒng)不提示輸入系統(tǒng)日期。否則,提示輸入新日期和時(shí)間。
    (四) TIME系統(tǒng)時(shí)鐘設(shè)置命令
    1功能:設(shè)置或顯示系統(tǒng)時(shí)期。
    2類型:內(nèi)部命令
    3格式:TIME[hh:mm:ss:xx]
    4使用說(shuō)明:
    (1)省略[hh:mm:ss:xx],顯示系統(tǒng)時(shí)間并提示輸入新的時(shí)間,不修改則可直接按回車鍵,[hh:mm:ss:xx]為“小時(shí):分鐘:秒:百分之幾秒”格式;
    (2)當(dāng)機(jī)器開始啟動(dòng)時(shí),有自動(dòng)處理文件(AUTOEXEC.BAT)被執(zhí)行,則系統(tǒng)不提示輸入系統(tǒng)日期。否則,提示輸入新日期和時(shí)間。
    (五)MEM查看當(dāng)前內(nèi)存狀況命令
    1功能:顯示當(dāng)前內(nèi)存使用的情況
    2類型:外部命令
    3格式:MEM[/C][/F][/M][/P]
    4使用說(shuō)明:
    (1)選用/C參數(shù)列出裝入常規(guī)內(nèi)存和CMB的各文件的長(zhǎng)度,同時(shí)也顯示內(nèi)存空間的使用狀況和最大的可用空間;
    (2)選用/F參數(shù)分別列出當(dāng)前常規(guī)內(nèi)存剩余的字節(jié)大小和UMB可用的區(qū)域及大??;
    (3)選用/M參數(shù)顯示該模塊使用內(nèi)存地地址、大小及模塊性質(zhì);
    (4)選用/P參數(shù)指定當(dāng)輸出超過一屏?xí)r,暫停供用戶查看。
    (六) MSD顯示系統(tǒng)信息命令
    1功能:顯示系統(tǒng)的硬件和操作系統(tǒng)的狀況。
    2類型:外部命令
    3格式:MSD[/I][/B][/S]
    4使用說(shuō)明:
    (1)選用/I參數(shù)時(shí),不檢測(cè)硬件;
    (2)選用/B參數(shù)時(shí),以黑白方式啟動(dòng)MSD;
    (3)選用/S參數(shù)時(shí),顯示出簡(jiǎn)明的系統(tǒng)報(bào)告。

    posted @ 2008-06-30 10:46 sunny spring 閱讀(120) | 評(píng)論 (0)編輯 收藏

    Windows下的DOS命令

    wmimgmt.msc----------打開windows管理體系結(jié)構(gòu)(wmi)
      wupdmgr----------windows更新程序
      write----------寫字板
      winmsd----------系統(tǒng)信息
      wiaacmgr----------掃描儀和照相機(jī)向?qū)?
      winchat----------xp自帶局域網(wǎng)聊天
    msconfig.exe----------系統(tǒng)配置實(shí)用程序
      mplayer2----------簡(jiǎn)易widnows media player
      mspaint----------畫圖板
      mstsc----------遠(yuǎn)程桌面連接
      mplayer2----------媒體播放機(jī)
      magnify----------放大鏡實(shí)用程序
      mmc-----------打開控制臺(tái)
      mobsync----------同步命令
    dxdiag----------檢查directx信息
      drwtsn32------ ----系統(tǒng)醫(yī)生
      devmgmt.msc--- -------設(shè)備管理器
      dfrg.msc----------磁盤碎片整理程序
      diskmgmt.msc----------磁盤管理實(shí)用程序
      dcomcnfg----------打開系統(tǒng)組件服務(wù)
      ddeshare----------打開dde共享設(shè)置
      dvdplay----------dvd播放器
    net stop messenger----停止信使服務(wù)
      net start messenger---開始信使服務(wù)
      notepad----------打開記事本
      nslookup----------網(wǎng)絡(luò)管理的工具向?qū)?
      ntbackup----------系統(tǒng)備份和還原
      narrator----------屏幕“講述人”
      ntmsmgr.msc----------移動(dòng)存儲(chǔ)管理器
      ntmsoprq.msc----------移動(dòng)存儲(chǔ)管理員操作請(qǐng)求
      netstat -an---------(tc)命令檢查接口
    syncapp----------創(chuàng)建一個(gè)公文包
      sysedit----------系統(tǒng)配置編輯器
      sigverif----------文件簽名驗(yàn)證程序
      sndrec32----------錄音機(jī)
      shrpubw----------創(chuàng)建共享文件夾
      secpol.msc----------本地安全策略
      syskey----------系統(tǒng)加密,一旦加密就不能解開,保護(hù)windows xp系統(tǒng)的雙重密碼
      services.msc----------本地服務(wù)設(shè)置
      sndvol32----------音量控制程序
      sfc.exe----------系統(tǒng)文件檢查器
      sfc /scannow----------windows文件保護(hù)
    tsshutdn----------60秒倒計(jì)時(shí)關(guān)機(jī)命令
      tourstart----------xp簡(jiǎn)介(安裝完成后出現(xiàn)的漫游xp程序)
      taskmgr----------任務(wù)管理器
    eventvwr----------事件查看器
      eudcedit----------造字程序
      explorer----------打開資源管理器
    packager----------對(duì)象包裝程序
      perfmon.msc----------計(jì)算機(jī)性能監(jiān)測(cè)程序
      progman----------程序管理器
    regedit.exe----------注冊(cè)表
      rsop.msc----------組策略結(jié)果集
      regedt32----------注冊(cè)表編輯器
      rononce -p ---------15秒關(guān)機(jī)
      regsvr32 /u *.dll----停止dll文件運(yùn)行
      regsvr32 /u zipfldr.dll--取消zip支持
    cmd.exe----------cmd命令提示符
      chkdsk.exe----------chkdsk磁盤檢查
      certmgr.msc----------證書管理實(shí)用程序
      calc------------啟動(dòng)計(jì)算器
      charmap----------啟動(dòng)字符映射表
      cliconfg----------sql server 客戶端網(wǎng)絡(luò)實(shí)用程序
      clipbrd----------剪貼板查看器
      conf-----------啟動(dòng)netmeeting
      compmgmt.msc----------計(jì)算機(jī)管理
      cleanmgr----------垃圾整理
      ciadv.msc----------索引服務(wù)程序
    osk-----------打開屏幕鍵盤
      odbcad32----------odbc數(shù)據(jù)源管理器
      oobe/msoobe /a-------檢查xp是否激活
      lusrmgr.msc----------本機(jī)用戶和組
      logoff----------注銷命令
    iexpress----------木馬捆綁工具,系統(tǒng)自帶
    nslookup----------ip地址偵測(cè)器
    fsmgmt.msc----------共享文件夾管理器
    utilman----------輔助工具管理器
    gpedit.msc----------組策略
    FDISK/MBR----------------(將硬盤主引導(dǎo)程序直接重寫)
    GPEDIT.MSC---------------(在運(yùn)行中打開計(jì)算機(jī)管理器)
    MSCONFIG-----------------(在運(yùn)行中打開啟動(dòng))

    posted @ 2008-06-30 10:39 sunny spring 閱讀(140) | 評(píng)論 (0)編輯 收藏

    jsp下載文件問題

          今天在公司做了一個(gè)上傳和下載的后臺(tái)頁(yè)面,但是我下載不同格式的文件的時(shí)候有的文件能下載,有的格式的文件就不能下載.原來(lái)是在文件中沒有配置相應(yīng)的下載文件類型參數(shù).我在網(wǎng)上找了一些資料沒有幾個(gè)說(shuō)清楚的.我今天就把此設(shè)置貼出來(lái)以供大家參考.
    首先到tomcat/conf/web.xml找到這個(gè)文件.在這個(gè)文件的<welcome-file-list>之前加入以下代碼:
    <mime-mapping>  
    <extension>mht</extension>  
    <mime-type>text/x-mht</mime-type>  
    </mime-mapping>  
    <mime-mapping>  
                   <extension>rar</extension>  
                   <mime-type>application/octet-stream</mime-type>  
           </mime-mapping>  
           <mime-mapping>  
                   <extension>iso</extension>  
                   <mime-type>application/octet-stream</mime-type>  
           </mime-mapping>  
           <mime-mapping>  
                   <extension>ape</extension>  
                   <mime-type>application/octet-stream</mime-type>  
           </mime-mapping>  
           <mime-mapping>  
                   <extension>rmvb</extension>  
                   <mime-type>application/octet-stream</mime-type>  
           </mime-mapping>  
           <mime-mapping>  
                   <extension>ico</extension>  
                   <mime-type>image/x-icon</mime-type>  
           </mime-mapping>  
    要是其它格式的文件也是類似的配置,只是參數(shù)不同而已!!

    posted @ 2008-06-26 13:39 sunny spring 閱讀(1786) | 評(píng)論 (3)編輯 收藏

    主站蜘蛛池模板: 亚洲欧美自偷自拍另类视| 亚洲AV无码专区亚洲AV伊甸园| 免费人成视网站在线观看不卡| 亚洲精品第一国产综合精品99| 亚洲美女又黄又爽在线观看| 亚洲国产人成网站在线电影动漫| 亚洲国产精品成人久久久| 久久亚洲AV成人无码国产电影 | 国产V亚洲V天堂A无码| 亚洲视频在线免费看| 亚洲熟妇AV一区二区三区浪潮| 久久精品国产亚洲av天美18| 三级黄色在线免费观看| 亚洲一区二区三区免费在线观看 | 99久久久精品免费观看国产 | 亚洲精品无码专区久久久| 亚洲精品在线播放视频| 亚洲爆乳大丰满无码专区| A国产一区二区免费入口| 88xx成人永久免费观看| 日韩免费视频网站| 亚洲精品乱码久久久久久自慰 | 亚洲国产日韩精品| 一级毛片免费在线播放| 120秒男女动态视频免费| 国产精品酒店视频免费看| 亚洲成AV人片一区二区| 亚洲精品无码专区在线播放| 你懂的免费在线观看| 歪歪漫画在线观看官网免费阅读| 亚洲一区精品伊人久久伊人| 亚洲人成激情在线播放| 一区二区三区视频免费| 国产精品色拉拉免费看| 亚洲午夜精品一级在线播放放| 亚洲另类自拍丝袜第1页| 中文字幕的电影免费网站| 成人毛片视频免费网站观看| 久久精品国产亚洲av麻| 国产精品久久久久久亚洲小说| 蜜臀AV免费一区二区三区|