tinguo002

 

java.net.SocketException: Connection reset 解决方法

推荐好文:http://www.cnblogs.com/zmc/p/3295761.html

当数据库连接池中的连接被创建而长时间不使用的情况下,该连接会自动回收并失效,但客户端并不知道,在进行数据库操作时仍然使用的是无效的数据库连接,这样,就导致客户端程序报“ java.sql.SQLException: Io 异常: Connection reset” 或“java.sql.SQLException 关闭的连接”异常。


解决办法:客户端在使用一个无效的连接时会先对该连接进行测试,如果发现该连接已经无效,则重新从连接池获取有效数据库连接来使用。

在tomcat的context.xml里面设置数据源时候可参考:

 <Resource auth="Container"
  driverClassName="oracle.jdbc.OracleDriver"
  type="javax.sql.DataSource"
  url="jdbc:oracle:thin:@11.11.11.45:1521:orcl"
  name="jdbc/login"
  username="login"
  password="login"
  maxActive="15"
  maxIdle="10"
  maxWait="-1"
  minIdle="2"
  removeAbandonedTimeout="5"
  testOnBorrow="true"
  testWhileIdle="true"
  testOnReturn="true"
  removeAbandoned="true"
  logAbandoned="true"
  validationQuery="select 1 from dual"
 /> 
 
 
参考:http://www.cnblogs.com/younes/archive/2012/06/01/2529483.html




DBCP数据库连接失效的解决方法(Io 异常:Connection reset)


网上很多评论说DBCP有很多BUG,但是都没有指明是什么BUG,只有一部分人说数据库如果因为某种原因断掉后再DBCP取道的连接都是失效的连接,而没有重新取。有的时候会报Io 异常:Connection reset。

解决方法:

spring中datasource的配置如下:
    <bean id="dispatchdataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
    <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:myserver" />
    <property name="username" value="user1" />
    <property name="password" value="pwd" />
    <property name="maxActive" value="10000" />
    <property name="maxIdle" value="30" />
     <property name="minIdle" value="2" />
    <property name="maxWait" value="600000" />
    <property name="testOnBorrow" value="true"/>
    <property name="testWhileIdle" value="true"/>
    <property name="validationQuery" value="select 1 from dual"/>
</bean>

 

分析:

DBCP使用apache的对象池ObjectPool作为连接池的实现,有以下主要的方法

Object borrowObject() throws Exception;从对象池取得一个有效对象

void returnObject(Object obj) throws Exception;使用完的对象放回对象池

void invalidateObject(Object obj) throws Exception;使对象失效

void addObject() throws Exception;生成一个新对象


ObjectPool的一个实现就是GenericObjectPool,这个类使用对象工厂PoolableObjectFactory实现对象的生成,失效检查等等功能,以其实现数据库连接工厂PoolableConnectionFactory做以说明,主要方法:

     Object makeObject() throws Exception; 使用ConnectionFactory生成新连接

     void destroyObject(Object obj) throws Exception;关闭连接

     boolean validateObject(Object obj); 验证连接是否有效,如果_validationQuery不空,则使用该属性作为验证连接是否有效的sql语句,查询数据库

     void activateObject(Object obj) throws Exception;激活连接对象

     void passivateObject(Object obj) throws Exception; 关闭连接生成过的Statement和ResultSet,使连接处于非活动状态

    而GenericObjectPool有几个主要属性

     _timeBetweenEvictionRunsMillis:失效检查线程运行时间间隔,默认-1

     _maxIdle:对象池中对象最大个数

     _minIdle:对象池中对象最小个数

     _maxActive:可以从对象池中取出的对象最大个数,为0则表示没有限制,默认为8

     在构造GenericObjectPool时,会生成一个内嵌类Evictor,实现自Runnable接口。如果 _timeBetweenEvictionRunsMillis大于0,每过_timeBetweenEvictionRunsMillis毫秒 Evictor会调用evict()方法,检查对象的闲置时间是否大于 _minEvictableIdleTimeMillis毫秒(_minEvictableIdleTimeMillis小于等于0时则忽略,默认为30 分钟),是则销毁此对象,否则就激活并校验对象,然后调用ensureMinIdle方法检查确保池中对象个数不小于_minIdle。在调用 returnObject方法把对象放回对象池,首先检查该对象是否有效,然后调用PoolableObjectFactory 的passivateObject方法使对象处于非活动状态。再检查对象池中对象个数是否小于_maxIdle,是则可以把此对象放回对象池,否则销毁此对象。

     还有几个很重要的属性,_testOnBorrow、_testOnReturn、_testWhileIdle,这些属性的意义是取得、返回对象和空闲时是否进行验证,检查对象是否有效,默认都为false即不验证。所以当使用DBCP时,数据库连接因为某种原因断掉后,再从连接池中取得连接又不进行验证,这时取得的连接实际已经时无效的数据库连接了。网上很多说 DBCP的bug应该都是如此吧,只有把这些属性设为true,再提供_validationQuery语句就可以保证数据库连接始终有效了,oracle数据库可以使用SELECT COUNT(*) FROM DUAL,不过DBCP要求_validationQuery语句查询的记录集必须不为空,可能这也可以算一个小小的BUG,其实只要_validationQuery语句执行通过就可以了。

