??xml version="1.0" encoding="utf-8" standalone="yes"?>97人人精品,欧美高清视频一区,色香蕉成人二区免费http://www.aygfsteel.com/bitmap/bitmapzh-cnThu, 19 Jun 2025 14:00:25 GMTThu, 19 Jun 2025 14:00:25 GMT60- 用java多线E断点箋传实?/title>http://www.aygfsteel.com/bitmap/archive/2009/07/20/287300.htmlbitmapbitmapMon, 20 Jul 2009 12:27:00 GMThttp://www.aygfsteel.com/bitmap/archive/2009/07/20/287300.html阅读全文

]]> - 谈谈Java加密技术(七)http://www.aygfsteel.com/bitmap/archive/2009/07/19/287299.htmlbitmapbitmapSun, 19 Jul 2009 01:08:00 GMThttp://www.aygfsteel.com/bitmap/archive/2009/07/19/287299.html阅读全文

]]> - 谈谈Java加密技术(六)http://www.aygfsteel.com/bitmap/archive/2009/07/17/287204.htmlbitmapbitmapFri, 17 Jul 2009 13:27:00 GMThttp://www.aygfsteel.com/bitmap/archive/2009/07/17/287204.html阅读全文

]]> - 互联|创业与软g开发一些问?/title>http://www.aygfsteel.com/bitmap/archive/2009/07/14/286468.htmlbitmapbitmapTue, 14 Jul 2009 05:14:00 GMThttp://www.aygfsteel.com/bitmap/archive/2009/07/14/286468.html那么我对互联|公司的比较感兴的地方主要体现在Y件质量和技术管理方面,以下2点可以作论的提纲Q?/span>
1 软g质量Q尽质量是我们嘴边l常挂念的一个词Q但不少创业型公司的投机心理太重Q在与这些负责h的交中发现Q谈论的更多的是新想法、新概念Q有非常重的商业气息Q当然这没什么不好,但我看了他们的一些品后发现Q他们所做的产品用户体验非常p糕Q就拿界面来_非常的粗p,׃有家公司做的产品和易类|我特意打开2个窗口对比一下,总觉得易的看v来比较舒服,他们整体布局倒模仿易倒挺像,但问题就体现在细节上Q图片失真严重、字体风g一致、细节处理的不到位。好了,那就凑合着看吧Q发现该产品的功能非常的多,但让人郁L是,很多功能是有问题的,比如明明提示我系l给偶发了个邮gQ但是找不刎ͼ有时候提交表单是可以的,有时候见C堆java异常错误。所以我觉得q就是典型的q求功能的庞大而导致质量的~水?/span>
其实自从豆瓣开始流行后Q大安意识到功能做的简z原来是有好处的Q有不少创业者声U自p向豆瓣看齐,鄙视csdnQ坚册z之路,但让我纳L是,很少有h真正的坚持下去,我有个同?6q底曑֜一家创业公司玩qpythonQ准备做一个很有趣的网站,叫做抱怨网Q其实是蛮有创意的,不久前JE不是有个哥们在四处发帖说我爱我家黑中介的事,其实本来q个|站是q这个事的,专门揭不良企业底的,但做着做着Q成了巨无霸Q开始是把大众点评网的功能加q去Q接着又开始融q赶集网的分cM息功能,最后有把智联招聘的招聘功能加上了,l局是1q不刎ͼ|站不出意料的死掉了Q原因就是用户体验差Q根本不感兴!最后我替他们老板做了下反思,其实说实话,我还是很理解创业人的心,看到好东襉K惌Q而且之前几年在互联网圈钱谁都眼红。另外,他们的功能尽是抄袭别h的,但还是有一定的特色与盈利模式,q且各个功能分的也蛮清的?nbsp;所以我觉得p|的原因不能简单的归结为功能太多,而是质量Q小公司也就那几号hQ作为开发h员,面对q么多的需求,只有拼命的赶q度Q丫q有旉考虑质量或者用户体验吗Q所以没有一定的资本与一批强有力的管理和开发h员,切勿贪大求全Q否则很可能是在生产垃圾。其实质量这个东西从高的层面上说是用户体验的好坏,bug不见得质量高,但用户体验差的东西绝对就是垃圾?/span>
最q市面上有个说法有个说法?0w以模仿个淘宝,我认为就是扯淡,误导了很多创业者,认ؓq银子Q雇几个人,可以轻松抄袭淘宝了Q咱先不说市场投资,只谈技术,表面上看淘宝Q丫是一个破|站Q但背后的技术你看的见吗Q稳定性、性能、维护、可扩展性,q些都和软g质量息息相关Q直接媄响着用户的满意度Q你定真的做到了吗Q淘宝的架构师一q的薪水?0w了。所以我觉得创业者要领悟毛泽东思想Q采用各个击破的战术Q在有限的资源下U束的自׃品的功能Q做到小而美?/span>
q里举个正面的例子,有家位于芝加哥、名?7 Signals的小公司Q正是这U拥抱限制的方式之代表者?7 Signals最初是一家网设计资讯公司,后来Z满自n需求而将业务扩展到Y件开发领域。他们编写了一些用于项目管理的内部工具。ؓ了和客户沟通, 向客户开放了部分pȝ。公司创始h和总裁杰森•弗瑞PJason FriedQ解释说Q在他们自己意识C前,已经做出了一套基于网늚应用。又做了4个月Q他们把软g转换为称作Basecamp的服务?nbsp;Basecamp发布?004q?月,很快在类似Flickr和Google的Gmail{新Web富应用天堂中名列前茅?/span>
Basecamp只是q家公司׃q多旉投入量E序员做出来的一pd值得注意的小而精的品之一。Basecamp之后是Ta-da ListQ用于保存和׃n待办事项Q及cM事项Q列表。几个月后推ZBackpackQ它允许用户保存和共享便{֏文g。每U品都可靠q易于用,?nbsp;且都是精心设计的。每U品通常也都只包括少量新Ҏ。例如,Basecamp有一些精巧的电子邮g功能Q和其他服务和程序一P也可以设|邮件到达提醒——还可以从另外的计算机或手机{移动设备向Backpack|页发送邮Ӟ邮g文本׃在页面上昄出来?/span>
2 技术管理,你会发现很多公司的负责h不是很懂技术,但却是负责技术的Q丫今天听到SOA是个好东西,号oULSOAQ反正大安不理解这个含p不清的东西Q做呗,看谁能忽悠的q谁Q一般来Ԍ创业型公ؓ了节U成本,不会预留专门的QAQ有专门的测试h员就不错了,所以缺乏一个质量保证的环节Q遇到问题怎么办?谁做的谁改,Ҏ什么样没h兛_Q只要负责h看到问题解决了就可以了,但,我想问的是,不良代码背后的隐患你知道吗?l果是你咬牙给开发h员开工资Q开发h员假装帮你实现梦惻I或者说造就一批划水的人。其实很多东西不是钱的问题,也不要以为多开点薪水就可以留住人心。另外我觉得很多技术负责h喜欢把东西模p化Q比如把软gx务的理念挂在嘴边Q但做v来是另一码子事,我觉得作Z个技术负责h自己pw先士卒Q至在创业公司是这Pq样才更有说服力Q遇到问题自己应当第一个冲上去Q拿出具体的解决ҎQ对代码应当做到_理Q做到心中有数。说到底Q创业公司得有一个技术核心,一个真正能实现你的x的hQ一个可以让大家凝聚h的hQ不至于让大家划水的人?/span>
好了Q先说那么多Q希望各位准备创业的同仁能真正的树立_֓意识Q打造精品,实现梦想

]]>- struts 重复提交问题的解x?/title>http://www.aygfsteel.com/bitmap/archive/2009/07/12/286448.htmlbitmapbitmapSun, 12 Jul 2009 04:55:00 GMThttp://www.aygfsteel.com/bitmap/archive/2009/07/12/286448.html问题的生原?br />
面提交lAction去进行业务处理,Action再蟩转回前台面Q但q时URL依然?#8220;面提交lAction的链?#8221;Q这时前台刷C下页面,变成再ơ执行了一ơ提交操作?/p>
解决思\
1Q在Action面中蟩转的时候用重定向,可以在struts-config.xml中配|?lt;forward ... redirect=“true”>
不过q种Ҏ会得request中放|数据丢失;
2Q用Token令牌环来实现
提交到Action的时候,q行一pd操作Q然后保存一个标志,q时再蟩转到前台面。如果前台页面刷新的话,Action通过查看是否有标志,p判断用户是刷新还是提交?/p>
Action中操作o牌的Ҏ
一Q?saveToken(HttpServletRequest request)
创徏一个新令牌Qƈ其保存在当前用L会话中,如果用户的会话不存在Q将首先创徏C话对?br />
二: isTokenValid(HttpServletRequest request)
判断存储在当前会话中的o牌值和h参数中的令牌值是否匹配,如果匚wQ返回true,否则q回false ?br />
以下情况q回falseQ?br />
1Q用LHttpSession不存?br />
2Q用户Session中没有保存o牌?br />
3Q在用户h参数中没有o牌?br />
4Q存储在用户Session范围内的令牌值和h参数?的o牌g匚w
三:resetToken()
删除保存在Session范围内的令牌?/p>
CZ代码
1Q进入目标页Q如 http://www.bt285.cn Q通过IndexAction转发Q其中需要保存o?
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)

