……天天向上

好的想法总是无穷无尽

统计

留言簿(1)

阅读排行榜

评论排行榜

#

一个简单的分页展示系统优化总结

由于开发经验较少,数据量较大(千万级,日有40万条数据左右),导致这个分页jsp页面做的效率非常低,通过一系列的优化后,效果明显得到了提高,记录一下笔记:
1、分页获取的list对象集合由于没有预料到数据量的大小,是直接一次性读取然后展示到前台的,导致查询展示效率非常低:
更改SQL语句,改为按照当前需要展示的数据行数,通过SQL的ROWNUM来进行控制查询的数据量大小,(插入数据时,打开一个数据库连接即一次性插入100条数据(可以配置的模式)):
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、建立索引,建立索引的字段不能使用函数避免索引失效;
3、建立分区表,将间隔5天的数据放在一个表中:


----------------------删除原表,新建分区表
--删除表
drop table T_BRAS_XXXX;
commit;

--创建分区表:利用Oracle11g INTERVAL进行分区的方法
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'))
)
--保留原来创建的BRAS_XXXX_ID自增序列
--创建索引
create index idx_t_bras_XXXX on t_bras_XXXX(readtime,bras_address);
commit;

--查看分区是否成功:
select table_name,partition_name from user_tab_partitions where table_name
='T_BRAS_XXXX';

posted @ 2012-07-16 11:30 japper 阅读(502) | 评论 (0)编辑 收藏

ORACLE复制千万级数据表时用的存储过程

CREATE OR REPLACE PROCEDURE "LARGEDATA_INSERT" (ip_table_name   in varchar2, --目标表
                                          ip_table_column in varchar2, --目标字段
                                          ip_table_select in varchar2, --SELECT 查询语句
                                          return_result   out number --返回的结果1,表示成功,0表示失败
                                          ) as
--适合大数据量的插入模板  create Templates by chenzhoumin 20110614
  runTime number;--运行总次数
  i       number;--当前行数
  amount  number;--总行数
  s_sql   varchar2(10000);--SQL语句
  e_sql   varchar2(10000);--执行SQL语句
  countNumber number;--一次插入的数据量
begin
  --set serveroutput on size 20000000000000
  countNumber := 10000;
  return_result := 0; --开始初始化为0
  --核必逻辑内容,可根据具体的业务逻辑来定义,统计数据总行数
  s_sql := 'select count(1) from (' || ip_table_select || ')';
  execute immediate s_sql
    into amount;
  --每100万提交一次
  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('结束');
    return;
end;



以上测试通过。

posted @ 2012-07-09 15:06 japper 阅读(1926) | 评论 (0)编辑 收藏

ORACLE所在linux盘符空间不足的解决办法

ORACLE数据库空间不足,会发生登录出错,数据无法插入等错误发生,可以根据实际错误代码查询原因,不过更多是平时多看看数据库空间是否足够;
解决办法有两个:
1、使用linux命令或者工具增加空间或者增加硬盘,没有实际操作过;
2、给oracel数据库增加系统表空间和临时表空间,记录下操作方法:

如果临时表空间或者SYSTEM表空间不足,可以进行新增数据文件到其它盘符(增加opt盘符目录):
select ts#, name from v$datafile;--查看当前的表空间状况
select * from database_properties where property_name='DEFAULT_TEMP_TABLESPACE';--查看默认的临时文件
create temporary tablespace temp2 tempfile '/opt/oracle/oracle_tmp/temp02.dbf' size 5000M autoextend on next 100M; --新增临时文件
alter database default temporary tablespace "TEMP2";  --修改默认临时文件设置
alter database tempfile '/home/oracle/oracle/oradata/portal/temp01.dbf' autoextend off;  --关闭原来的临时文件自增长
增加系统表空间:
alter tablespace SYSTEM add datafile '/opt/oracle/oracle_tmp/system02.dbf' size 500M autoextend on next 5M;

如果startup数据库时,提示:prifile文件找不到,可以从一个$ORACLE_BASE/admin/portal/pfile目录下拷贝内容过去就可以(注意文件命名和原来使用的保持一样,只是内容不同):
当前正在使用的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 阅读(1307) | 评论 (0)编辑 收藏

oracle 临时表空间的增删改查

oracle 临时表空间的增删改查