参考:http://hi.baidu.com/dobodo/item/7d95e3384d181cc4392ffab5



Tomcat Resource可配置的属性




posted @ 2014-06-27 11:43 一堣而安 阅读(12505) | 评论 (0)编辑 收藏

web 打印

http://www.jb51.net/article/21444.htm
http://www.downdiy.com/kfyy/php/20140323/9e7b9b20201d3a49bb835efc2edc23d3.html  保持线条被打印

posted @ 2014-06-26 14:40 一堣而安 阅读(214) | 评论 (0)编辑 收藏

Tomcat6.0 连接池的配置

 Tomcat6.0 连接池的配置

1.本人当前使用的Tomcat版本为:6.0.20,oracle为稳定的9i版本

2.下文为方便起见,依习惯以%Tomcat_Home%表示Tomcat安装的目录,本人安装目录为“E:\Program Files\WindowsXP\tomcat6”

配置步骤如下:

1.Tomcat 6的配置和以前的不同了,不推荐在server.xml中进行配置,而是在%Tomcat_Home%\webapps\yourApp\META-INF \context.xml中进行配置才是更好的方法。而不是以前版本%Tomcat_Home%\conf下的context.xml文件。这样就可以在不同的web应用下单独配置连接池了,且Tomcat会自动重载。当然你也可以更改%Tomcat_Home%\conf下的context.xml文件,将所有web应用下的连接池进行统一配置。

2.将代码修改如下:

view plaincopy to clipboardprint?
<Context reloadable="true"> 
    <WatchedResource>WEB-INF/web.xml</WatchedResource> 
    <Resource name="jdbc/oracleds" auth="Container" type="javax.sql.DataSource"   
    maxActive="100"   
    maxIdle="30" 
    maxWait="10000" 
    username="scott"   
    password="tiger" 
    driverClassName="oracle.jdbc.driver.OracleDriver" 
    url="jdbc:oracle:thin:@localhost:1521:ora9"/> 
</Context> 
<Context reloadable="true">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
 <Resource name="jdbc/oracleds" auth="Container" type="javax.sql.DataSource"
 maxActive="100"
 maxIdle="30"
 maxWait="10000"
 username="scott"
 password="tiger"
 driverClassName="oracle.jdbc.driver.OracleDriver"
 url="jdbc:oracle:thin:@localhost:1521:ora9"/>
</Context>

name 为当前数据源JNDI的名字,可以随意设定;

auth 为验证方式;

type 资源类型;

driverClassName 为Oracle驱动引用;

maxActiv 为连接池最大激活的连接数,设为0表示无限制;

maxIdle 表示即使没有数据库连接时依然可以保持30个空闲的连接,而不被清除,随时处于待命状态。设为0表示无限制;

maxWait 为连接最大的等待时间,单位毫秒,取值10000,表示10000秒后超时。设为-1

              表示无限制。;

username 为oracle数据库的一个用户名;

password 为username的密码;

url 为连接oracle的连接地址;