throws Exception
{
saveToken(request);
return mapping.findForward("index");// http://www.5a520.cn
}

2Q目标页?test.jsp)需要用Struts标签库:
<body>
<html:form action=" http://www.5a520.cn test.do" method="post">
<input type="submit" value="提交" />
</html:form>
</body>

当提交test.jsp时提交到TestAction处理Q?
<struts-config>
<form-beans>
<form-bean name="testForm" type="com.tanlan.struts.form.TestForm">
</form-bean>
</form-beans>
<action-mappings>
<action path="/index" type="com.tanlan.struts.action.IndexAction">
<forward name="index" path="/index.jsp"></forward>
</action>
<action path="/test" type="com.tanlan.struts.action.TestAction"
name="testForm" input="/index.jsp">
<forward name="test" path="/test.jsp"></forward>
<forward name="error" path="/error.jsp"></forward>
</action>
</action-mappings>
</struts-config>

xQ大功告成!
完整CZ请参考附件?/p>

]]> - 谈谈Java加密技术(五)http://www.aygfsteel.com/bitmap/archive/2009/07/11/286390.htmlbitmapbitmapSat, 11 Jul 2009 12:01:00 GMThttp://www.aygfsteel.com/bitmap/archive/2009/07/11/286390.html阅读全文

]]> - 漫谈Java加密技术(四)http://www.aygfsteel.com/bitmap/archive/2009/07/09/286150.htmlbitmapbitmapThu, 09 Jul 2009 13:08:00 GMThttp://www.aygfsteel.com/bitmap/archive/2009/07/09/286150.html阅读全文

]]> - 再谈谈Java加密技术(三)http://www.aygfsteel.com/bitmap/archive/2009/07/08/285977.htmlbitmapbitmapWed, 08 Jul 2009 14:22:00 GMThttp://www.aygfsteel.com/bitmap/archive/2009/07/08/285977.html除了DESQ我们还知道有DESede(TripleDES,是3DES)、AES、Blowfish、RC2、RC4(ARCFOUR){多U对U加密方式,其实现方式大同小异,q里介绍对称加密的另一个算法——PBE
PBE
PBE——Password-based encryptionQ基于密码加密)。其特点在于口oq戯己掌,不借助M物理媒体Q采用随机数Q这里我们叫做盐Q杂凑多重加密等Ҏ保证数据的安全性。是一U简便的加密方式?
通过java代码实现如下Q?br />
import java.security.Key;
import java.util.Random;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;

