<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

    常用鏈接

    統計

    develop

    news

    最新評論

    2008年6月30日 #

    JDBC連接數據庫大全

              現在有好多初學jsp的網友經常會問數據庫怎么連接啊,怎么老出錯啊?所以我集中的在這寫篇文章供大家參考,其實這種把數據庫邏輯全部放在jsp里未必是好的做法,但是有利于初學者學習,所以我就這樣做了,當大家學到一定程度的時候,可以考慮用MVC的模式開發。在練習這些代碼的時候,你一定將jdbc的驅動程序放到服務器的類路徑里,然后要在數據庫里建一個表test,有兩個字段比如為test1test2,可以用下面SQL
    create table test(test1 varchar(20),test2 varchar(20)
    然后向這個表寫入一條測試紀錄
    那么現在開始我們的jsp和數據庫之旅吧。
    一、jsp連接Oracle8/8i/9i數據庫(用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
    為你的數據庫的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()) {%>
    您的第一個字段內容為:<%=rs.getString(1)%>
    您的第二個字段內容為:<%=rs.getString(2)%>
    <%}%>
    <%out.print("
    數據庫操作成功,恭喜你");%>
    <%rs.close();
    stmt.close();
    conn.close();
    %>
    </body>
    </html>
    二、jsp連接Sql Server7.0/2000數據庫
    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
    為你的數據庫的
    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()) {%>
    您的第一個字段內容為:<%=rs.getString(1)%>
    您的第二個字段內容為:<%=rs.getString(2)%>
    <%}%>
    <%out.print("
    數據庫操作成功,恭喜你");%>
    <%rs.close();
    stmt.close();
    conn.close();
    %>
    </body>
    </html>
    三、jsp連接DB2數據庫
    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
    為你的數據庫名
    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()) {%>
    您的第一個字段內容為:<%=rs.getString(1)%>
    您的第二個字段內容為:<%=rs.getString(2)%>
    <%}%>
    <%out.print("
    數據庫操作成功,恭喜你");%>
    <%rs.close();
    stmt.close();
    conn.close();
    %>
    </body>
    </html>
    四、jsp連接Informix數據庫
    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
    為你的數據庫名
    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()) {%>
    您的第一個字段內容為:<%=rs.getString(1)%>
    您的第二個字段內容為:<%=rs.getString(2)%>
    <%}%>
    <%out.print("
    數據庫操作成功,恭喜你");%>
    <%rs.close();
    stmt.close();
    conn.close();
    %>
    </body>
    </html>
    五、jsp連接Sybase數據庫
    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
    為你的數據庫名
    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()) {%>
    您的第一個字段內容為:<%=rs.getString(1)%>
    您的第二個字段內容為:<%=rs.getString(2)%>
    <%}%>
    <%out.print("
    數據庫操作成功,恭喜你");%>
    <%rs.close();
    stmt.close();
    conn.close();
    %>
    </body>
    </html>
    六、jsp連接MySQL數據庫
    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
    為你的數據庫名
    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()) {%>
    您的第一個字段內容為:<%=rs.getString(1)%>
    您的第二個字段內容為:<%=rs.getString(2)%>
    <%}%>
    <%out.print("
    數據庫操作成功,恭喜你");%>
    <%rs.close();
    stmt.close();
    conn.close();
    %>
    </body>
    </html>
    七、jsp連接PostgreSQL數據庫
    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
    為你的數據庫名
    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()) {%>
    您的第一個字段內容為:<%=rs.getString(1)%>
    您的第二個字段內容為:<%=rs.getString(2)%>
    <%}%>
    <%out.print("
    數據庫操作成功,恭喜你");%>
    <%rs.close();
    stmt.close();
    conn.close();
    %>
    </body>
    </html>

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

    Hibernate入門程序

           以下程序是Hiberante入門程序:代碼如下:首先說hibernate開發流程.A、準備一個POJO類  B、創建類的映射和配置文件(hibernate.cfg.xml  class.hbm.xml)class.hbm.xml此配置文件是必須與POJO類中的屬性一一對應.
    現在我以我創建的程序為例來進行說明:數據庫為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位置一致.也就是說必須放在同一個目錄.hibernate.cfg.xml放在src根目錄下.
    2、創建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、創建應用程序并進行代碼測試:

    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();
      // 創建工廠
      SessionFactory factory = config.buildSessionFactory();
      // 打開session
      Session session = factory.openSession();
      // 事務提交
      try{
       Transaction tx = session.beginTransaction();
       // 創建對象
       Admin hb = new Admin();
       hb.setId(3);
       hb.setUsername("Hibernate3.2");
       hb.setPassword("20081202");
       //hb.setUsername("WCH");
       //hb.setPassword("Hibernate");
       // 執行插入語句,在hibernat中操作的是一個對象
       session.save(hb);
       // 提交事務
       tx.commit();
      }catch(Exception e)
      {
       System.out.println("error Msg:"+e.getMessage());
      }finally{
        // close session
        session.close();
      }
     }
    }

    更為詳細的解釋請參照Hibernate官方網站:www.hibernate.org


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

    windows系統命令全集

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

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

    quartz 詳解

             最近在開發的過程中,經常要使用系統自動清零的操作,比如說:系統在給定的時間跟客戶發送電子郵件,在指定的時間段內執行某些操作等等,如果我們只是人工去操作的話不但步驟非常的麻煩而且覺得這是一個工作量非常大的任務,有了quartz框架以后我們所有的任務多可以交給它去做,程序員唯一要做的只是編寫代碼并配置一下程序就OK了,這樣大大提高了開發速度和工作效率.配置步驟如下:
    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表示間斷啟動時間  ?表示執行間隔時間  13啟動時間-->
                      <cron-expression>0 1/2 23 * * ?</cron-expression>
                      <!--每月1號0點執行
                       <cron-expression>0 1 0 1 1-12 ?</cron-expression>
                       -->
                  </cron>
            </trigger>
    </job>
    3、編寫java代碼進行測試:
    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);

    }
    }
    出下以下結果表示配置成功:
    test
    4、此步驟是最后一步也是最重要的一步,只要加入如下代碼的到/WEB-INF/web.xml文件中在指定的時間內就會執行系統調度.
    <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>

    參考網站:http://www.iocblog.net/project/quartz.html

    posted @ 2008-11-21 14:38 sunny spring 閱讀(4509) | 評論 (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)
    以上錯誤是因為struts-config.xml文件中<form-beans>中form的路徑不正確所致.

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

    CSS 全解

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

    1,Cascading Style Sheets 層疊樣式表

    2,Content Scrambling System DVD電影的加密系統

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

    4,College Scholarship Service 大學獎學金處



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

    感性體驗CSS


    什么是CSS呢?你可能急迫的想知道答案。但是空泛的文字描述意義不大,讓我們先來一點感性體驗吧。看看這個沒有添加CSS的HTML文件:http://www.csszengarden.com/zengarden-sample.html
    是一個普普通通的網頁。然而通過給這個文件添加的CSS規則,我們可以得到十分美觀的網頁:http://www.csszengarden.com/

    這還不是全部,不改動HTML,只是通過添加不同的CSS規則,我們就可以得到各種不同樣式的網頁:
    http://www.csszengarden.com/?cssfile=/208/208.css&page=0
    好了,下面我們再來回答什么是CSS這個問題。

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

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

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

    定義內部樣式塊對象 (Embedding a Style Block)
    你可以在你的HTML文檔的<HTML>和<BODY>標記之間插入一個<STYLE>...</STYLE>塊對象。 定義方式請參閱樣式表語法。示例如下:
    <html>
    <head>
    <title>文檔標題</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>
    請注意,這里將style對象的type屬性設置為"text/css",是允許不支持這類型的瀏覽器忽略樣式表單。

    內聯定義 (Inline Styles)
    內聯定義即是在對象的標記內使用對象的style屬性定義適用其的樣式表屬性。示例如下:
    這一行被增加了左右的外補丁


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

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

    網頁設計中常用的CSS屬性

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


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

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



    css可以用任何寫文本的工具進行開發,如文本工具,dreamweaver開發
    css也是一種語言,這種語言要和html或者xhtml語言相結合才起作用,
    css簡單來說就是用來美化網頁用的,用css語言來控制網頁的外觀
    舉個例子
    xhtml部分:
    <ul>
    <li>主頁</li>
    <li>留言</li>
    <li>論壇</li>
    </ul>
    此時在頁面上的表達形式是一個豎向列表,這樣不夠美觀,
    可以css來改善這個列表為一個橫向導航條和超鏈接
    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后,這個列表變成橫向的導航條了,超級鏈接是淡色背景,灰色字體,沒有下劃線,高度是30像素,寬度是100像素
    當我們鼠標經過這個超級鏈接時候,變成灰色背景,白色字體


    在主頁制作時采用CSS技術,可以有效地對頁面的布局、字體、顏色、背景和其它效果實現更加精確的控制。

    只要對相應的代碼做一些簡單的修改,就可以改變同一頁面的不同部分,或者頁數不同的網頁的外觀和格式。

    它的作用可以達到:

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

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

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

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

    (5)你可以將許多網頁的風格格式同時更新,不用再一頁一頁地更新了。你可以將站點上所有的網頁風格都使用一個CSS文件進行控制,只要修改這個CSS文件中相應的行,那么整個站點的所有頁面都會隨之發生變動。

    想一想,沒有使用CSS前我們是如何控制字體的顏色和大小以及所使用的字體的?我們一般使用HTML標簽來實現,代碼非常煩瑣。

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

    說實話,CSS就是為了簡化這樣的工作誕生的,當然其功能決非這么簡單。

    CSS是通過對頁面結構的風格控制的思想,控制整個頁面的風格的。

    式樣單放在頁面中,通過瀏覽器的解釋執行,是完全的文本,任何懂得HTML的人都可以掌握,非常的容易。甚至對一些非常老的瀏覽器,也不會產生頁面混亂的現象。

    CSS的一大優點是它的圖片傳輸速度比較完全的HTML網頁要快一點。

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

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

    jspSmartUpload上傳下載全攻略

    一、安裝篇

      jspSmartUpload是由www.jspsmart.com網站開發的一個可免費使用的全功能的文件上傳下載組件,適于嵌入執行上傳下載操作的JSP文件中。該組件有以下幾個特點:

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

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

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

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

    5、能將文件上傳到數據庫中,也能將數據庫中的數據下載下來。這種功能針對的是MYSQL數據庫,因為不具有通用性,所以本文不準備舉例介紹這種用法。

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

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

    1.進入命令行狀態,將目錄切換到Tomcat的webapps/jspsmartupload/WEB-INF目錄下。

    2.運行JAR打包命令:jar cvf jspSmartUpload.jar com

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

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

    二、相關類說明篇

    File類

      這個類包裝了一個上傳文件的所有信息。通過它,可以得到上傳文件的文件名、文件大小、擴展名、文件數據等信息。

      File類主要提供以下方法:

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

    原型:

    public void saveAs(java.lang.String destFilePathName)



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

    其中,destFilePathName是另存的文件名,optionSaveAs是另存的選項,該選項有三個值,分別是SAVEAS_PHYSICAL,SAVEAS_VIRTUAL,SAVEAS_AUTO。SAVEAS_PHYSICAL表明以操作系統的根目錄為文件根目錄另存文件,SAVEAS_VIRTUAL表明以Web應用程序的根目錄為文件根目錄另存文件,SAVEAS_AUTO則表示讓組件決定,當Web應用程序的根目錄存在另存文件的目錄時,它會選擇SAVEAS_VIRTUAL,否則會選擇SAVEAS_PHYSICAL。

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

    建議:對于Web程序的開發來說,最好使用SAVEAS_VIRTUAL,以便移植。

    2、isMissing

    作用:這個方法用于判斷用戶是否選擇了文件,也即對應的表單項是否有值。選擇了文件時,它返回false。未選文件時,它返回true。

    原型:public boolean isMissing()

    3、getFieldName

    作用:取HTML表單中對應于此上傳文件的表單項的名字。

    原型:public String getFieldName()

    4、getFileName

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

    原型:public String getFileName()

    5、getFilePathName

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

    原型:public String getFilePathName

    6、getFileExt

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

    原型:public String getFileExt()

    7、getSize

    作用:取文件長度(以字節計)

    原型:public int getSize()

    8、getBinaryData

    作用:取文件數據中指定位移處的一個字節,用于檢測文件等處理。

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

    Files類

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

    1、getCount

    作用:取得上傳文件的數目。

    原型:public int getCount()

    2、getFile

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

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

    3、getSize

    作用:取得上傳文件的總長度,可用于限制一次性上傳的數據量大小。

    原型:public long getSize()

    4、getCollection

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

    原型:public Collection getCollection()

    5、getEnumeration

    作用:將所有上傳文件對象以Enumeration(枚舉)的形式返回,以便其它應用程序瀏覽上傳文件信息。

    原型:public Enumeration getEnumeration()

    Request類

      這個類的功能等同于JSP內置的對象request。只所以提供這個類,是因為對于文件上傳表單,通過request對象無法獲得表單項的值,必須通過jspSmartUpload組件提供的Request對象來獲取。該類提供如下方法:

    1、getParameter

    作用:獲取指定參數之值。當參數不存在時,返回值為null。

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

    2、getParameterValues

    作用:當一個參數可以有多個值時,用此方法來取其值。它返回的是一個字符串數組。當參數不存在時,返回值為null。

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

    3、getParameterNames

    作用:取得Request對象中所有參數的名字,用于遍歷所有參數。它返回的是一個枚舉型的對象。

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

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

    只有一個:initialize。

    作用:執行上傳下載的初始化工作,必須第一個執行。

    原型:有多個,主要使用下面這個:

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

    其中,pageContext為JSP頁面內置對象(頁面上下文)。

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

    1、upload

    作用:上傳文件數據。對于上傳操作,第一步執行initialize方法,第二步就要執行這個方法。

    原型:public void upload()

    2、save

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

    原型:public int save(String destPathName)

    和public int save(String destPathName,int option)

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

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

    3、getSize

    作用:取上傳文件數據的總長度

    原型:public int getSize()

    4、getFiles

    作用:取全部上傳文件,以Files對象形式返回,可以利用Files類的操作方法來獲得上傳文件的數目等信息。

    原型:public Files getFiles()

    5、getRequest

    作用:取得Request對象,以便由此對象獲得上傳表單參數之值。

    原型:public Request getRequest()

    6、setAllowedFilesList

    作用:設定允許上傳帶有指定擴展名的文件,當上傳過程中有文件名不允許時,組件將拋出異常。

    原型:public void setAllowedFilesList(String allowedFilesList)

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

    7、setDeniedFilesList

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

    原型:public void setDeniedFilesList(String deniedFilesList)

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

    8、setMaxFileSize

    作用:設定每個文件允許上傳的最大長度。

    原型:public void setMaxFileSize(long maxFileSize)

    其中,maxFileSize為為每個文件允許上傳的最大長度,當文件超出此長度時,將不被上傳。

    9、setTotalMaxFileSize

    作用:設定允許上傳的文件的總長度,用于限制一次性上傳的數據量大小。

    原型:public void setTotalMaxFileSize(long totalMaxFileSize)

    其中,totalMaxFileSize為允許上傳的文件的總長度。

    C.下載文件常用的方法

    1、setContentDisposition

    作用:將數據追加到MIME文件頭的CONTENT-DISPOSITION域。jspSmartUpload組件會在返回下載的信息時自動填寫MIME文件頭的CONTENT-DISPOSITION域,如果用戶需要添加額外信息,請用此方法。

    原型:public void setContentDisposition(String contentDisposition)

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

    2、downloadFile

    作用:下載文件。

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

    ① public void downloadFile(String sourceFilePathName)

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

    ② public void downloadFile(String sourceFilePathName,String contentType)

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

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

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

    三、文件上傳篇

    ㈠ 表單要求

    對于上傳文件的FORM表單,有兩個要求:

    1、METHOD應用POST,即METHOD="POST"。

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

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

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


    ㈡ 上傳的例子

    1、上傳頁面upload.html

    本頁面提供表單,讓用戶選擇要上傳的文件,點擊"上傳"按鈕執行上傳操作。

    頁面源碼如下:

    <!--
                文件名: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、上傳處理頁面do_upload.jsp

    本頁面執行文件上傳操作。頁面源碼中詳細介紹了上傳方法的用法,在此不贅述了。

    頁面源碼如下:

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


    四、文件下載篇

    1、下載鏈接頁面download.html

    頁面源碼如下:

    <!--
                文件名: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">點擊下載</a>
                </body>
                </html>


    2、下載處理頁面do_download.jsp do_download.jsp展示了如何利用jspSmartUpload組件來下載文件,從下面的源碼中就可以看到,下載何其簡單。

    源碼如下:

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


    注意,執行下載的頁面,在Java腳本范圍外(即<% ... %>之外),不要包含HTML代碼、空格、回車或換行等字符,有的話將不能正確下載。不信的話,可以在上述源碼中%><%之間加入一個換行符,再下載一下,保證出錯。因為它影響了返回給瀏覽器的數據流,導致解析出錯。

    3、如何下載中文文件

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

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

    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();
                }
                /**
                * 將文件名中的漢字轉為UTF8編碼的串,以便下載時能正確顯示另存的文件名.
                * 縱橫軟件制作中心雨亦奇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組件對返回的文件未作任何處理,現在做了編碼的轉換工作,將文件名轉換為UTF-8形式的編碼形式。UTF-8編碼對英文未作任何處理,對中文則需要轉換為%XX的形式。toUtf8String方法中,直接利用Java語言提供的編碼轉換方法獲得漢字字符的UTF-8編碼,之后將其轉換為%XX的形式。

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

    小結:jspSmartUpload組件是應用JSP進行B/S程序開發過程中經常使用的上傳下載組件,它使用簡單,方便。現在我又為其加上了下載中文名字的文件的支持,真個是如虎添翼,必將贏得更多開發者的青睞。

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

    JavaScript

    1. 狀態欄 (statusbar)顯功能
    2. 日期物件
    3. 隨數的產生
    4. 開啟新窗囗

    范 例 5:

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

    連 結上 面, 此 時 看 看 瀏 覽 器 下 的 狀 態 列 有 何 結 果。 然 後 這 樣 的 功 能 我 們 可 以

    與 JavaScript 的 功 能 相 結 合。 好, 現 在 再 將 你 的 滑 鼠 移 到 本 處 不 同 顏 色 的連 結

    面, 你 應 該 會 發 現 有 一 個 視 窗 出 現, 是 吧?! 如 何! 怎 麼 做 到 的 呢? 以 下 就 是

    這 一 個 連 結 的 作 法:

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

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

    一 些 訊 息 用 的。 在 語 法 中, 你 可 以 看 到 訊 息 部 分 是 用 ' 括 起 來 的 部 分, 而 非 以 " 括

    起 來, 在 訊 息 部 分 結 束 之 後, 必 須 加 上 ; return true

    好 了, 利 用 以 上 的 特 性 可 以 很 簡 單 的 完 成 第 二 個 連 結 的 例 子! 相 當 簡 單, 以

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

    多 加 解 釋 了, 作 法 如 下:

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


    范 例 6:

    接 下 來 我 們 要 告 訴 你 一 個 使 用 日 期 和 時 間 的 例 子。 在 第 一 部 分 中, 你 已 看 過 了

    lastModified 的 用 法 和 作 法。 現 在 要 告 訴 你 的 并 非 是 印 出 網 路 上 伺 服 器 或 文 件

    修 改 日 期, 而 是 你 個 人 客 戶 端 機 器 的 日 期 和 時 間。 以 下 就 是 執 行 結 果:

    現 在 時 間 是: 14:4
    今 天 日 期 為: 6/3/2008

    做 法 如 下:

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

    如 果 沒 有 特 別 指 定 時 間 與 日 期 的 話, 瀏 覽 器 將 會 采 用 本 地 客 戶 端 機 器 的 時 間, 若 將

    它 放 入 變 數 today 中。 這 兒 要 注 意 的 是: 我 們 并 沒 有 宣 告 today 這 個 變 數 的 型 態,

    這 和 Java 或 其 他 的 程 式 語 言 在 用 到 變 數 之 前 必 需 先 加 以 宣 告 的 方 式 有 相 當 大 的 不

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

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

    請 注 意 getMonth 這 個 method 所 取 得 的 月 份 范 圍 是 由 0~11, 所 以 必 須 加 1 以 代

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

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

    中 所 提 到 的 功 能 和 這 一 個 范 例 中 所 學 習 到 的 功 能, 設 計 一 個 讓 你 的 文 件 在 第10天

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


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

    docStarted= new Date(96,0,13)

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

    加 上 時 間 的 設 定, 如 下:

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

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

    JavaScript 并 沒 有 實 際 的 日 期 型 態, 但 是 它 卻 能 毫 不 費 力 地 顯 示 出 日 期 和 時 間,

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

    這 聽 起 來 似   有 些 復 雜, 但 你 倒 不 用 擔 心, 它 有 標 準 的 共 用 函 數 可 以 計 算,

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


    范 例 7:

    接 下 來 我 們 要 為 你 介 紹 一 個 可 以 產 生 亂 數 的 函 數, 也 是 以 JavaScript 所 寫 的。

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

    大 都 是 如 此(或 類 似) 計 算 出 亂 數 來 的。 我 相 信 JavaScript 最 後 應 也 會 以 相 似 的 方

    法 來 產 生 這 樣 的 method , 如 果 它 會 提 供 這 樣 功 能 的 話。 以 下 是 此 函 數 的 結 果:

    這 是 一 個 計 算 產 生 的 亂 數: 0.9836312285070992

    以 下 是 這 個 作 法 的 寫 法:

    <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>

    我 們 的 做 法 是 以 上 一 個 范 例 中 的 時 間 函 數; 它 會 出 現 一 個 很 大 的 數,

    利 用 這 個 數 再 加 以 運 算 即 可! 例 如: 將 它 拿 來 做 正 弦 函 數(sin) 的 運

    算, 得 到 的 數 再 做 絕 對 值 的 運 算, 結 果 可 以 得 到 一 個 介 於 0 與 1 間 的

    實 數。 因 為 時 間 的 改 變 是 ms 為 單 位, 而 且 你 絕 不 會 獲 得 相 同 的 數 字。

    不 過 這 個 做 法 并 不 適 合 拿 來 快 速 的 連 續 產 生 一 系 列 的 亂 數, 但 如 果 你

    是 不 定 時, 久 久 的 用 一 次, 那 效 果 就 不 錯 了!


    范 例 8:

    JavaScript 的 一 個 重 要 特 點 是 它 可 以 制 作 視 窗。 你 可 以 產 生 一 個 的 視 窗, 并 且

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

    接 下 來 的 范 例 就 是 告 訴 你 如 何 開 啟 一 個 視 窗 并 且 寫 點 東 西 進 去, 你 可 先 試 試

    按 一 下 范 中 之 接 鈕 看 看!

    原 始 程 式 如 下:

    <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>
    這 兒 你 又 看 到 用 按 鈕 來 啟 動 函 數。 這 次 的 函 數 WinOpen()是 藉 著 一 個 open

    的 method 來 產 生 一 個 新 的 視 窗。 第 一 對 雙 引 號("")是 用 來 描 述 欲 載 入 至 視 窗

    中 的 文 件 URL 位 置。 如 果 留 者 空 白 的 話, 那 就 會 呈 現 一 個 空 白 視 窗, 并 可 以

    透 過 JavaScript 寫 入 東 西! 下 一 對 雙 引 號 內 的 內 容 是 這 個 新 開 啟 視 窗 的 名 字,

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

    會 出 現 錯 誤 訊 息, 請 注 意。 接 下 來 的 一 連 串 雙 引 號 內 所 指 定 的 是 該 視 窗

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

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

    來 的 視 窗 中 出 現 一 排 工 具 列。 以 下 有 許 多 你 可 以 改 變 的 視 窗 特 性, 請 注 意 它 們

    字 中 間 不 可 以 有 空 白:

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

    以 上 的 pixels 部 分, 你 可 以 填 入 點 數 的 數 值, 這 數 值 是 告 訴 瀏 覽 器 這 個 視 窗 的

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

    你 可 以 寫 入 一 般 正 規 的 HTML 語 法 文 字。 哇! 這 可 不 得 了 了, 也 就 是 說, 你 可 以

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

    功 能 在 幾 個 月 前 大 概 還 只 能 用 CGI 才 能 達 到 喔! 現 在 你 不 用 CGI 也 可 以 做 了!


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

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

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

    來回傳輸資料,所以當一位使用者輸入一項資料時,它不用經過傳給伺服端 (server)

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

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

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


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

    許多的程式語言,而 JavaScript 則是相當容易了解的語言。JavaScript 創作者

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

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


     

    如何執行 JaveScript? 范例 1:

    JavaScript 如何執行呢?

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

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


     

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

    一下新語言的特性,我們從第一個例子開始:如何用 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 以上版本的話,那你就可以

    看到相關的結果,而如果你的瀏覽器并非是可以支援 JavaScript 的話,那看起

    來就會有一些怪怪的了,以上范例的結果如下:

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

    如何將它置於 HTML 的文件之中而已,這個新的標簽你可以特它放在文件

    中的任何地方。


     



    范例 2:

    接下來下一個例子所要介紹的是有關函數 (function) 的使用。請放心,函數并

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

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

    的部份。好讓在 <body> 部分中使用到函數時,它已確定被讀取住來。另外,

    <script> 標簽的有關描述語法剖份,你可以用注解的符號將它括起來,以免舊

    版或無法讀取 JavaScript 的瀏覽器讀到,而誤會了意思!

    <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 語法部份

    的結果如下,你可以試著按按鈕看看有何結果產生!

    在范例 2 中,將會產生一個按鈕,當你用滑鼠去按它的時候,應該會出現

    一個視窗上面有“嗨! 你好”的字串,如何?不錯吧!這個結果是如何產生

    的呢?首先,在 <head>內的函數會被載入并存於內存中,接著一個新

    的 <form>標簽 <input type ="button".....>將產生一個接鈕。然後,你可以

    在後面看到 'onClick' 的指令,這就是告訴瀏覽器,當該按鈕被按時,應會執行

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

    記憶體中了!請注意,在這個函數中我們用到了個新東西- alert 的 method,

    是 JavaScript 事先定義好的,它會以對話視窗產生內涵的訊息,并有一"確定"

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

    獲取較完整的訊息。我想這些 method 在不久的將來會有長長的一串可以夠你

    學的,不過目前的 method 也已經可以做出相當多東西了!

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

    事實上,這也是加入個函數就可以達成的。


     



    范例 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>
    
    

    現在你可以試試結果如何:

    請輸入你的名字:

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

    的 WWW 瀏覽器因為不認識這些函數而產生錯誤。它的順序應 該為 <script>

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

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

    JavaScript 的注解,若省略了的話, ->之前的字會被誤認為是 JavaScript 的指令。


    這個例子可以讓使用者輸入一段文字,然後再輸入完畢後經由 <input>標簽中的

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

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

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


     



    范例 4:

    這個范例更是帥了!我們在 HTML 文件檔完成了以後,常會加上一行文件

    最後修改的日期,現在你可不用擔心每次都要去改或是忘了改了。你可以

    很簡單的寫一個如下的描述語法程式,就可以自動的為你每次產生最後修

    改的日期了:

    <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 叁數在 Netscape 2.0 beta 2 版時是被寫成

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

    所以注意一下 ;JavaScript 本身是會區分大小寫的, lastmodifiedlastModified

    在它看來是不同的結果。

    最後,在這一部分結束之前,要提醒你一點,像范例 4 ,的用法并非每一部

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

    結果,所以,或許你仍得測一測不同機器的結果才會有所定論。當然,這一切

    是因為 JavaScript 還正在發展的原因,最新的訊息還是得去拜訪一下Netscape

    公司才知道。也許你也不用奇怪,當你隔周再來訪時,JavaScript 可能又作了

    相當大的改變了呢

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

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

    HTML標簽詳解

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

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

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

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

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

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

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

    <frame scrolling=#> #號可為 yes:固定出現卷軸
    no:不出現卷軸 auto:自動判斷文件大小需不需要卷軸(預設值)
    【6】鎖住分割視窗的大小 -- noresize <frame noresize>

    posted @ 2008-06-30 11:16 sunny spring 閱讀(452) | 評論 (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                  // 分離文件信息 獲得最終想要的字節
    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錯誤";
    81          } catch (NullPointerException e) {
    82              result = "getBytes 失敗 NullPointerException錯誤";
    83          } catch (IOException ex1) {
    84              result = "IOException 錯誤 ";
    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){//去掉上傳文件的參數以及編碼
    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) | 評論 (1)編輯 收藏

    ResultSet大全

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

    可更新的結果集:

    更新一行:

                         

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

    UpadateXXX()方法只能修改當前行的數據,并不能修改數據庫中的數據,所以在調用updateXXX()后,還要調用updateRow()方法,用當前行中的新數據更新數據庫。

    CancelRowUpdates()方法用來放棄對當前行的修改,注意,要讓這個方法有效,必須在調用updteRow()方法之前調用它。

    rowUpdated()方法來判斷當前行是否被更新。

    插入行:

    moveToInsertRow()方法移動游標到插入行,插入行是一個與可更新的結果集相聯系的特殊的緩存行。

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

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

    rowInserted()方法來判斷當前行是否是插入行。

    刪除一行:

    deletRow()從結果集中和數據庫中刪除一行,當游標指向插入行的時候,不能調用這個方法。一個被刪除的行可能在結果集中留下一個空的位置,可以調用 rowDeleted()方法來判斷一行是否被刪除。

    可更新結果集的使用必須滿足下面3個條件:

    1, 只能是針對數據庫中單張表單的查詢

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

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

    結果集中執行插入操作,還應該滿足下面兩個條件

    1, 查詢操作必須選擇數據庫表中所有不能為空的列

    2, 查詢操作必須選擇所有沒有默認值的列。

    判斷ResultSet是否為空

    ResultSet rs=stmt.executeQuery(sql);
    rs == null;
    rs.size()這個方法沒有的
    rs為ResultSet的引用,即使結果集里有0條記錄,rs也不為空,所以用rs == null來判斷結果集里是否有0條記錄是錯誤的,而要用
    rs.getRow(); 為0則表示沒有記錄--使用的時候也有問題
    使用rs.next()是否為true來判斷,會使游標前移一位,可能丟掉一條記錄,不合適
    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) | 評論 (0)編輯 收藏

    javascript頁面間傳參數

    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="轉到b.html" />
    </div>

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

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

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

    在登錄界面輸入用戶名 both 和密碼 tomcat 后出現下面的錯誤提示:

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

     

    問題原因:

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

    tomcat-users.xml 文件內容如下:

    <?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 文件內容改為

    <?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>

    重新啟動Tomcat ,在登錄時使用 用戶名admin 密碼 admin 登錄即可。

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

    JAVA正則表達式

    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},"\\*"));

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

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

    //把字符串中的非數字全部替換為"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"表示長度為3的字符串,以a開頭以b結尾

    //打印-hello-lining

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

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

    //正則表達式"[a-zA-Z_0-9]等價于"\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();
         }



    下面是測試用例:
    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) | 評論 (0)編輯 收藏

    MyEclipse5.5下載 MyEclipse5.5注冊碼

    到官方網站下載,這里有myeclipse5.5,有一個是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             注冊碼

                         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注冊碼:適用于早期的 5.5 M2 版本的:
                         Subscriber: www.1cn.biz
                         Subscriber Code: jLR8ZC-956-55-5467865833584547

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

    不同數據庫分頁代碼

    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< 你要查的記錄條數,能夠取出前幾條記錄,但是你如果要把排序后記錄取前幾條結果就不對,如下 SQL 語句select * from table where rownum<50 order by 字段名 desc ,取出來的不時按照先排序后取前幾名,而是先取前幾名,再排序。

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

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

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

    java概述

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

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

    ping命令的作用

    Ping是潛水艇人員的專用術語,表示回應的聲納脈沖,在網絡中Ping 是一個十分好用的TCP/IP工具。它主要的功能是用來檢測網絡的連通情況和分析網絡速度。

    Ping有好的善的一面也有惡的一面。先說一下善的一面吧。上面已經說過Ping的用途就是用來檢測網絡的連同情況和分析網絡速度,但它是通過什么來顯示連通呢?這首先要了解Ping的一些參數和返回信息。

    以下是PING的一些參數:

    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 指定的計算機直到中斷。

    -a
    將地址解析為計算機名。

    -n count
    發送 count 指定的 ECHO 數據包數。默認值為 4。

    -l length
    發送包含由 length 指定的數據量的 ECHO 數據包。默認為 32 字節;最大值是65,527。

    -f
    在數據包中發送"不要分段"標志。數據包就不會被路由上的網關分段。

    -i ttl
    將"生存時間"字段設置為 ttl 指定的值。

    -v tos
    將"服務類型"字段設置為 tos 指定的值。

    -r count
    在"記錄路由"字段中記錄傳出和返回數據包的路由。count 可以指定最少 1 臺,最多 9 臺計算機。

    -s count
    指定 count 指定的躍點數的時間戳。

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

    -k computer-list
    利用 computer-list 指定的計算機列表路由數據包。連續計算機不能被中間網關分隔(路由嚴格源)IP 允許的最大數量為 9。

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

    destination-list
    指定要 ping 的遠程計算機。

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

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

    "Destination Net Unreachable"這個信息表示對方主機不存在或者沒有跟對方建立連接。這里要說明一下"destination host unreachable"和"time out"的區別,如果所經過的路由器的路由表中具有到達目標的路由,而目標因為其它原因不可到達,這時候會出現"time out",如果路由表中連到達目標的路由都沒有,那就會出現"destination host unreachable"。

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

    "Source quench received"信息比較特殊,它出現的機率很少。它表示對方或中途的服務器繁忙無法回應。

    怎樣使用Ping這命令來測試網絡連通呢?

    連通問題是由許多原因引起的,如本地配置錯誤、遠程主機協議失效等,當然還包括設備等造成的故障。

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

    使用Ping檢查連通性有五個步驟:

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

    在檢查網絡連通的過程中可能出現一些錯誤,這些錯誤總的來說分為兩種最常見。

    1. Request Timed Out
    "request time out"這提示除了在《PING(一)》提到的對方可能裝有防火墻或已關機以外,還有就是本機的IP不正確和網關設置錯誤。
    ①、IP不正確:
    IP不正確主要是IP地址設置錯誤或IP地址沖突,這可以利用ipconfig /all這命令來檢查。在WIN2000下IP沖突的情況很少發生,因為系統會自動檢測在網絡中是否有相同的IP地址并提醒你是否設置正確。在NT中不但會出現"request time out"這提示而且會出現"Hardware error"這提示信息比較特殊不要給它的提示所迷惑。
    ②、網關設置錯誤:這個錯誤可能會在第四個步驟出現。網關設置錯誤主要是網關地址設置不正確或網關沒有幫你轉發數據,還有就是可能遠程網關失效。這里主要是在你Ping外部網絡地址時出錯。錯誤表現為無法Ping外部主機返回信息"Request timeout"。

    2. Destination Host Unreachable
    當你在開始PING網絡計算機時如果網絡設備出錯它返回信息會提示"destination host unreachable"。如果局域網中使用DHCP分配IP時,而碰巧DHCP失效,這時使用 PING命令就會產生此錯誤。因為在DHCP失效時客戶機無法分配到IP系統只有自設IP,它往往會設為不同子網的IP。所以會出現"Destination Host Unreachable"。另外子網掩碼設置錯誤也會出現這錯誤。
    還有一個比較特殊就是路由返回錯誤信息,它一般都會在"Destination Host Unreachable"前加上IP地址說明哪個路由不能到達目標主機。這說明你的機器與外部網絡連接沒有問題,但與某臺主機連接存在問題。

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

    如何用Ping命令來判斷一條鏈路的速度?

    Ping這個命令除了可以檢查網絡的連通和檢測故障以外,還有一個比較有趣的用途,那就是可以利用它的一些返回數據,來估算你跟某臺主機之間的速度是多少字節每秒

    我們先來看看它有那些返回數據。

    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報文中有32個字節的測試數據(這是估算速度的關鍵數據),"time=590ms"是往返時間。

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

    從上面的PING例子可以注意到,默認情況下發送的ICMP報文有32個字節。除了這32個字節外再加上20個字節的IP首部和8個字節的ICMP首部,整個IP數據報文的總長度就是60個字節(因為IP和ICMP是Ping命令的主要使用協議,所以整個數據報文要加上它們)。另外在使用Ping命令時還使用了另一個協議進行傳輸,那就是PPP協議(點對點協議),所以在數據的開始和結尾再加上8個字節。在傳輸過程中,由于每個字節含有8bit數據、1bit起始位和1bit結束位,因此傳輸速率是每個字節2.98ms。由此我們可以估計需要405ms。即68*2.98*2(乘2是因為我們還要計算它的往返時間)。

    我們來測試一下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

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

    這里大家可能要注意到,這估算值跟實際值是有誤差的,為什么呢?因為我們現在估算的是一個理論值,還有一些東西我們沒有考慮。比如在網絡中的其它干擾,這些干擾主要來之別的計算機。因為在你測試時不可能全部計算機停止使用網絡給你做測試,這是不實際的。另外就是傳輸設備,因為有某些設備如MODEM它在傳輸時會把數據壓縮后再發送,這大大減少了傳輸時間。這些東西產生的誤差我們是不能避免的,但其數值大約在5%以內我們都可以接受(利用MODEM傳輸例外),但是可以減少誤差的產生。比如把MODEM的壓縮功能關閉和在網絡沒有那么繁忙時進行測試。有時候誤差是無須消除的。因為我們需要這些誤差跟所求得的理論值進行比較分析,從而找出網絡的缺陷而進行優化。這時測試網絡的所有數據包括誤差都會成為我們優化的依據。

    還要注意,這種算法在局域網并不適用,因為在局域網中速度非常的快幾乎少于1ms,而Ping的最小時間分辨率是1ms,所以根本無法用Ping命令來檢測速度。如果想測試速度那就要用專門儀器來檢測。

    總的來說,Ping命令是一個在故障檢查方面很有用而且很便利的工具,你不應該忽視它的存在。

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

    DOS命令大全

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

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



    UNDELETE還具有建立文件的防護措施的功能,已超出本課程授課范圍,請讀者在使用些功能時查閱有關DOS手冊。

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

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

    Windows下的DOS命令

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

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

    主站蜘蛛池模板: 热久久精品免费视频| 亚洲福利视频一区二区| 亚洲国产成人精品女人久久久| 亚洲成AV人片在| 涩涩色中文综合亚洲| 亚欧国产一级在线免费| 免费精品国产日韩热久久| 亚洲精品国产自在久久| 亚洲综合视频在线观看| 一级毛片成人免费看a| 1000部国产成人免费视频| 亚洲国产电影av在线网址| 亚洲最新在线视频| 国产精品无码免费专区午夜| 中文字幕乱码免费视频| 国产亚洲情侣一区二区无码AV| 亚洲1区1区3区4区产品乱码芒果| 久久国产福利免费| 成人免费视频网址| 国产成人精品日本亚洲网站| 国产AV无码专区亚洲AV蜜芽 | 四虎影院免费在线播放| 亚洲av永久无码精品古装片| 亚洲精华国产精华精华液 | 国产99视频精品免费专区| 日本免费电影一区| 久久久无码精品亚洲日韩京东传媒| 亚洲一区二区精品视频| 亚洲五月综合网色九月色| 大地资源中文在线观看免费版| 在线视频免费国产成人| 亚洲一区二区三区久久久久| 三年片在线观看免费西瓜视频| 国产女高清在线看免费观看| 国产午夜亚洲精品国产成人小说| 在线精品亚洲一区二区| 久操视频在线免费观看| 2022中文字字幕久亚洲| 亚洲av日韩精品久久久久久a| 久久成人永久免费播放| 国产在线观看免费视频播放器|