注:本人尝试将代码“driverClassName="oracle.jdbc.driver.OracleDriver"”改为“driverClassName="oracle.jdbc.OracleDriver"”程序依然运行正常,刚开始以为老师的代码有问题

3.在程序中的调用形式为:

view plaincopy to clipboardprint?
Context context = new InitialContext();  
DataSource ds = (DataSource)context.lookup("java:/comp/env/jdbc/oracleds");  
Connection conn = ds.getConnection(); 
Context context = new InitialContext();
DataSource ds = (DataSource)context.lookup("java:/comp/env/jdbc/oracleds");
Connection conn = ds.getConnection();

注:“java:/comp/env/jdbc/oracleds”红色标记文字为步骤1里设置的Resource name

则可以将建立connection的方式以上述形式取代传统方式:

view plaincopy to clipboardprint?
String driver = "oracle.jdbc.driver.OracleDriver";  
String url = "jdbc:oracle:thin:@localhost:1521:ora9";  
String username = "scott";  
String password = "tiger";  
Class.forName(driver);  
Connection conn = DriverManager.getConnection(url, username, password); 
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:ora9";
String username = "scott";
String password = "tiger";
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, username, password);

4.另外还需将用到的jdbc驱动类库导入到%Tomcat_Home%\lib目录下

否则会抛出如下异常:
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver'

依上述步骤就能成功的配置Tomcat6.0 连接池,还有网友贴文说需

在web.xml文件中的web-app节点下加入如下代码形式:
<resource-ref>
<res-ref-name>jdbc/myoracle</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
</resource-ref>

因本人未添加此项,程序依然正确,故本人认为此步骤为非必要项

 ---------------------------------------------------------------------------

今天需要在另一台机器上重新部署系统,重新设置db的连接池。当我把tomcat拷贝到那台机器,并且修改META-INF\context.xml,然后重新启动tomcat,但发现系统连接的仍然是老的db。再次检查了META-INF\context.xml文件,确信了这个文件已经正确设置db连接了,这也说明这个文件并没有真正起作用。查看了tomcat下conf\context.xml也没有设置db的连接池。那是哪个文件在起作用呢?折腾了办法,后来发现tomcat在conf\Catalina\localhost下生成了一个和原来META-INF\context.xml相同内容的文件,怀疑一定是这个文件在起作用?删除conf\Catalina\localhost目录,重启tomcat,问题消失。

转载一篇tomcat加载类的顺序

 

 

bin:存放启动和关闭tomcat的脚本文件; 

/conf:存放tomcat的各种配置文件,比如:server.xml 

/server/lib:存放tomcat服务器所需要的各种jar文件(jar文件只可被tomcat 服务器访问) 

/server/webapps:存放tomcat自带的两个web应用:admin应用和manager应用。 

/common/lib:存放tomcat服务器以及所有web应用都可以访问的jar文件夹(web和tomcat服务器都可访问此jar) 

/shared/lib:存放web都可访问的jar文件。(可以被所有的web访问,但不能被tomcat访问) 

/logs:存放tomcat的日志文件 

/webapps:当发布web应用时,默认情况下把web应用文件放于此目录下 

/work:tomcat把由jsp生成的Servlet放于此目录 

另:在web应用中,WEB-Inf目录下,也可以建立lib子目录,在此子目录下可以存放各种jar文件,这些jar文件只能被当前web应用访问。其中,在web-inf目录下的lib与classes目录,Tomcat类装载器先装载classes目录下的类,再装载lib目录下的类。因为类同名时,classes优先。 

 

其中jsp运行时,查找class的顺序为:项目文件夹(WEB-INF\lib)===》容器文件夹(tomcat\common\lib)==》jdk文件夹(jdk\jre\lib\ext) 

 

Tomcat的class加载的优先顺序一览 

1.最先是$JAVA_HOME/jre/lib/ext/下的jar文件。 

2.环境变量CLASSPATH中的jar和class文件。 

3.$CATALINA_HOME/common/classes下的class文件。 

4.$CATALINA_HOME/commons/endorsed下的jar文件。 

5.$CATALINA_HOME/commons/i18n下的jar文件。 

6.$CATALINA_HOME/common/lib 下的jar文件。 