/** *//**
* PBE安全~码lg http://www.bt285.cn http://www.5a520.cn
*
* @author 梁栋
* @version 1.0
* @since 1.0
*/

public abstract class PBECoder extends Coder
{

/** *//**
* 支持以下L一U算?nbsp;
*
* <pre>
* PBEWithMD5AndDES
* PBEWithMD5AndTripleDES
* PBEWithSHA1AndDESede
* PBEWithSHA1AndRC2_40
* </pre>
*/
public static final String ALGORITHM = "PBEWITHMD5andDES";

/** *//**
* 盐初始化
*
* @return
* @throws Exception
*/

public static byte[] initSalt() throws Exception
{
byte[] salt = new byte[8];
Random random = new Random();
random.nextBytes(salt);
return salt;
}

/** *//**
* 转换密钥<br>
*
* @param password
* @return
* @throws Exception
*/

private static Key toKey(String password) throws Exception
{
PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
SecretKey secretKey = keyFactory.generateSecret(keySpec);
return secretKey;
}

/** *//**
* 加密
*
* @param data
* 数据
* @param password
* 密码
* @param salt
* ?nbsp;
* @return
* @throws Exception
*/
public static byte[] encrypt(byte[] data, String password, byte[] salt)

throws Exception
{
Key key = toKey(password);
PBEParameterSpec paramSpec = new PBEParameterSpec(salt, 100);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);
return cipher.doFinal(data);
}

