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

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

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

    ……天天向上

    好的想法總是無(wú)窮無(wú)盡

    統(tǒng)計(jì)

    留言簿(1)

    閱讀排行榜

    評(píng)論排行榜

    #

    一個(gè)簡(jiǎn)單的分頁(yè)展示系統(tǒng)優(yōu)化總結(jié)

    由于開(kāi)發(fā)經(jīng)驗(yàn)較少,數(shù)據(jù)量較大(千萬(wàn)級(jí),日有40萬(wàn)條數(shù)據(jù)左右),導(dǎo)致這個(gè)分頁(yè)jsp頁(yè)面做的效率非常低,通過(guò)一系列的優(yōu)化后,效果明顯得到了提高,記錄一下筆記:
    1、分頁(yè)獲取的list對(duì)象集合由于沒(méi)有預(yù)料到數(shù)據(jù)量的大小,是直接一次性讀取然后展示到前臺(tái)的,導(dǎo)致查詢(xún)展示效率非常低:
    更改SQL語(yǔ)句,改為按照當(dāng)前需要展示的數(shù)據(jù)行數(shù),通過(guò)SQL的ROWNUM來(lái)進(jìn)行控制查詢(xún)的數(shù)據(jù)量大小,(插入數(shù)據(jù)時(shí),打開(kāi)一個(gè)數(shù)據(jù)庫(kù)連接即一次性插入100條數(shù)據(jù)(可以配置的模式)):
    SELECT BRAS_ADDRESS, APPLYTIMES, ALLFAILTIMES,SUCCESSRATE, RN 
    FROM 
    (SELECT BRAS_ADDRESS, APPLYTIMES, ALLFAILTIMES,SUCCESSRATE, ROWNUM AS RN 
    FROM 
    (SELECT BRAS_ADDRESS, APPLYTIMES, ALLFAILTIMES,
    1-ALLFAILTIMES/DECODE(APPLYTIMES,0,1,APPLYTIMES) AS SUCCESSRATE  
    FROM 
    (SELECT BRAS_ADDRESS, 
    SUM(DECODE(AUTNCOUNTTYPE,
    'REQ_CHALLENGE',APPLYTIMES,0)) AS APPLYTIMES, 
    SUM(DECODE(AUTNCOUNTTYPE,
    'ACK_CHALLENGE',APPLYTIMES,'ACK_AUTH',APPLYTIMES,'REQ_LOGOUT',APPLYTIMES,0)) AS ALLFAILTIMES 
    FROM T_BRAS_XXXX 
    WHERE READTIME between TO_DATE(
    '2012-06-01 00:00:00','yyyy-MM-dd HH24:mi:ss'
    and TO_DATE(
    '2012-06-12 23:59:59','yyyy-MM-dd HH24:mi:ss')
    GROUP BY BRAS_ADDRESS 
    )
    ORDER BY SUCCESSRATE

    WHERE  ROWNUM 
    <= 180 
    )
    WHERE RN 
    > 165 

    2、建立索引,建立索引的字段不能使用函數(shù)避免索引失效;
    3、建立分區(qū)表,將間隔5天的數(shù)據(jù)放在一個(gè)表中:


    ----------------------刪除原表,新建分區(qū)表
    --刪除表
    drop table T_BRAS_XXXX;
    commit;

    --創(chuàng)建分區(qū)表:利用Oracle11g INTERVAL進(jìn)行分區(qū)的方法
    create table T_BRAS_XXXX
    (
    BRAS_XXXX_ID integer NOT NULL PRIMARY KEY,
    BRAS_XXXX VARCHAR2(
    64),
    AUTNCOUNTTYPE VARCHAR2(
    50),
    SUCCESSTIMES NUMBER,
    APPLYTIMES NUMBER,
    INTERVALTIME NUMBER,
    UPDATETIME DATE  DEFAULT SYSDATE,
    READTIME DATE
    )
    PARTITION BY RANGE (READTIME)
    INTERVAL (NUMTODSINTERVAL(
    5,'day'))
    (
      PARTITION T_BRAS_XXXX_PART01 VALUES LESS THAN (TO_DATE(
    '2012-07-01 00:00:00','yyyy-MM-dd HH24:mi:ss'))
    )
    --保留原來(lái)創(chuàng)建的BRAS_XXXX_ID自增序列
    --創(chuàng)建索引
    create index idx_t_bras_XXXX on t_bras_XXXX(readtime,bras_address);
    commit;

    --查看分區(qū)是否成功:
    select table_name,partition_name from user_tab_partitions where table_name
    ='T_BRAS_XXXX';

    posted @ 2012-07-16 11:30 japper 閱讀(524) | 評(píng)論 (0)編輯 收藏

    ORACLE復(fù)制千萬(wàn)級(jí)數(shù)據(jù)表時(shí)用的存儲(chǔ)過(guò)程

    CREATE OR REPLACE PROCEDURE "LARGEDATA_INSERT" (ip_table_name   in varchar2, --目標(biāo)表
                                              ip_table_column in varchar2, --目標(biāo)字段
                                              ip_table_select in varchar2, --SELECT 查詢(xún)語(yǔ)句
                                              return_result   out number --返回的結(jié)果1,表示成功,0表示失敗
                                              ) as
    --適合大數(shù)據(jù)量的插入模板  create Templates by chenzhoumin 20110614
      runTime number;--運(yùn)行總次數(shù)
      i       number;--當(dāng)前行數(shù)
      amount  number;--總行數(shù)
      s_sql   varchar2(10000);--SQL語(yǔ)句
      e_sql   varchar2(10000);--執(zhí)行SQL語(yǔ)句
      countNumber number;--一次插入的數(shù)據(jù)量
    begin
      --set serveroutput on size 20000000000000
      countNumber := 10000;
      return_result := 0; --開(kāi)始初始化為0
      --核必邏輯內(nèi)容,可根據(jù)具體的業(yè)務(wù)邏輯來(lái)定義,統(tǒng)計(jì)數(shù)據(jù)總行數(shù)
      s_sql := 'select count(1) from (' || ip_table_select || ')';
      execute immediate s_sql
        into amount;
      --每100萬(wàn)提交一次
      runTime := amount mod countNumber;
      if (runTime > 0) then
        runTime := 1 + trunc(amount / countNumber);
      end if;
      if (runTime = 0) then
        runTime := 0 + trunc(amount / countNumber);
      end if;
      FOR i IN 1 .. runTime LOOP
        e_sql := 'insert into '||ip_table_name ||'
        ('||ip_table_column ||')
         select '|| ip_table_column ||'
         from
         (select selectSec.*, rownum rownumType
              from ('|| ip_table_select ||') selectSec
             WHERE ROWNUM <= '|| i * countNumber ||')
        WHERE rownumType > '||(i - 1) * countNumber;
        dbms_output.enable(99999999999999);
        dbms_output.put_line(e_sql);
        execute immediate e_sql;
        --提交
        commit;
      END LOOP;
      return_result := 1;
      return;
    exception
      when others then
        return_result := 0;
        raise;
        dbms_output.enable(99999999999999);
        dbms_output.put_line('結(jié)束');
        return;
    end;



    以上測(cè)試通過(guò)。

    posted @ 2012-07-09 15:06 japper 閱讀(1967) | 評(píng)論 (0)編輯 收藏

    ORACLE所在linux盤(pán)符空間不足的解決辦法

    ORACLE數(shù)據(jù)庫(kù)空間不足,會(huì)發(fā)生登錄出錯(cuò),數(shù)據(jù)無(wú)法插入等錯(cuò)誤發(fā)生,可以根據(jù)實(shí)際錯(cuò)誤代碼查詢(xún)?cè)颍贿^(guò)更多是平時(shí)多看看數(shù)據(jù)庫(kù)空間是否足夠;
    解決辦法有兩個(gè):
    1、使用linux命令或者工具增加空間或者增加硬盤(pán),沒(méi)有實(shí)際操作過(guò);
    2、給oracel數(shù)據(jù)庫(kù)增加系統(tǒng)表空間和臨時(shí)表空間,記錄下操作方法:

    如果臨時(shí)表空間或者SYSTEM表空間不足,可以進(jìn)行新增數(shù)據(jù)文件到其它盤(pán)符(增加opt盤(pán)符目錄):
    select ts#, name from v$datafile;--查看當(dāng)前的表空間狀況
    select * from database_properties where property_name='DEFAULT_TEMP_TABLESPACE';--查看默認(rèn)的臨時(shí)文件
    create temporary tablespace temp2 tempfile '/opt/oracle/oracle_tmp/temp02.dbf' size 5000M autoextend on next 100M; --新增臨時(shí)文件
    alter database default temporary tablespace "TEMP2";  --修改默認(rèn)臨時(shí)文件設(shè)置
    alter database tempfile '/home/oracle/oracle/oradata/portal/temp01.dbf' autoextend off;  --關(guān)閉原來(lái)的臨時(shí)文件自增長(zhǎng)
    增加系統(tǒng)表空間:
    alter tablespace SYSTEM add datafile '/opt/oracle/oracle_tmp/system02.dbf' size 500M autoextend on next 5M;

    如果startup數(shù)據(jù)庫(kù)時(shí),提示:prifile文件找不到,可以從一個(gè)$ORACLE_BASE/admin/portal/pfile目錄下拷貝內(nèi)容過(guò)去就可以(注意文件命名和原來(lái)使用的保持一樣,只是內(nèi)容不同):
    當(dāng)前正在使用的pfile:startup force pfile='/home/oracle/oracle/product/11.0.1/db_1/dbs/initportal.ora';
    拷貝:cp $ORACLE_BASE/admin/portal/pfile/init.ora.452011185827   /home/oracle/oracle/product/11.0.1/db_1/dbs/spfileportal.ora

    posted @ 2012-07-02 14:14 japper 閱讀(1323) | 評(píng)論 (0)編輯 收藏

    oracle 臨時(shí)表空間的增刪改查

    oracle 臨時(shí)表空間的增刪改查

    1、查看臨時(shí)表空間 (dba_temp_files視圖)(v_$tempfile視圖)
    select tablespace_name,file_name,bytes/1024/1024 file_size,autoextensible from dba_temp_files;
    select status,enabled, name, bytes/1024/1024 file_size from v_$tempfile;--sys用戶(hù)查看

    2、縮小臨時(shí)表空間大小
    alter database tempfile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TELEMT\TEMP01.DBF' resize 100M;

    3、擴(kuò)展臨時(shí)表空間:
    方法一、增大臨時(shí)文件大小:
    SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ resize 100m;
    方法二、將臨時(shí)數(shù)據(jù)文件設(shè)為自動(dòng)擴(kuò)展:
    SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ autoextend on next 5m maxsize unlimited;
    方法三、向臨時(shí)表空間中添加數(shù)據(jù)文件:
    SQL> alter tablespace temp add tempfile ‘/u01/app/oracle/oradata/orcl/temp02.dbf’ size 100m;

    4、創(chuàng)建臨時(shí)表空間
    SQL> create temporary tablespace temp1 tempfile ‘/u01/app/oracle/oradata/orcl/temp11.dbf’ size 10M;

    5、更改系統(tǒng)的默認(rèn)臨時(shí)表空間:
    --查詢(xún)默認(rèn)臨時(shí)表空間
    select * from database_properties where property_name='DEFAULT_TEMP_TABLESPACE';
    --修改默認(rèn)臨時(shí)表空間
    alter database default temporary tablespace temp1;
    所有用戶(hù)的默認(rèn)臨時(shí)表空間都將切換為新的臨時(shí)表空間:
    select username,temporary_tablespace,default_ from dba_users;
    --更改某一用戶(hù)的臨時(shí)表空間:
    alter user scott temporary tablespace temp;

    6、刪除臨時(shí)表空間
    刪除臨時(shí)表空間的一個(gè)數(shù)據(jù)文件:
    SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp02.dbf’ drop;
    刪除臨時(shí)表空間(徹底刪除):
    SQL> drop tablespace temp1 including contents and datafiles cascade constraints;

    7、查看臨時(shí)表空間的使用情況(GV_$TEMP_SPACE_HEADER視圖必須在sys用戶(hù)下才能查詢(xún))
    GV_$TEMP_SPACE_HEADER視圖記錄了臨時(shí)表空間的使用大小與未使用的大小
    dba_temp_files視圖的bytes字段記錄的是臨時(shí)表空間的總大小
    SELECT temp_used.tablespace_name,
           total - used as "Free",
           total as "Total",
           round(nvl(total - used, 0) * 100 / total, 3) "Free percent"
      FROM (SELECT tablespace_name, SUM(bytes_used) / 1024 / 1024 used
              FROM GV_$TEMP_SPACE_HEADER
             GROUP BY tablespace_name) temp_used,
           (SELECT tablespace_name, SUM(bytes) / 1024 / 1024 total
              FROM dba_temp_files
             GROUP BY tablespace_name) temp_total
     WHERE temp_used.tablespace_name = temp_total.tablespace_name

    8、查找消耗資源比較的sql語(yǔ)句
    Select se.username,
           se.sid,
           su.extents,
           su.blocks * to_number(rtrim(p.value)) as Space,
           tablespace,
           segtype,
           sql_text
      from v$sort_usage su, v$parameter p, v$session se, v$sql s
     where p.name = 'db_block_size'
       and su.session_addr = se.saddr
       and s.hash_value = su.sqlhash
       and s.address = su.sqladdr
     order by se.username, se.sid
     
    9、查看當(dāng)前臨時(shí)表空間使用大小與正在占用臨時(shí)表空間的sql語(yǔ)句
    select sess.SID, segtype, blocks * 8 / 1000 "MB", sql_text
      from v$sort_usage sort, v$session sess, v$sql sql
     where sort.SESSION_ADDR = sess.SADDR
       and sql.ADDRESS = sess.SQL_ADDRESS
     order by blocks desc;

    10、臨時(shí)表空間組介紹
      1)創(chuàng)建臨時(shí)表空間組:
    create temporary tablespace tempts1 tempfile '/home/oracle/temp1_02.dbf' size 2M tablespace group group1;
    create temporary tablespace tempts2 tempfile '/home/oracle/temp2_02.dbf' size 2M tablespace group group2;
     
     2)查詢(xún)臨時(shí)表空間組:dba_tablespace_groups視圖
    select * from dba_tablespace_groups;
    GROUP_NAME                     TABLESPACE_NAME
    ------------------------------ ------------------------------
    GROUP1                         TEMPTS1
    GROUP2                         TEMPTS2

     3)將表空間從一個(gè)臨時(shí)表空間組移動(dòng)到另外一個(gè)臨時(shí)表空間組:
    alter tablespace tempts1 tablespace group GROUP2 ;
    select * from dba_tablespace_groups;

    GROUP_NAME                     TABLESPACE_NAME
    ------------------------------ ------------------------------
    GROUP2                         TEMPTS1
    GROUP2                         TEMPTS2

     4)把臨時(shí)表空間組指定給用戶(hù)
    alter user scott temporary tablespace GROUP2;

     5)在數(shù)據(jù)庫(kù)級(jí)設(shè)置臨時(shí)表空間
    alter database <db_name> default temporary tablespace GROUP2;

     6)刪除臨時(shí)表空間組 (刪除組成臨時(shí)表空間組的所有臨時(shí)表空間)
    drop tablespace tempts1 including contents and datafiles;
    select * from dba_tablespace_groups;
    GROUP_NAME                     TABLESPACE_NAME
    ------------------------------ ------------------------------
    GROUP2                         TEMPTS2

    drop tablespace tempts2 including contents and datafiles;
    select * from dba_tablespace_groups;
    GROUP_NAME                     TABLESPACE_NAME

    11、對(duì)臨時(shí)表空間進(jìn)行shrink(11g新增的功能)
    --將temp表空間收縮為20M
    alter tablespace temp shrink space keep 20M;
    --自動(dòng)將表空間的臨時(shí)文件縮小到最小可能的大小
    ALTER TABLESPACE temp SHRINK TEMPFILE ’/u02/oracle/data/lmtemp02.dbf’;

    臨時(shí)表空間作用
    Oracle臨時(shí)表空間主要用來(lái)做查詢(xún)和存放一些緩沖區(qū)數(shù)據(jù)。臨時(shí)表空間消耗的主要原因是需要對(duì)查詢(xún)的中間結(jié)果進(jìn)行排序。
    重啟數(shù)據(jù)庫(kù)可以釋放臨時(shí)表空間,如果不能重啟實(shí)例,而一直保持問(wèn)題sql語(yǔ)句的執(zhí)行,temp表空間會(huì)一直增長(zhǎng)。直到耗盡硬盤(pán)空間。
    網(wǎng)上有人猜測(cè)在磁盤(pán)空間的分配上,oracle使用的是貪心算法,如果上次磁盤(pán)空間消耗達(dá)到1GB,那么臨時(shí)表空間就是1GB。
    也就是說(shuō)當(dāng)前臨時(shí)表空間文件的大小是歷史上使用臨時(shí)表空間最大的大小。

    臨時(shí)表空間的主要作用:
      索引create或rebuild;
      Order by 或 group by;
      Distinct 操作;
      Union 或 intersect 或 minus;
      Sort-merge joins;
      analyze.

    posted @ 2012-06-28 14:54 japper 閱讀(31508) | 評(píng)論 (2)編輯 收藏

    在JQuery中使用jsp頁(yè)面的select事件

    JQuery中的select事件是change事件,在js中使用的是onchange事件:
    <script src="jquery.min.js" type="text/javascript"></script> 
    <script language="javascript" type="text/javascript"> 
    $(document).ready(function()

    $(
    '#mySelect').change(function()
    alert($(
    this).children('option:selected').val()); 
    var p1
    =$(this).children('option:selected').val();//這就是selected的值 
    var p2=$('#param2').val();//獲取本頁(yè)面其他標(biāo)簽的值 
    window.location.href="xx.php?param1="+p1+"¶m2="+p2+"";//頁(yè)面跳轉(zhuǎn)并傳參 
     }

    }

    </script> 

    <select id="mySelect"> 
    <option value="1">one</option> 
    <option value="2" selected="selected">two</option> 
    <option value="3">three</option> 
    </select> 

    又如:

           $(document).ready
           (
            function()
            {  
            $("#showLoadingDiv").click(function(){$("#dataLoad").show();}); //為指定按鈕添加數(shù)據(jù)加載動(dòng)態(tài)顯示:即將DIV顯示出來(lái)
            $("#orderByFail").click(function(){$("#dataLoad").show();});
            $("#orderByRate").click(function(){$("#dataLoad").show();});
            $("#stats").change(function(){$("#dataLoad").show();}); //change
            $("#indexPage").click(function(){$("#dataLoad").show();});
            }
           );


                  <select name="dictFilter.dictStatus" id="stats" onchange="javascript:location.href=this.value">
                  <option selected="selected" value="<%=basePath%>acauthinfo/authDefault.jsp?pageNum=1&StartTime=<%=pager.getStartTime()%>&field=<%=pager.getField()%>&sortOrder=<%=pager.getSortOrder()%>&EndTime=<%=pager.getEndTime()%>&pageSize=10" >每頁(yè)10行</option>
                  <option selected="selected" value="<%=basePath%>acauthinfo/authDefault.jsp?pageNum=1&StartTime=<%=pager.getStartTime()%>&field=<%=pager.getField()%>&sortOrder=<%=pager.getSortOrder()%>&EndTime=<%=pager.getEndTime()%>&pageSize=20">每頁(yè)20行</option>
                  <option selected="selected" value="<%=basePath%>acauthinfo/authDefault.jsp?pageNum=1&StartTime=<%=pager.getStartTime()%>&field=<%=pager.getField()%>&sortOrder=<%=pager.getSortOrder()%>&EndTime=<%=pager.getEndTime()%>&pageSize=30">每頁(yè)30行</option>
                  <option selected="selected" value="">---請(qǐng)選擇---</option>
                  </select>

    posted @ 2012-06-15 14:52 japper 閱讀(2169) | 評(píng)論 (0)編輯 收藏

    測(cè)試JAVA中SELECT COUNT(*) FROM XXX得到的ResultSet行數(shù)

    初學(xué)的知識(shí),怕忘記了,記錄下:
        /**
         *  測(cè)試SELECT COUNT(*)返回int類(lèi)型的數(shù)據(jù)
         
    */


        
    public static int testRturnNumber()
        
    {
            
    int number=0;
            
    int number1=0;
            Connection conn 
    = DBUtils.getConn();
            Statement stmt
    =null;
            
    try{
            stmt 
    = conn.createStatement();
            String strSQL
    ="select count(*)as num from t_bras_authinfo"
            ResultSet rs 
    = stmt.executeQuery(strSQL);        

            
    if(null!=rs)
            
    {
                
    while(rs.next())
                
    {
                    number
    =rs.getInt("num"); //通過(guò)指定別名返回行數(shù)
                    number1=rs.getInt(1); //通過(guò)索引返回行數(shù)
                }

            }


        }

            
    catch(Exception e)
            
    {
                logger4sdk
                .debug(
    "[delLastMonthData] delete t_bras_authinfo faile : "
                        
    +e.getMessage());   
                
    return number;
            }

            
    finally
            
    {
                DBUtils.close(conn, stmt, 
    null) ;
            }

            
    return number;
        }

    在主方法中執(zhí)行:
       BrasDatabase bd=new BrasDatabase();
       int returnNum=bd.testRturnNumber();
       System.out.println("返回總行數(shù):"+returnNum);

    以上兩種方式都可以正常返回行數(shù)。

    posted @ 2012-06-07 11:24 japper 閱讀(3586) | 評(píng)論 (0)編輯 收藏

    來(lái)點(diǎn)HTML基礎(chǔ)-HTML表單(Forms)屬性及用法

    HTML表單(Form)是HTML的一個(gè)重要部分,主要用于采集和提交用戶(hù)輸入的信息。

    舉個(gè)簡(jiǎn)單的例子,一個(gè)讓用戶(hù)輸入姓名的HTML表單(Form)。示例代碼如下:

    <form action="

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

    <input type="text" name="yourname">

    <input type="submit" value="提交">

    </form>

    學(xué)習(xí)HTML表單(Form)最關(guān)鍵要掌握的有三個(gè)要點(diǎn):

    表單控件(Form Controls)
    Action
    Method
    先說(shuō)表單控件(Form Controls),通過(guò)HTML表單的各種控件,用戶(hù)可以輸入文字信息,或者從選項(xiàng)中選擇,以及做提交的操作。比如上面的例句里,input type= "text"就是一個(gè)表單控件,表示一個(gè)單行輸入框。

    用戶(hù)填入表單的信息總是需要程序來(lái)進(jìn)行處理,表單里的action就指明了處理表單信息的文件。比如上面例句里的http://www.linkzj.cn/asdocs/html_tutorials/yourname.asp

    至于method,表示了發(fā)送表單信息的方式。method有兩個(gè)值:get和post。get的方式是將表單控件的name/value信息經(jīng)過(guò)編碼之后,通過(guò)URL發(fā)送(你可以在地址欄里看到)。而post則將表單的內(nèi)容通過(guò)http發(fā)送,你在地址欄看不到表單的提交信息。那什么時(shí)候用get,什么時(shí)候用post呢?一般是這樣來(lái)判斷的,如果只是為取得和顯示數(shù)據(jù),用get;一旦涉及數(shù)據(jù)的保存和更新,那么建議用post。

    HTML表單(Form)常用控件(Controls)
    HTML表單(Form)常用控件有:

    input type="text" 單行文本輸入框
    input type="submit" 將表單(Form)里的信息提交給表單里action所指向的文件
    input type="checkbox" 復(fù)選框
    input type="radio" 單選框
    select 下拉框
    textArea 多行文本輸入框
    input type="password" 密碼輸入框(輸入的文字用*表示)
    表單控件(Form Control):?jiǎn)涡形谋据斎肟?input type="text")
    單行文本輸入框允許用戶(hù)輸入一些簡(jiǎn)短的單行信息,比如用戶(hù)姓名
    。例句如下:

    <input type="text" name="yourname">

    表單控件(Form Control):
    復(fù)選框(input type="checkbox")
    復(fù)選框允許用戶(hù)在一組選項(xiàng)里,選擇多個(gè)。示例代碼:

    <input type="checkbox" name="fruit" value ="apple">蘋(píng)果<br>

    <input type="checkbox" name="fruit" value ="orange">桔子<br>

    <input type="checkbox" name="fruit" value ="mango">芒果<br>

    用checked表示缺省已選的選項(xiàng)。

    <input type="checkbox" name="fruit" value ="orange" checked>桔子<br>

    表單控件(Form Control):?jiǎn)芜x框(input type="radio")
    使用單選框,讓用戶(hù)在一組選項(xiàng)里只能選擇一個(gè)。示例代碼:

    <input type="radio" name="fruit" value = "Apple">蘋(píng)果<br>

    <input type="radio" name="fruit" value = "Orange">桔子<br>

    <input type="radio" name="fruit" value = "Mango">芒果<br>

    用checked表示缺省已選的選項(xiàng)。

    <input type="radio" name="fruit" value = "Orange" checked>桔子<br>

    表單控件(Form Control):下拉框(select)
    下拉框(Select)既可以用做單選,也可以用做復(fù)選。單選例句如下:

    <select name="fruit" >

    <option value="apple">蘋(píng)果

    <option value="orange">桔子

    <option value="mango">芒果

    </select>

    如果要變成復(fù)選,加muiltiple即可。用戶(hù)用Ctrl來(lái)實(shí)現(xiàn)多選。例句:

    <select name="fruit" multiple>

    用戶(hù)還可以用size屬性來(lái)改變下拉框(Select)的大小。

    表單控件(Form Control):多行輸入框(textarea)
    多行輸入框(textarea)主要用于輸入較長(zhǎng)的文本信息。例句如下:

    <textarea name="yoursuggest" cols ="50" rows = "3"></textarea>

    其中cols表示textarea的寬度,rows表示textarea的高度。

    表單控件(Form Control):密碼輸入框(input type="password")
    密碼輸入框(input type="password")主要用于一些保密信息的輸入,比如密碼。因?yàn)橛脩?hù)輸入的時(shí)候,顯示的不是輸入的內(nèi)容,而是黑點(diǎn)符號(hào)。。例句如下:

    <input type="password" name="yourpw">

    表單控件(Form Control):提交(input type="submit")
    通過(guò)提交(input type=submit)可以將表單(Form)里的信息提交給表單里action所指向的文件。例句如下:

    <input type="submit" value="提交">

    表單控件(Form Control):圖片提交(input type="image")
    input type=image 相當(dāng)于 input type=submit,不同的是,input type=image 以一個(gè)圖片作為表單的提交按鈕,其中 src 屬性表示圖片的路徑。

    <input type="image" src ="

    posted @ 2012-06-07 09:29 japper 閱讀(916) | 評(píng)論 (0)編輯 收藏

    GET和POST兩種提交表單的方式說(shuō)明

    1.Get方式
    這種方式是最簡(jiǎn)單的參數(shù)傳遞方式。例如:
    http://www.javaweb.cc/get.do?a=3&b=5&c=7

    這個(gè)url中,a、b和c是url參數(shù),具體的說(shuō)是參數(shù)名,與之用“=”隔開(kāi)的是對(duì)應(yīng)的參數(shù)值。也就是說(shuō)參數(shù)a的值為3、參數(shù)b的值為5、參數(shù)c的值為7。get.do是請(qǐng)求地址,緊跟這個(gè)地址的參數(shù)a需要用“?”作為分隔符,其余參數(shù)用“&”做分隔符。

    這種get請(qǐng)求發(fā)起后,服務(wù)器端可以通過(guò)request.getParameter()方法來(lái)獲得參數(shù)值。如要獲得參數(shù)a的值可以通過(guò)request.getParameter("a");


    2.Post方式
    相比get方式,post方式更為隱蔽。例如:http://www.javaweb.cc/post.do
    在這個(gè)url中,你看不到任何參數(shù),真正的參數(shù)隱藏在Http請(qǐng)求的數(shù)據(jù)體中。如果了解網(wǎng)絡(luò)監(jiān)聽(tīng)的話(huà),就會(huì)對(duì)這一點(diǎn)深有體會(huì)。
    我們舉一個(gè)簡(jiǎn)單的例子:通過(guò)表單做登錄操作。
    我們簡(jiǎn)化一個(gè)登錄表單:

    <form action="login.do" method="post">
    <ul>
    <li><label for="username">用戶(hù)名</label><input id="username" name="username" type="text" /></li>
    <li><label for="password">密碼</label><input id="password" type="password" /></li>
    <li><label><input type="submit" value="登錄" /> <input
    type="reset" value="重置" /></label></li>
    </ul>
    </form>
    表單中有2個(gè)字段,用戶(hù)名(username)和密碼(password)
    注意form標(biāo)簽中的method參數(shù)值是post!

    即便是表單,在服務(wù)器端仍然可以通過(guò)request.getParameter()方法來(lái)獲得參數(shù)值。
    Post方式,其實(shí)是將表單字段和經(jīng)過(guò)編碼的字段值經(jīng)過(guò)組合以數(shù)據(jù)體的方式做了參數(shù)傳遞。

    經(jīng)過(guò)一番闡述,相信大家對(duì)兩種網(wǎng)絡(luò)參數(shù)傳遞方式都有所了解了。
    Get方式比較簡(jiǎn)單,通過(guò)構(gòu)建一個(gè)簡(jiǎn)單HttpURLConnection就可以獲得,我們暫且不說(shuō)。
    我們主要來(lái)描述一下如何通過(guò)java代碼構(gòu)建一個(gè)表單提交。
    仔細(xì)研究表單提交時(shí)所對(duì)應(yīng)的http數(shù)據(jù)體,發(fā)現(xiàn)其表單字段是以如下方式構(gòu)建的:

    arg0=urlencode(value0)&arg1=urlencode(value1)
    當(dāng)然,尤其要注意字段名,參數(shù)名只不能使用中文這類(lèi)字符。
    3、通過(guò)httpclient來(lái)模擬POST提交表單:


    import java.util.Random;
    import java.util.ArrayList;
    import java.util.List;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.cookie.Cookie;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.protocol.HTTP;
    import org.apache.http.util.EntityUtils;

    /**
     * Example how to use multipart/form encoded POST request.
     
    */

    public class ClientMultipartFormPost {



        
    public static void ExecuClient(String userName, String wlanuserip2,
                String wlanacip2) 
    throws Exception {
            DefaultHttpClient httpclient 
    = new DefaultHttpClient();
            String a1
    ="http://172.21.16.38:8080/bpss/jsp/do_login.jsp";
            
    try {
                HttpGet httpget 
    = new HttpGet(a1);
                HttpResponse response 
    = httpclient.execute(httpget);
                HttpEntity entity 
    = response.getEntity();
                System.out.println(
    "Login form get: " + response.getStatusLine());
                EntityUtils.consume(entity);
                
    //這里需要生成并傳遞一個(gè)COOKIE過(guò)去
                System.out.println("Initial set of cookies:");
                List
    <Cookie> cookies = httpclient.getCookieStore().getCookies();
                
    if (cookies.isEmpty()) {
                    System.out.println(
    "None");
                }
     else {
                    
    for (int i = 0; i < cookies.size(); i++{
                        System.out.println(
    "" + cookies.get(i).toString());
                    }

                }

                HttpPost httppost 
    = new HttpPost(a1);

                List
    <NameValuePair> nvps = new ArrayList<NameValuePair>();
                nvps.add(
    new BasicNameValuePair("local""zh_CN"));
                nvps.add(
    new BasicNameValuePair("USER", userName));
                nvps.add(
    new BasicNameValuePair("PWD""123456"));
                nvps.add(
    new BasicNameValuePair("pwdtype""1"));
                nvps.add(
    new BasicNameValuePair("actiontype""LOGIN"));
                nvps.add(
    new BasicNameValuePair("logonsessid"""));

                httppost.setEntity(
    new UrlEncodedFormEntity(nvps, HTTP.UTF_8));

                response 
    = httpclient.execute(httppost);
                entity 
    = response.getEntity();
                System.out.println(
    "測(cè)試地址: " + a1);
                System.out.println(
    "Login form get: " + response.getStatusLine());
                EntityUtils.consume(entity);
                
                
    //讀出COOKIE信息
                System.out.println("Post logon cookies:");
                cookies 
    = httpclient.getCookieStore().getCookies();
                
    if (cookies.isEmpty()) {
                    System.out.println(
    "None");
                }
     else {
                    
    for (int i = 0; i < cookies.size(); i++{
                        System.out.println(
    "" + cookies.get(i).toString());
                    }

                }


            }
     finally {
                
    try {
                    httpclient.getConnectionManager().shutdown();
    // 總是關(guān)閉連接
                }
     catch (Exception ignore) {
                    System.out.println(ignore.getMessage());
                }

            }

        }


    posted @ 2012-06-06 17:09 japper 閱讀(4468) | 評(píng)論 (1)編輯 收藏

    表單提交的幾種方式

      1、<!--通用提交按鈕-->
      <input type="submit" value="提交">
      2、<!--自定義提交按鈕-->
      <button type="Submit">提交</button>
      3、<!--圖像按鈕-->
      <input type="image" src = "btn.png">
    說(shuō)明:用戶(hù)提交按鈕或圖像按鈕時(shí),就會(huì)提交表單。使用<input>或<button>都可以定義提交按鈕,只要將其特性的值設(shè)置為“submit”即可,而圖像按鈕則是通過(guò)<input>的type特性值設(shè)置為”image”來(lái)定義的。因此,只要我們單擊一下代碼生成的按鈕,就可以提交表單。

        4、阻止表單提交

    只要在表單中存在上面列出的任何一種按鈕,那么相應(yīng)表單控件擁有焦點(diǎn)的情況下,按回車(chē)鍵就可以提交表單。如果表單里沒(méi)有提交按鈕,按回車(chē)鍵不會(huì)提交表單。

      以這種方式提交表單時(shí),瀏覽器會(huì)在將請(qǐng)求發(fā)送給服務(wù)器之前觸發(fā)submit事件。這樣,我們就有機(jī)會(huì)驗(yàn)證表單數(shù)據(jù),并據(jù)以決定是否允許表單提交。阻止這個(gè)事件的默認(rèn)行為就可以取消表單提交。例如,下面代碼會(huì)阻止表單提交:

    var EventUtil = {
        addHandler: function (element, type, handler) {
            if (element.addEventListener) {
                element.addEventListener(type, handler, false);
            } else if (element.attachEvent) {
                element.attachEvent("on" + type, handler);
            } else {
                element["on" + type] = handler;
            }
        },
        getEvent: function (event) {
            return event ? event : window.event;
        },
        preventDefault: function (event) {
            if (event.preventDefault) {
                event.preventDefault();
            } else {
                event.returnValue = false;
            }
        }

    };

    var form = document.getElementById("myForm");
    EventUtil.addHandler(form, "submit", function () {
        //取得事件對(duì)象
        event = EventUtil.getEvent(event);
        //阻止默認(rèn)事件
        EventUtil.preventDefault(event);
    });  
    調(diào)用preventDefault()方法阻止了表單提交。一般來(lái)說(shuō),在表單數(shù)據(jù)無(wú)效而不能發(fā)送給服務(wù)器時(shí),可以使用這一技術(shù)。

    5、在JavaScript中,以編程方式調(diào)用submit()方法也可以提交表單。
        
    這種方式無(wú)需表單包含提交按鈕,任何時(shí)候都可以正常提交表單。來(lái)看一個(gè)例子:

      var form = document.getElementById("myForm");
      //提交表單
      form.submit();  
         在以調(diào)用submit()方法的形式提交表單時(shí),不會(huì)觸發(fā)submit事件,因此要記得在調(diào)用此方法之前先驗(yàn)證表單數(shù)字據(jù)。

      提交表單時(shí)可能出現(xiàn)的最大問(wèn)題,就是重復(fù)提交表單。在第一次提交表單后,如果長(zhǎng)時(shí)間沒(méi)有反映,用戶(hù)可能會(huì)變得不耐煩。這時(shí)候,他們也許會(huì)反復(fù)單擊提交按鈕。結(jié)果往往很麻煩(因?yàn)榉?wù)器要處理重復(fù)請(qǐng)求),或者造成錯(cuò)誤(如果是下了訂單,那么可能會(huì)多定好幾份)。
    解決這一問(wèn)題的辦法有兩個(gè):
         在第一次提交表單后就禁用提交按鈕;
         利用onsubmit事件處理程序取消后續(xù)的表單提交操作。

     

    posted @ 2012-06-06 10:16 japper 閱讀(11105) | 評(píng)論 (7)編輯 收藏

    java的System.getProperty()方法可以獲取的值

    java.version

    Java 運(yùn)行時(shí)環(huán)境版本

    java.vendor

    Java 運(yùn)行時(shí)環(huán)境供應(yīng)商

    java.vendor.url

    Java 供應(yīng)商的 URL

    java.home

    Java 安裝目錄

    java.vm.specification.version

    Java 虛擬機(jī)規(guī)范版本

    java.vm.specification.vendor

    Java 虛擬機(jī)規(guī)范供應(yīng)商

    java.vm.specification.name

    Java 虛擬機(jī)規(guī)范名稱(chēng)

    java.vm.version

    Java 虛擬機(jī)實(shí)現(xiàn)版本

    java.vm.vendor

    Java 虛擬機(jī)實(shí)現(xiàn)供應(yīng)商

    java.vm.name

    Java 虛擬機(jī)實(shí)現(xiàn)名稱(chēng)

    java.specification.version

    Java 運(yùn)行時(shí)環(huán)境規(guī)范版本

    java.specification.vendor

    Java 運(yùn)行時(shí)環(huán)境規(guī)范供應(yīng)商

    java.specification.name

    Java 運(yùn)行時(shí)環(huán)境規(guī)范名稱(chēng)

    java.class.version

    Java 類(lèi)格式版本號(hào)

    java.class.path

    Java 類(lèi)路徑

    java.library.path

    加載庫(kù)時(shí)搜索的路徑列表

    java.io.tmpdir

    默認(rèn)的臨時(shí)文件路徑

    java.compiler

    要使用的 JIT 編譯器的名稱(chēng)

    java.ext.dirs

    一個(gè)或多個(gè)擴(kuò)展目錄的路徑

    os.name

    操作系統(tǒng)的名稱(chēng)

    os.arch

    操作系統(tǒng)的架構(gòu)

    os.version

    操作系統(tǒng)的版本

    file.separator

    文件分隔符(在 UNIX 系統(tǒng)中是“/”)

    path.separator

    路徑分隔符(在 UNIX 系統(tǒng)中是“:”)

    line.separator

    行分隔符(在 UNIX 系統(tǒng)中是“/n”)

    user.name

    用戶(hù)的賬戶(hù)名稱(chēng)

    user.home

    用戶(hù)的主目錄

    user.dir

    用戶(hù)的當(dāng)前工作目錄



    獲取的代碼示例:


    01.public class SystemProperty { 
    02.    public static void main(String args[]) {    
    03.    System.out.println("java_vendor:" + System.getProperty("java.vendor"));    
    04.    System.out.println("java_vendor_url:"    
    05.             + System.getProperty("java.vendor.url"));    
    06.    System.out.println("java_home:" + System.getProperty("java.home"));    
    07.    System.out.println("java_class_version:"    
    08.             + System.getProperty("java.class.version"));    
    09.    System.out.println("java_class_path:"    
    10.            + System.getProperty("java.class.path"));    
    11.    System.out.println("os_name:" + System.getProperty("os.name"));    
    12.    System.out.println("os_arch:" + System.getProperty("os.arch"));    
    13.    System.out.println("os_version:" + System.getProperty("os.version"));    
    14.    System.out.println("user_name:" + System.getProperty("user.name"));    
    15.    System.out.println("user_home:" + System.getProperty("user.home"));    
    16.    System.out.println("user_dir:" + System.getProperty("user.dir"));    
    17.    System.out.println("java_vm_specification_version:"    
    18.            + System.getProperty("java.vm.specification.version"));    
    19.    System.out.println("java_vm_specification_vendor:"    
    20.            + System.getProperty("java.vm.specification.vendor"));    
    21.    System.out.println("java_vm_specification_name:"    
    22.            + System.getProperty("java.vm.specification.name"));    
    23.    System.out.println("java_vm_version:"    
    24.            + System.getProperty("java.vm.version"));    
    25.    System.out.println("java_vm_vendor:"    
    26.            + System.getProperty("java.vm.vendor"));    
    27.    System.out    
    28.            .println("java_vm_name:" + System.getProperty("java.vm.name"));    
    29.    System.out.println("java_ext_dirs:"    
    30.            + System.getProperty("java.ext.dirs"));    
    31.    System.out.println("file_separator:"    
    32.            + System.getProperty("file.separator"));    
    33.    System.out.println("path_separator:"    
    34.            + System.getProperty("path.separator"));    
    35.    System.out.println("line_separator:"    
    36.            + System.getProperty("line.separator"));    
    37.}    





    posted @ 2012-06-05 17:27 japper 閱讀(553) | 評(píng)論 (0)編輯 收藏

    僅列出標(biāo)題
    共3頁(yè): 上一頁(yè) 1 2 3 下一頁(yè) 
    主站蜘蛛池模板: 久久久久国色AV免费观看性色| 国产自偷亚洲精品页65页| 亚洲AV永久精品爱情岛论坛| 亚洲s码欧洲m码吹潮| 99久热只有精品视频免费看 | 亚洲一区无码精品色| 国产亚洲精品影视在线| 99精品视频在线观看免费专区| 亚洲AV无码一区二区三区国产| 国产精品久久亚洲不卡动漫| 免费在线中文日本| 老司机亚洲精品影视www| 亚洲第一综合天堂另类专| 国产精品免费观看| 亚洲成在人天堂一区二区| 一级做a爱过程免费视| 在线观看亚洲免费| 亚洲一区二区三区高清不卡| 色欲A∨无码蜜臀AV免费播| 亚洲自偷自偷偷色无码中文| 美女羞羞喷液视频免费| 在线免费观看一级片| 亚洲国产成人精品无码区在线网站| 久久免费精品视频| 国产亚洲精品久久久久秋霞| 无套内谢孕妇毛片免费看看| 看全色黄大色大片免费久久 | 亚洲JIZZJIZZ妇女| 三年片在线观看免费观看高清电影| 亚洲人成电影福利在线播放| 免费播放在线日本感人片| 国产亚洲精品自在线观看| 免费人成网上在线观看| 国产美女a做受大片免费| 国产精品亚洲一区二区麻豆| 国产在线观看免费观看不卡| 亚洲精品在线免费看| ww4545四虎永久免费地址| 亚洲明星合成图综合区在线| 最近中文字幕电影大全免费版| 亚洲国产精品一区|