(JDBC驱动之类的jar文件可以放在这里,这样就可以避免在server.xml配置好数据源却出现找不到JDBC Driver的情况。) 

7.$CATALINA_HOME/server/classes下的class文件。 

8.$CATALINA_HOME/server/lib/下的jar文件。 

9.$CATALINA_BASE/shared/classes 下的class文件。 

10.$CATALINA_BASE/shared/lib下的jar文件。 

11.各自具体的webapp /WEB-INF/classes下的class文件。 

12.各自具体的webapp /WEB-INF/lib下的jar文件。 

 

class的搜寻顺序如下 

------------- 

/WEB-INF/classes of your web application 

/WEB-INF/lib/*.jar of your web application 

$CATALINA_HOME/common/classes 

$CATALINA_HOME/common/endorsed/*.jar 

$CATALINA_HOME/common/i18n/*.jar 

$CATALINA_HOME/common/lib/*.jar 

$CATALINA_BASE/shared/classes 

$CATALINA_BASE/shared/lib/*.jar 

-------------- 

因此放在不同webapp里的class文件,会被classloader加载成不同的实例。 

例如假设下面两个不同内容的class。分别放在不同的webapp的class目录下。 

package com.lizongbo; 

public class TestClass { 

  private String NAME="lizongbo"; 

 

package com.lizongbo; 

public class TestClass { 

  private String NAME="li_zongbo"; 

 

在不同的webapp得到的com.lizongbo.NAME结果是不同的,且互不影响。 

但是注意,以下包名开头的class例外: 

javax.* 

org.xml.sax.* 

org.w3c.dom.* 

org.apache.xerces.* 

org.apache.xalan.* 

 

ps,注意.在各个jar中的\META-INF\MAINFEST.MF文件里Class-Path键值对,也会提供jar的加载优先顺序。 

例如某jar的MAINFEST.MF内容如下: 

Manifest-Version: 1.0 

Created-By: lizongbo 

Class-Path: commons-beanutils.jar 

Class-Path: commons-collections.jar 

Class-Path: commons-dbcp.jar 

Class-Path: commons-digester.jar 

Class-Path: commons-logging.jar 

Class-Path: commons-pool.jar 

Class-Path: commons-services.jar 

Class-Path: commons-validator.jar 

Class-Path: jakarta-oro.jar 

Main-Class: com.lizongbo.MyTestClass 

 

 

那么在加载这个jar的时候,会先在此jar所在目录下依次先加载commons-beanutils.jar,commons-collections.jar。。。等jar文件。 

 

在不同的地方放置jar和class可能会产生意想不到的后果,,尤其是不同版本的jar文件,因此在实际应用部署web应用时候要特别留心. 

 

例如 使用javamail常见的一个出错信息: 

javax.mail.NoSuchProviderException: No provider for smtp 

其真实原因就很可能如下: 

在不同的加载jar的目录下放置了不同版本的mail.jar,比如一个是javamail1.3.1的mail.jar 

在D:\jakarta-tomcat-5.5.8\common\lib下,而另外一个是javamail1.3.2的mail.jar在 

D:\jakarta-tomcat-5.5.8\webapps\lizongbo\WEB-INF/lib下, 

那么lizongbo这个webapp中使用到javamail进行邮件发送的时候,便会出现No provider for smtp的错误。



详细出处参考:http://www.blogjava.net/gm_jing/articles/308828.html

posted @ 2014-06-18 14:54 一堣而安 阅读(482) | 评论 (0)编辑 收藏

时间比较




import java.util.Date;
import java.text.ParseException;搜索
import java.text.SimpleDateFormat;

public class TimeCompare {

public static int Hour(Date time){
SimpleDateFormat st=new SimpleDateFormat("yyyyMMddHH");
return Integer.parseInt(st.format(time));
}

public static Date StringToDate(String s){
Date time=new Date();
SimpleDateFormat sd=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
try{
time=sd.parse(s);
}
catch (ParseException e) {
System.out.println("输入的日期格式有误!");
}
return time;
}

public static void main(String[] args) {
String a="2012/01/01 18:08:20";
String b="2012/01/01 18:01:20";
String c="2012/01/02 01:01:01";
if(Hour(StringToDate(a))<=Hour(StringToDate(b))&&Hour(StringToDate(a))<Hour(StringToDate(c)))
System.out.println("成功");
else
System.out.println("失败");
}
}

posted @ 2014-05-26 17:47 一堣而安 阅读(146) | 评论 (0)编辑 收藏

eclipse自动更新的取消方法:

详细参考:http://blog.csdn.net/fengyifei11228/article/details/6942316

eclipse自动更新的取消方法:

 

1. window --> preferences --> General --> Startup and Shutdown --> 在列表中找到 "Automatic Updates Scheduler " 项去掉前面的勾。

 

如果安装了Myeclipse,那么还需要执行如下操作

2. Window --> Preferences --> Myeclipse Enterprise Workbench --> Maven4Myeclipse --> Maven --> "Download repository index updates on startup" 去掉前面的勾。

 

3. Window --> Preferences --> Myeclipse Enterprise Workbench --> Maven4Myeclipse --> MyEclipse Dashboard --> "Show MyEclipse Dashboard on startup" 去掉前面的勾。

posted @ 2014-05-25 09:04 一堣而安 阅读(3935) | 评论 (0)编辑 收藏

iframe应用session丢失的问题

详细参考:http://www.cnblogs.com/fengqingtao/archive/2011/03/16/1986174.html

iframe应用session丢失的问题

在网站群的建设中,各子站需要共享主站的footer等公共信息。同时主站的后台管理也集成了各子站的管理,采取的方式是使用iframe嵌入各站的页面。在本机开发环境中,没有出现任何的问题。但是一放到测试环境中,便遇到session丢失的问题。
        环境:应用服务器采用tomcat6.0,各个站点单独使用一个应用服务器,部署在一台物理服务器上。外部访问采用同一个IP,但是不同的端口。
       起初以为,IE它的安全策略默认是会把iframe中的页面站点认为是不可信任的,它会阻止该站点传过来的cookie(如果你在iframe中的URL跳转是用的localhost,则不会被阻挡),所以因为没法使用cookie了,session便失效了。解决的方法是在过滤器,或者被嵌入的页面内加入属性为P3P的header信息。java为:response.addHeader("P3P","CP=CAO PSA OUR");但是依然没有成功。网上的解决方案都是这么说,况且自己以前还弄过,都成功过,这次怎么弄都不好。
        今天脑子安静下来,仔细的分析这里面的原因。如果是IE的安全限制,但是火狐、google浏览器没有这样的限制,为什么这两个浏览器也出现这样的情况。这肯定不仅仅和跨域引起的P3P的安全问题有关。于是在本机测试,通过iframe引入测试环境中的链接,设置了P3P,发现一切正常。这就更说明了,测试环境中的问题绝对不是P3P的问题了。而且使用了同一个IP,也应该没有跨域的说法。那原因到底是什么呢?
        慢慢的,我将视线注意到了端口上。这些网站的访问方式都是:同一IP+不同端口,难道和端口有关系。上网搜,关于这方面的内容太少了,但是总算在零星的资源中,找到了里面的原因。IP相同的两个session对应的cookie是一样的,而不幸的是sessionID就保存在cookie中,这样先访问A,再访问B的时候,B的sessionid会覆盖A的sessionid。这个事情没办法解决,所以你不要搞两个端口,最好是搞两个IP。原来都是cookie惹的祸,它不会区分端口,造成这多个站点不断的后来的覆盖前面的,从而造成session的丢失。问题解决了,将相互有引用的应用架构在不同的虚拟主机中,或者映射不同的IP。

posted @ 2014-05-22 23:07 一堣而安 阅读(239) | 评论 (0)编辑 收藏

win7_oracle11g_64位连接32位PLSQL_Developer

文章参数:http://jingyan.baidu.com/article/fb48e8be4c7c206e622e1491.html

posted @ 2014-05-13 21:42 一堣而安 阅读(199) | 评论 (0)编辑 收藏

Java DES 加密和解密源码

文章参考:http://www.oschina.net/code/snippet_727646_18383

Java密码学结构设计遵循两个原则:

1) 算法的独立性和可靠性。

2) 实现的独立性和相互作用性。

算法的独立性是通过定义密码服务类来获得。用户只需了解密码算法的概念,而不用去关心如何实现这些概念。实现的独立性和相互作用性通过密码服务提供器来实现。密码服务提供器是实现一个或多个密码服务的一个或多个程序包。软件开发商根据一定接口,将各种算法实现后,打包成一个提供器,用户可以安装不同的提供器。安装和配置提供器,可将包含提供器的ZIPJAR文件放在CLASSPATH,再编辑Java安全属性文件来设置定义一个提供器。


DES算法及如何利用DES算法加密和解密类文件的步骤

DES算法简介
DESData Encryption Standard)是发明最早的最广泛使用的分组对称加密算法。DES算法的入口参数有三个:KeyDataMode。其中Key8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;ModeDES的工作方式,有两种:加密或解密。

package com.afreon.util;

import java.io.IOException;
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class DesUtil {

    
private final static String DES = "DES";

    
public static void main(String[] args) throws Exception {
        String data 
= "123 456";
        String key 
= "wang!@#$%";
        System.err.println(encrypt(data, key));
        System.err.println(decrypt(encrypt(data, key), key));

    }

    
    
/**
     * Description 根据键值进行加密
     * 
@param data 
     * 
@param key  加密键byte数组
     * 
@return
     * 
@throws Exception
     
*/

    
public static String encrypt(String data, String key) throws Exception {
        
byte[] bt = encrypt(data.getBytes(), key.getBytes());
        String strs 
= new BASE64Encoder().encode(bt);
        
return strs;
    }


    