/** *//**
* 解密
*
* @param data
* 数据
* @param password
* 密码
* @param salt
* ?nbsp;
* @return
* @throws Exception
*/
public static byte[] decrypt(byte[] data, String password, byte[] salt)

throws Exception
{
Key key = toKey(password);
PBEParameterSpec paramSpec = new PBEParameterSpec(salt, 100);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, key, paramSpec);
return cipher.doFinal(data);
}
}

再给Z个测试类Q?
import static org.junit.Assert.*;
import org.junit.Test;

/** *//**
*
* @author 梁栋 http://www.5a520.cn http://www.feng123.com
* @version 1.0
* @since 1.0
*/

public class PBECoderTest
{
@Test

public void test() throws Exception
{
String inputStr = "abc";
System.err.println("原文: " + inputStr);
byte[] input = inputStr.getBytes();
String pwd = "efg";
System.err.println("密码: " + pwd);
byte[] salt = PBECoder.initSalt();
byte[] data = PBECoder.encrypt(input, pwd, salt);
System.err.println("加密? " + PBECoder.encryptBASE64(data));
byte[] output = PBECoder.decrypt(data, pwd, salt);
String outputStr = new String(output);
System.err.println("解密? " + outputStr);
assertEquals(inputStr, outputStr);
}
}