1、查看临时表空间 (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用户查看

2、缩小临时表空间大小
alter database tempfile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TELEMT\TEMP01.DBF' resize 100M;

3、扩展临时表空间:
方法一、增大临时文件大小:
SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ resize 100m;
方法二、将临时数据文件设为自动扩展:
SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp01.dbf’ autoextend on next 5m maxsize unlimited;
方法三、向临时表空间中添加数据文件:
SQL> alter tablespace temp add tempfile ‘/u01/app/oracle/oradata/orcl/temp02.dbf’ size 100m;

4、创建临时表空间
SQL> create temporary tablespace temp1 tempfile ‘/u01/app/oracle/oradata/orcl/temp11.dbf’ size 10M;

5、更改系统的默认临时表空间:
--查询默认临时表空间
select * from database_properties where property_name='DEFAULT_TEMP_TABLESPACE';
--修改默认临时表空间
alter database default temporary tablespace temp1;
所有用户的默认临时表空间都将切换为新的临时表空间:
select username,temporary_tablespace,default_ from dba_users;
--更改某一用户的临时表空间:
alter user scott temporary tablespace temp;

6、删除临时表空间
删除临时表空间的一个数据文件:
SQL> alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp02.dbf’ drop;
删除临时表空间(彻底删除):
SQL> drop tablespace temp1 including contents and datafiles cascade constraints;

7、查看临时表空间的使用情况(GV_$TEMP_SPACE_HEADER视图必须在sys用户下才能查询)
GV_$TEMP_SPACE_HEADER视图记录了临时表空间的使用大小与未使用的大小
dba_temp_files视图的bytes字段记录的是临时表空间的总大小
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语句
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、查看当前临时表空间使用大小与正在占用临时表空间的sql语句
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、临时表空间组介绍
  1)创建临时表空间组:
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)查询临时表空间组:dba_tablespace_groups视图
select * from dba_tablespace_groups;
GROUP_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
GROUP1                         TEMPTS1
GROUP2                         TEMPTS2

 3)将表空间从一个临时表空间组移动到另外一个临时表空间组:
alter tablespace tempts1 tablespace group GROUP2 ;
select * from dba_tablespace_groups;

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

 4)把临时表空间组指定给用户
alter user scott temporary tablespace GROUP2;

 5)在数据库级设置临时表空间
alter database <db_name> default temporary tablespace GROUP2;

 6)删除临时表空间组 (删除组成临时表空间组的所有临时表空间)
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、对临时表空间进行shrink(11g新增的功能)
--将temp表空间收缩为20M
alter tablespace temp shrink space keep 20M;
--自动将表空间的临时文件缩小到最小可能的大小
ALTER TABLESPACE temp SHRINK TEMPFILE ’/u02/oracle/data/lmtemp02.dbf’;

临时表空间作用
Oracle临时表空间主要用来做查询和存放一些缓冲区数据。临时表空间消耗的主要原因是需要对查询的中间结果进行排序。
重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql语句的执行,temp表空间会一直增长。直到耗尽硬盘空间。
网上有人猜测在磁盘空间的分配上,oracle使用的是贪心算法,如果上次磁盘空间消耗达到1GB,那么临时表空间就是1GB。
也就是说当前临时表空间文件的大小是历史上使用临时表空间最大的大小。

临时表空间的主要作用:
  索引create或rebuild;
  Order by 或 group by;
  Distinct 操作;
  Union 或 intersect 或 minus;
  Sort-merge joins;
  analyze.

posted @ 2012-06-28 14:54 japper 阅读(31427) | 评论 (2)编辑 收藏

在JQuery中使用jsp页面的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();//获取本页面其他标签的值 
window.location.href="xx.php?param1="+p1+"¶m2="+p2+"";//页面跳转并传参 
 }

}

</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();}); //为指定按钮添加数据加载动态显示:即将DIV显示出来
        $("#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" >每页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">每页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">每页30行</option>
              <option selected="selected" value="">---请选择---</option>
              </select>

posted @ 2012-06-15 14:52 japper 阅读(2149) | 评论 (0)编辑 收藏

测试JAVA中SELECT COUNT(*) FROM XXX得到的ResultSet行数

初学的知识,怕忘记了,记录下:
    /**
     *  测试SELECT COUNT(*)返回int类型的数据
     
*/


    
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"); //通过指定别名返回行数
                number1=rs.getInt(1); //通过索引返回行数
            }

        }


    }

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

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

        
return number;
    }

在主方法中执行:
   BrasDatabase bd=new BrasDatabase();
   int returnNum=bd.testRturnNumber();
   System.out.println("返回总行数:"+returnNum);

以上两种方式都可以正常返回行数。

posted @ 2012-06-07 11:24 japper 阅读(3554) | 评论 (0)编辑 收藏

来点HTML基础-HTML表单(Forms)属性及用法

HTML表单(Form)是HTML的一个重要部分,主要用于采集和提交用户输入的信息。

举个简单的例子,一个让用户输入姓名的HTML表单(Form)。示例代码如下:

<form action="http://www.blabla.cn/asdocs/html_tutorials/yourname.asp" method="get">

请输入你的姓名:

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

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

</form>

学习HTML表单(Form)最关键要掌握的有三个要点:

表单控件(Form Controls)
Action
Method
先说表单控件(Form Controls),通过HTML表单的各种控件,用户可以输入文字信息,或者从选项中选择,以及做提交的操作。比如上面的例句里,input type= "text"就是一个表单控件,表示一个单行输入框。

用户填入表单的信息总是需要程序来进行处理,表单里的action就指明了处理表单信息的文件。比如上面例句里的http://www.linkzj.cn/asdocs/html_tutorials/yourname.asp

至于method,表示了发送表单信息的方式。method有两个值:get和post。get的方式是将表单控件的name/value信息经过编码之后,通过URL发送(你可以在地址栏里看到)。而post则将表单的内容通过http发送,你在地址栏看不到表单的提交信息。那什么时候用get,什么时候用post呢?一般是这样来判断的,如果只是为取得和显示数据,用get;一旦涉及数据的保存和更新,那么建议用post。

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

input type="text" 单行文本输入框
input type="submit" 将表单(Form)里的信息提交给表单里action所指向的文件
input type="checkbox" 复选框
input type="radio" 单选框
select 下拉框
textArea 多行文本输入框
input type="password" 密码输入框(输入的文字用*表示)
表单控件(Form Control):单行文本输入框(input type="text")
单行文本输入框允许用户输入一些简短的单行信息,比如用户姓名
。例句如下:

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

表单控件(Form Control):
复选框(input type="checkbox")
复选框允许用户在一组选项里,选择多个。示例代码:

<input type="checkbox" name="fruit" value ="apple">苹果<br>

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

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

用checked表示缺省已选的选项。

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

表单控件(Form Control):单选框(input type="radio")
使用单选框,让用户在一组选项里只能选择一个。示例代码:

<input type="radio" name="fruit" value = "Apple">苹果<br>

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

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

用checked表示缺省已选的选项。

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

表单控件(Form Control):下拉框(select)
下拉框(Select)既可以用做单选,也可以用做复选。单选例句如下:

<select name="fruit" >

<option value="apple">苹果

<option value="orange">桔子

<option value="mango">芒果

</select>

如果要变成复选,加muiltiple即可。用户用Ctrl来实现多选。例句:

<select name="fruit" multiple>

用户还可以用size属性来改变下拉框(Select)的大小。

表单控件(Form Control):多行输入框(textarea)
多行输入框(textarea)主要用于输入较长的文本信息。例句如下:

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

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

表单控件(Form Control):密码输入框(input type="password")
密码输入框(input type="password")主要用于一些保密信息的输入,比如密码。因为用户输入的时候,显示的不是输入的内容,而是黑点符号。。例句如下:

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

表单控件(Form Control):提交(input type="submit")
通过提交(input type=submit)可以将表单(Form)里的信息提交给表单里action所指向的文件。例句如下:

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

表单控件(Form Control):图片提交(input type="image")
input type=image 相当于 input type=submit,不同的是,input type=image 以一个图片作为表单的提交按钮,其中 src 属性表示图片的路径。

<input type="image" src ="http://www.blabla.cn/images/icons/go.gif"  alt = "提交" NAME="imgsubmit">

posted @ 2012-06-07 09:29 japper 阅读(881) | 评论 (0)编辑 收藏

GET和POST两种提交表单的方式说明

1.Get方式
这种方式是最简单的参数传递方式。例如:
http://www.javaweb.cc/get.do?a=3&b=5&c=7

这个url中,a、b和c是url参数,具体的说是参数名,与之用“=”隔开的是对应的参数值。也就是说参数a的值为3、参数b的值为5、参数c的值为7。get.do是请求地址,紧跟这个地址的参数a需要用“?”作为分隔符,其余参数用“&”做分隔符。

这种get请求发起后,服务器端可以通过request.getParameter()方法来获得参数值。如要获得参数a的值可以通过request.getParameter("a");


2.Post方式
相比get方式,post方式更为隐蔽。例如:http://www.javaweb.cc/post.do
在这个url中,你看不到任何参数,真正的参数隐藏在Http请求的数据体中。如果了解网络监听的话,就会对这一点深有体会。
我们举一个简单的例子:通过表单做登录操作。
我们简化一个登录表单:

<form action="login.do" method="post">
<ul>
<li><label for="username">用户名</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个字段,用户名(username)和密码(password)
注意form标签中的method参数值是post!

即便是表单,在服务器端仍然可以通过request.getParameter()方法来获得参数值。
Post方式,其实是将表单字段和经过编码的字段值经过组合以数据体的方式做了参数传递。