/**
     * Description 根据键值进行解密
     * 
@param data
     * 
@param key  加密键byte数组
     * 
@return
     * 
@throws IOException
     * 
@throws Exception
     
*/

    
public static String decrypt(String data, String key) throws IOException,
            Exception 
{
        
if (data == null)
            
return null;
        BASE64Decoder decoder 
= new BASE64Decoder();
        
byte[] buf = decoder.decodeBuffer(data);
        
byte[] bt = decrypt(buf,key.getBytes());
        
return new String(bt);
    }


    
/**
     * Description 根据键值进行加密
     * 
@param data
     * 
@param key  加密键byte数组
     * 
@return
     * 
@throws Exception
     
*/

    
private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
        
// 生成一个可信任的随机数源
        SecureRandom sr = new SecureRandom();

        
// 从原始密钥数据创建DESKeySpec对象
        DESKeySpec dks = new DESKeySpec(key);

        
// 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
        SecretKey securekey 
= keyFactory.generateSecret(dks);

        
// Cipher对象实际完成加密操作
        Cipher cipher = Cipher.getInstance(DES);

        
// 用密钥初始化Cipher对象
        cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);

        
return cipher.doFinal(data);
    }

    
    
    
/**
     * Description 根据键值进行解密
     * 
@param data
     * 
@param key  加密键byte数组
     * 
@return
     * 
@throws Exception
     
*/

    
private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
        