控制台输出:
原文: abc
密码: efg
加密? iCZ0uRtaAhE=
解密? abc

]]> - 用Java语言产生随机数的两个Ҏhttp://www.aygfsteel.com/bitmap/archive/2009/07/06/285724.htmlbitmapbitmapMon, 06 Jul 2009 14:22:00 GMThttp://www.aygfsteel.com/bitmap/archive/2009/07/06/285724.html
在Java语言中生成随机数相对来说比较单,因ؓ有一个现成的Ҏ可以使用。在MathcMQJava语言提供了一个叫做random的方法。通过q个Ҏ可以让系l生随机数。不q默认情况下Q其产生的随机数范围比较,为大于等?到小?的double型随机数。虽然其随机C生的范围比较,不能够满x常的需求。如日常工作中可能需要生整数的随机数。其实,只要对这个方法进行一些灵zȝ处理Q就可以获取L范围的随机数?a >http://www.bt285.cn http://www.5a520.cn
如我们可以先通过randomҎ生成一个随机数Q然后将l果乘以10。此时生的随机数字即ؓ大于{于0于10的数字。然后再利用IntҎq行转换(它会L数掉后面的数字Q即只获取整数部分,不是四舍五入)。最后即可获取一??的整数型随机数字。其实现Ҏ很简单,是对原有的randomҎ按照如下的格式进行变型:(int)(Math.Random()*10)卛_。其实我们还可以对这个方法进行扩展,让其产生L范围内的随机数。至需要将q个10换成n卛_Q如改ؓ(int)(Math.Random()*n)。此时应用程序就会生一个大于等?与n之间的随机数。如n讄?Q那么其׃产生一??之间的整数型的随机数。如果将q个写成一个带参数的方法,那么只要用户输入需要生成随机数的最大|可以让q个Ҏ来生成制定范围的随机数。在Java中定义自q工具?br />
有时候程序员可能需要生成一个指定范围内的随机偶数或者奇数。此时是否可以通过q个Ҏ来实现呢?{案是肯定的。如现在E序要需要生成一?-100范围内的偶数。此时该如何实现?首先Q需要生成一??9之内的随机数(至于q里Z么是99Q大家耐心看下d知道原因?。要实现q个需求,很简单吧Q只要通过如下语句可以实玎ͼ i=1+(int)(Math.Random()*100)。其?int)(Math.Random()*99)产生0?9的整数型随机数。然后再加上1是产生1?00之间的随机整数。然后将产生的随机数赋值给变量i。但是此时其产生的随机数x偶数Q又有奇数。而现在程序员需要的是一个随机的偶数。那么我们可以在后面加上一个if判断语句。将q个随机数除?Q如果没有余数的?或者余Cؓ0)则表明这个随机数是偶敎ͼ直接q回卛_。如果其q回的余C为零Q那么就表明其是奇数Q我们只要加?变Z偶数Q返回即可。注意,在上面的随机数生成中Q笔者采用的范围??9Q然后再加上1让其变ؓ1?00的随机数。最后的l果是生成1?00之间的随机偶数。其实,如果要范围随机奇数的话,至需要对上面的语句进行稍微的修改卛_。Java:改变你我的世?br />
假设现在用户想生成一个Q意范围内的奇数或者偶敎ͼ能够实现?假设现在用户惛_C个m到n之间的Q意偶?其中m
可见虽然randomҎ其自w生的随机数有比较严格的范围限制。但是只要对其进行合理的转换Q程序员仍然可以采用q个Ҏ产生用户所需要的随机数据?br />
二、通过RandomcL生成随机数?br />
在Java语言中,除了可以通过random Ҏ来生随机数之外Q还可以通过一个randomcL产生随机数。程序开发h员可以通过实例化一个Random对象来创Z个随机数的生成器。如Random i=new Random()。通过q条语句利用了RandomcdZ一个随机数的生成器。不q以q种Ҏ创徏随机数时Q与采用RandomҎ产生随机数的机制不同。利用现在这U方式实例化对象ӞJava~译器会以系l当前的旉作ؓ随机数生成器的种子。由于时间时时刻d变化的。若以这个时间作为生成器的种子,可以保证生成的随机数真的是随机的,其生成的随机数重复率会大大的降低?br />
利用q种Ҏ其比较方ѝ如可以利用提供的关键字Q让E序q回一个随机的整数(采用int nextInt(10)){等。不q其q回控制要比RandomҎ困难一炏V如现在需要系l提供一?0?0之间的随机奇敎ͼ 利用q个Randomcd无法完成。也是_利用q个RandomcL生成随机敎ͼ其只能够控制上限Q而不能够控制下限。换一句话_其可以指定最大的随机数范_而不能够指定最的随机数范围。所以,在灵zL上Q其比RandomҎ要稍微差一炏V?br />
另外利用q个Ҏ来实现的话,必须先创Z个对象。也是说利用RandowcL创徏对象。这跟RandowҎ不同。像上面丄例子中,RandowҎ本n是一个mathcMҎQ可以直接调用,省去对象创徏的方法。ؓ此笔者徏议各位读者与E序开发h员,最好还是用RandomҎ来创建随机数。只有在生成一些比较特D的随机数时采用RandomcR如现在需要生成一个概率密度ؓ高斯分布的双_ֺ值随机数Ӟ则通过采用RandomcȝҎ来创建随机数相对来说比较单一炏V?br />
三、生随机的字符?br />
上面介绍的两U方法,产生的都是随机的数值型数据。但是有时候用户可能还需要生随机的字符。其实也可以利用randomҎ来生随机字W。如可以利用代码生成一个随机的写字符Q?char)(‘a’+Math.random()*(‘z’-‘a’+1))。其实这跟生成Q意两个数之间的随机数cM。通过以上的代码就可以生成一个范围之内的L随机字符。通过对这个代码进行适当的修_q可以生成Q意两个字W之间的随机字符与Q意大写字W的随机字符。其转换的方式跟上面提到的Q意范围之内的随机数类伹{各位读者若感兴的话,可以自己q行试一下。师傅领q门Q修行在自n。如果笔者在q里一股脑儿将所有的{案告诉大家Q大家的印象不会很深。大家若回去自己动手试试看,反而更ҎC?br />
W者在q里l大家一个提C,只需要根据m+(int)(Math.Random()*(n-m))q条语句来调?char)(‘a’+Math.random()*(‘z’-‘a’+1))q个代码卛_?br />
最后笔者需要强调的一点就是在用户传入参数的时候,最好要对用户传入的参数q行合法性检查。以免用户传入的参数不符合既定的要求Q如参数需要的是数值型的数据而传入的却是字符型的数据Q而导致程序运行出错?

]]> - 漫谈Java加密技术(二)http://www.aygfsteel.com/bitmap/archive/2009/07/05/285584.htmlbitmapbitmapSun, 05 Jul 2009 13:18:00 GMThttp://www.aygfsteel.com/bitmap/archive/2009/07/05/285584.html阅读全文

]]>
վ֩ģ壺
|
Դ|
|
ɽ|
ɽ|
|
Դ|
|
żҿ|
ֿ|
ī|
|
|
̨|
|
ʤ|
ʼ|
ɽ|
ͼ|
ɽ|
|
ɳ|
Դ|
̨|
|
人|
ǿ|
ƽ|
|
|
˳|
|
|
ͨ|
|
|
üɽ|
|
|
â|
|