经过一番阐述,相信大家对两种网络参数传递方式都有所了解了。
Get方式比较简单,通过构建一个简单HttpURLConnection就可以获得,我们暂且不说。
我们主要来描述一下如何通过java代码构建一个表单提交。
仔细研究表单提交时所对应的http数据体,发现其表单字段是以如下方式构建的:

arg0=urlencode(value0)&arg1=urlencode(value1)
当然,尤其要注意字段名,参数名只不能使用中文这类字符。
3、通过httpclient来模拟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);
            
//这里需要生成并传递一个COOKIE过去
            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(
"测试地址: " + 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();
// 总是关闭连接
            }
 catch (Exception ignore) {
                System.out.println(ignore.getMessage());
            }

        }

    }


posted @ 2012-06-06 17:09 japper 阅读(4451) | 评论 (1)编辑 收藏

表单提交的几种方式

  1、<!--通用提交按钮-->
  <input type="submit" value="提交">
  2、<!--自定义提交按钮-->
  <button type="Submit">提交</button>
  3、<!--图像按钮-->
  <input type="image" src = "btn.png">
说明:用户提交按钮或图像按钮时,就会提交表单。使用<input>或<button>都可以定义提交按钮,只要将其特性的值设置为“submit”即可,而图像按钮则是通过<input>的type特性值设置为”image”来定义的。因此,只要我们单击一下代码生成的按钮,就可以提交表单。

    4、阻止表单提交

只要在表单中存在上面列出的任何一种按钮,那么相应表单控件拥有焦点的情况下,按回车键就可以提交表单。如果表单里没有提交按钮,按回车键不会提交表单。

  以这种方式提交表单时,浏览器会在将请求发送给服务器之前触发submit事件。这样,我们就有机会验证表单数据,并据以决定是否允许表单提交。阻止这个事件的默认行为就可以取消表单提交。例如,下面代码会阻止表单提交:

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 () {
    //取得事件对象
    event = EventUtil.getEvent(event);
    //阻止默认事件
    EventUtil.preventDefault(event);
});  
调用preventDefault()方法阻止了表单提交。一般来说,在表单数据无效而不能发送给服务器时,可以使用这一技术。

5、在JavaScript中,以编程方式调用submit()方法也可以提交表单。
    
这种方式无需表单包含提交按钮,任何时候都可以正常提交表单。来看一个例子:

  var form = document.getElementById("myForm");
  //提交表单
  form.submit();  
     在以调用submit()方法的形式提交表单时,不会触发submit事件,因此要记得在调用此方法之前先验证表单数字据。

  提交表单时可能出现的最大问题,就是重复提交表单。在第一次提交表单后,如果长时间没有反映,用户可能会变得不耐烦。这时候,他们也许会反复单击提交按钮。结果往往很麻烦(因为服务器要处理重复请求),或者造成错误(如果是下了订单,那么可能会多定好几份)。
解决这一问题的办法有两个:
     在第一次提交表单后就禁用提交按钮;
     利用onsubmit事件处理程序取消后续的表单提交操作。

 

posted @ 2012-06-06 10:16 japper 阅读(11079) | 评论 (7)编辑 收藏

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

java.version

Java 运行时环境版本

java.vendor

Java 运行时环境供应商

java.vendor.url

Java 供应商的 URL

java.home

Java 安装目录

java.vm.specification.version

Java 虚拟机规范版本

java.vm.specification.vendor

Java 虚拟机规范供应商

java.vm.specification.name

Java 虚拟机规范名称

java.vm.version

Java 虚拟机实现版本

java.vm.vendor

Java 虚拟机实现供应商

java.vm.name

Java 虚拟机实现名称

java.specification.version

Java 运行时环境规范版本

java.specification.vendor

Java 运行时环境规范供应商

java.specification.name

Java 运行时环境规范名称

java.class.version

Java 类格式版本号

java.class.path

Java 类路径

java.library.path

加载库时搜索的路径列表

java.io.tmpdir

默认的临时文件路径

java.compiler

要使用的 JIT 编译器的名称

java.ext.dirs

一个或多个扩展目录的路径

os.name

操作系统的名称

os.arch

操作系统的架构

os.version

操作系统的版本

file.separator

文件分隔符(在 UNIX 系统中是“/”)

path.separator

路径分隔符(在 UNIX 系统中是“:”)

line.separator

行分隔符(在 UNIX 系统中是“/n”)

user.name

用户的账户名称

user.home

用户的主目录

user.dir

用户的当前工作目录



获取的代码示例:


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 阅读(537) | 评论 (0)编辑 收藏

仅列出标题
共3页: 上一页 1 2 3 下一页