// 生成一个可信任的随机数源
        SecureRandom sr = new SecureRandom();

        
// 从原始密钥数据创建DESKeySpec对象
        DESKeySpec dks = new DESKeySpec(key);

        
// 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
        SecretKey securekey 
= keyFactory.generateSecret(dks);

        
// Cipher对象实际完成解密操作
        Cipher cipher = Cipher.getInstance(DES);

        
// 用密钥初始化Cipher对象
        cipher.init(Cipher.DECRYPT_MODE, securekey, sr);

        
return cipher.doFinal(data);
    }

}




posted @ 2014-05-13 17:19 一堣而安 阅读(1191) | 评论 (0)编辑 收藏

JS读书文件

Automation服务器不能创建对象
最简单解决方法:打开Internet Explorer “工具”菜单栏中的“选项”一栏,单击“安全”栏中的“自定义级别”选项卡,将第三项“对没有标记为安全的activex控件进行初始化和脚本运行”设置成
另外解决办法参考:http://blog.chinaunix.net/uid-20624711-id-1911481.html


==========
参考:http://www.cnblogs.com/java-boy/archive/2011/03/21/1989911.html

<script type="text/javascript">
/**
 *CreateFile: 测试在电脑上创建一个文件件,并在文件夹里写进一些数据。
 *
 */
function CreateFile()
{
   var fso, tf;
   fso = new ActiveXObject("Scripting.FileSystemObject");//获取对象
   tf = fso.CreateTextFile("c:\\testfile.txt", true);//创建一个文件夹
   // 写一行,并且带有新行字符。
   tf.WriteLine("Testing 1, 2, 3.") ;
   // 向文件写三个新行字符。 
   tf.WriteBlankLines(3) ;
   // 写一行。
   tf.Write ("This is a test.");
   tf.Close();//关闭
}
/**
 *Folder的API:
 *任务 方法
 *创建文件夹。 FileSystemObject.CreateFolder
 *删除文件夹。 Folder.Delete 或 FileSystemObject.DeleteFolder
 *移动文件夹。 Folder.Move 或 FileSystemObject.MoveFolder
 *复制文件夹。 Folder.Copy 或 FileSystemObject.CopyFolder
 *检索文件夹的名字。 Folder.Name
 *如果文件夹在驱动器上存在,则找出它。 FileSystemObject.FolderExists
 *获得现有 Folder 对象的实例。 FileSystemObject.GetFolder
 *找出文件夹的父文件夹名。 FileSystemObject.GetParentFolderName
 *找出系统文件夹的路径。 FileSystemObject.GetSpecialFolder
 */
function ManipFiles()
{
   var fso, f1, f2, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f1 = fso.CreateTextFile("c:\\testfile.txt", true); //如果当前文件已经存在的话,则覆盖原有文件
   alert("Writing file <br>");
   // 写一行。
   f1.Write("This is a test.");
   // 关闭文件。
   f1.Close();
   alert("Moving file to c:\\tmp <br>");
   if(!fso.FolderExists("c:\\tmp")) { //如果tmp目录不存在,则创建一个目录
        fso.CreateFolder("c:\\tmp");
   }
   // 获取 C 的根目录(C:\)中的文件的句柄。
   f2 = fso.GetFile("c:\\testfile.txt");
   // 把文件移动到 \tmp 目录。如果这个tmp目录下已经有testfile.txt文件了,则会出错。(如果没有tmp这个文件目录也会出错)
   f2.Move ("c:\\tmp\\testfile.txt");
   alert("Copying file to c:\\temp <br>");
   // 把文件复制到 \temp 目录
   if(!fso.FolderExists("c:\\temp")) {//如果temp目录不存在,则创建一个目录
        fso.CreateFolder("c:\\temp");
   }
   f2.Copy ("c:\\temp\\testfile.txt");
   alert("Deleting files <br>");
   // 获得文件当前位置的句柄。
   f2 = fso.GetFile("c:\\tmp\\testfile.txt");
   f3 = fso.GetFile("c:\\temp\\testfile.txt");
   // 删除文件。
   f2.Delete();
   f3.Delete();
   //删除文件夹
   var fdTmp = fso.GetFolder("c:\\tmp");
   var fdTemp = fso.GetFolder("c:\\temp");
   fdTmp.DeleteFolder();
   fdTemp.DeleteFolder();
   alert("All done!");
}

ManipFiles();
//CreateFile();
alert("Ok! Write Over!");
</script>

posted @ 2014-05-06 23:02 一堣而安 阅读(188) | 评论 (0)编辑 收藏

jquery-validate 框架验证

参考:http://liuna718-163-com.iteye.com/blog/1914769

/*
动态添加验证
$("#dzName").rules("add",{ required: true,range:[1,100000000000], messages: { required: "必填项"} });
动态删除验证
$("#dzName").rules("remove");
判断验证是否全部通过
 if(!$("#entInfoForm").validate().form()){
        alert("如果您保存不了,请先将必填项填写完整(红色字体提示'必填项')");
    }
*/

posted @ 2014-05-06 15:43 一堣而安 阅读(215) | 评论 (0)编辑 收藏

仅列出标题
共17页: 上一页 1 2 3 4 5 6 7 8 9 下一页 Last 

导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

收藏夹

搜索

最新评论

阅读排行榜

评论排行榜