给JavaBeans 增加XPath功能

向一个JavaBean请求'addressbook[1].state.code'是现在还在使用的和JavaBeans 进行交互的一个通常的方法,但是你现在可以更进一步使用功能更强大的XPath规范。 创建XPath的目的是访问和修改XML中的数据,但是Apache Jakarta的一个新项目允许你将强大的XPath规范的功能应用到普通的JavaBeans上。 作为一个例子,我们使用具有下面的结构的JavaBean : Person.name 是一个字符串 String Person.age 是一个整数 Person.birthtown 是一个Town对象 Person.address 是一个Address 对象的数组 Town.name 是一个字符串 Address.number 是一个字符串 Address.street 是一个字符串 Address.town 是一个Town对象 (为了简单没有提供源代码) 对于给定的Person对象,你可以使用"name"得到对象的名字,你可以使用"birthtown/name"得到出身地的名字,你也可以使用"address[number='21']/town/name"得到和地址(例如21)关联的城镇的名字。 除了更强大以外,XPath 和通常的bean符号的主要不同是使用反斜线('/')而不是句点('.')分隔元素,一旦你习惯这个特征就都会变得很简单。 下面的代码展示了使用JXPath 将XPath 符号应用到我们的JavaBean 结构是多么的简单: import org.apache.commons.jxpath.JXPathContext; .... Person person = ....; JXPathContext context = JXPathContext.newContext(person); System.out.println(context.getValue("name")); System.out.println(context.getValue("age")); System.out.println(context.getValue("birthtown/name")); System.out.println(context.getValue("address[number='21']/street")); System.out.println(context.getValue("address[number='21']/town/name")); .... XPath可以用于设置值或者创建beans,当然也可以读取值,关于XPath和它的JXPath的实现的更多信息请参考JXPath站点 。 <淘宝热门商品:
 

¥:21.00 

【义乌绘美家居】【收藏本店送礼品】

 

 

黑龙江商盟】棋子儿平价美妆店-烟熏彩妆/假睫毛大全/新娘用品


来源:程序员网

小小豆叮

由http暗藏通道看网络安全

宫一鸣 (yiming@security.zz.ha.cn) 中国电信网络安全小组核心成员 通过本文的httptunnel 技术同时逃过了防火墙的屏蔽以及系统的追踪试验,我们可以看到网络安全仅仅依靠某种或某几种手段是不可靠的,同时对安全系统的盲目性依赖往往会造成巨大的安全隐患。希望通过本文能引起管理员对网络安全防护系统的思考。 什么是http暗藏通道 什么是局域网安全,系统管理员怎样才能保障局域网的安全?这是一个不断变化的安全概念,很长的一个时期以来,在局域网与外界互联处放置一个防火墙,严格控制开放的端口,就能在很大程度上掌握安全的主动权,方便的控制网内外用户所能使用的服务。比如,在防火墙上仅仅开放80,53两个端口,那么无论是内部还是外面的恶意人士都将无法使用一些已经证明比较危险的服务。 但要注意一点,防火墙在某种意义上是很愚蠢的,管理员对防火墙的过分依赖以及从而产生的懈怠情绪将不可避免的形成安全上的重大隐患,作为一个证明,"通道"技术就是一个很好的例子,这也是本文要讨论的。 那么什么是通道呢?这里所谓的通道,是指一种绕过防火墙端口屏蔽的通讯方式。防火墙两端的数据包封装在防火墙所允许通过的数据包类型或是端口上,然后穿过防火墙与对端通讯,当封装的数据包到达目的地时,再将数据包还原,并将还原后的数据包交送到相应的服务上。举例如下: A主机系统在防火墙之后,受防火墙保护,防火墙配置的访问控制原则是只允许80端口的数据进出,B主机系统在防火墙之外,是开放的。现在假设需要从A系统Telnet到B系统上去,怎么办?使用正常的telnet肯定是不可能了,但我们知道可用的只有80端口,那么这个时候使用Httptunnel通道,就是一个好的办法,思路如下: 在A机器上起一个tunnel的client端,让它侦听本机的一个不被使用的任意指定端口,如1234,同时将来自1234端口上的数据指引到远端(B机)的80端口上(注意,是80端口,防火墙允许通过),然后在B机上起一个server,同样挂接在80端口上,同时指引80端口的来自client的转发到本机的telnet服务端口23,这样就ok了。现在在A机上telnet本机端口1234,根据刚才的设置数据包会被转发到目标端口为80的B机,因为防火墙允许通过80端口的数据,因此数据包畅通的穿过防火墙,到达B机。此时B机在80端口侦听的进程收到来自A的数据包,会将数据包还原,再交还给telnet进程。当数据包需要由B到A返回时,将由80端口再回送,同样可以顺利的通过防火墙。 实际上tunnel概念已经产生很久了,而且很有可能读者使用过类似的技术,比如下面的网址http://www.http-tunnel.com。它是一个专业提供tunnel服务的公司,通过他们的在线tunnel server,局域网内的用户可以使用被防火墙所屏蔽的ICQ,E-MAIL,pcanywhere, AIM,MSN, Yahoo,Morpheus,Napster等等诸多软件。我们看到,这里有ICQ,Napster等软件,相信我们的读者很多都使用过走proxy的ICQ,OICQ等等,其实他们的原理是差不多的。 什么是Httptunnel 作为一个实际的例子,我们下面来介绍一个在"非公开领域"使用的的通道软件,httptunnel。在httptunnel主页(请参阅参考资料)上有这么一端话, httptunnel creates a bidirectional virtual data connection tunnelled in HTTP requests. The HTTP requests can be sent via an HTTP proxy if so desired. This can be useful for users behind restrictive firewalls. If WWW access is allowed through a HTTP proxy, it's possible to use httptunnel and, say, telnet or PPP to connect to a computer outside the firewall. 从这段说明中我们可以看出来它就是我们今天说要介绍的tunnel技术的一个证明,我们下面大致介绍一下它的使用。 httptunnel目前比较稳定的版本是3.0.5, 支持各种常见的unix系统,包括window平台。可以从相关站点(请参阅参考资料)下载,它的安装是比较简单的,照INSTALL文件做就可以了,这里不介绍。 整个软件安装完毕后,我们会得到两个关键文件,htc和hts,其中htc是客户端(c),而hts是server(s)端,我们来看看具体怎么使用的。 假设有A(域名client.yiming.com)机,B(域名server.yiming.com)机,两机均为solaris环境,A机在防火墙保护中,B机在防火墙以外,防火墙的管理员控制了访问规则,仅ALLOW 80和53端口的进出数据包。而我们的任务是要利用Httptunnel从A机telnet到B机上,穿过防火墙的限制。操作如下: 首先我们在A上启动client端,命令很简单: client.yiming.com#htc -F 1234 server.yiming.com:80, 系统回到提示符下,此刻我们用netstat -an 可以看到系统内多出了1234端口的侦听 *.1234 *.* 0 0 0 0 LISTEN 然后我们在B机上启动server端,命令如下: server.yiming.com#hts -F localhost:23 80 系统回到提示符下,此刻我们用netstat看 *.80 *.* 0 0 0 0 LISTEN 80端口处于侦听状态,需要注意的是,如果系统本身跑的有web服务(80端口本身处于侦听),并不会影响Httptunnel的工作。 Ok,server以及client端都启动了,我们可以开始我们的"通道"试验了,在client.yiming.com上执行一下如下命令看看: Client.yiming.com#telnet localhost 1234 Trying 0.0.0.0... Connected to 0. Escape character is '^]'. SunOS 5.7 This is yiming's private box! Any question,contact me with yiming@security.zz.ha.cn login: 看到B机的登录提示符了,输入账号密码看看是否工作正常? Login:yiming Password: (omit here;) ) sever.yiming.com# ls bak check go httpd lost+found mrtg run soft wg OK! 工作正常,和正常的telnet没有什么差别。 仔细观察整个过程,会发现在最开始的地方显示的是Trying 0.0.0.0...,Connected to 0.而不是Trying server.yiming.com…,Connect to server.yiming.com,这就很直观的可以看出来client端是转发1234数据包到本机80端口的。(然后再转发到远端)而不是直接连接远端的B机。 上面是比较直观的测试,为了进一步验证server和client之间不是通过23端口通讯,我们抓取数据包来看看。我们在server起个抓包工具tcpdump(请参阅参考资料)瞧瞧。 server.yiming.com#tcpdump host client.yiming.com tcpdump: listening on hme0 14:42:54.213699 client.yiming.com.51767 > server.yiming.com.80: S 1237977857:1237977857(0) win 8760 (DF) 14:42:54.213767server.yiming.com.80 > client.yiming.com.51767: S 1607785698:1607785698(0) ack 1237977858 win 8760 (DF) 14:42:54.216186 client.yiming.com.51768 > server.yiming.com.80: . ack 1 win 8760 (DF) 14:42:54.218661 client.yiming.com.51768 > server.yiming.com.80: P 1:44(43) ack 1 win 8760 (DF) 14:42:54.218728 client.yiming.com.51768 > server.yiming.com.80: P 44:48(4) ack 1 win 8760 (DF) 篇幅所限,上面只是截取了结果中的一点点数据包,但已经可以说明问题了,我们看到server和client之间顺利的完成了三次握手,然后开始push数据,而且通讯确实走的是80端口。有点意思噢。 看是看出来了,但太不直白,到底在搞什么呀,我们再稍微改动一下tcpdump的运行方式,进一步在来看看telnet的数据是否被封装在80端口的数据包内传输? server.yiming.com#tcpdump -X host client.yiming.com 14:43:05.246911 server.yiming.com.80 > client.yiming.com.51768: . 2997:4457(1460) ack 89 win 8760 (DF) 0x0000 4500 05dc 3b23 4000 ff06 e2c2 yyyy yyyy E...;#@......f.D 0x0010 xxxx xxxx 0050 de42 5fd5 ac4f 39ac 016f .f.#.P.B_..O9..o 0x0020 5010 2238 98e4 0000 746f 7461 6c20 3636 P."8....total.66 0x0030 370d 0a64 7277 7872 2d78 722d 7820 2032 7..drwxr-xr-x..2 0x0040 3920 726f 6f74 2020 2020 2072 6f6f 7420 9.root.....root. 呵呵,这次清楚多了,上面应该是一次ls命令的输出结果,可以清楚的看到telnet的结果!果然telnet的数据是在80端口的数据包内! Httptunnel带来的安全问题 写到这里,我们可以想象一下,如果管理员完全信赖防火墙,那么在一个有这样隐患的的局域网中,会发生什么样的后果? 我们可以看到,多年以来,对防火墙的依赖也一直列在SANS的Top 10安全问题中。 既然如此,就很自然的会产生一个问题是:这种httptunnel行为能被发现吗? 首先我们想到的是使用入侵检测系统,在目前的网络安全设计中,防火墙加入侵检测系统是一种比较流行的安全联动配置,既然httptunnel绕过了防火墙,那么IDS系统呢?我们来测测看看。 在下面的测试中,我们将使用IDS系统是Snort,版本1.8.2。(请参阅参考资料)这可是大名鼎鼎的开放源代码的IDS系统,在它的说明中,被描述为一个轻量级的,可跨平台工作的入侵检测系统,在2001年12月英国的独立测试实验室NSS的评测中(请参阅参考资料),击败了包括商用IDS系统的所有对手,这些商用软件可是包括ISS,CISCO SECURE IDS,CA ETRUST,CYBERSAFE CENTRAX,NFR。有兴趣的读者还可以看这篇名为Open source mounts IDS challenge 的报道(请参阅参考资料)。 好,对Snort的大致介绍完毕,我们来看看结果吧,Snort对整个试验过程抓获的数据包产成了告警,如下: [**] WEB-MISC whisker splice attack [**] 12/02-14:42:54.389175 client.yiming.com:51767-> server.yiming.com:80 TCP TTL:251 TOS:0x0 ID:3327 IpLen:20 DgmLen:42 DF ***AP*** Seq: 0x49CA0BA7 Ack: 0x5FD4DCE3 Win: 0x2238 TcpLen: 20 =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ [**] WEB-MISC whisker splice attack [**] 12/02-14:43:03.195006 client.yiming.com:51767 -> server.yiming.com:80 TCP TTL:251 TOS:0x0 ID:3439 IpLen:20 DgmLen:41 DF ***AP*** Seq: 0x49CA0C20 Ack: 0x5FD4DCE3 Win: 0x2238 TcpLen: 20 =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ [**] WEB-MISC whisker splice attack [**] 12/02-14:43:04.630268 client.yiming.com:51768-> server.yiming.com:80 TCP TTL:251 TOS:0x0 ID:3496 IpLen:20 DgmLen:41 DF ***AP*** Seq: 0x49CA0C4E Ack: 0x5FD4DCE3 Win: 0x2238 TcpLen: 20 =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 我们看到snort对抓获的数据包产生了WEB-MISC whisker splice attack的告警,然而这种攻击并没有发生,同时snort对tunnel数据包没有察觉。这样snort就同时出现了IDS系统的两个问题,false positive,false negative。 这也很正常,因为这也是基于签名的IDS系统的通病,目前决大数IDS系统包括著名的商用软件ISS,NFR等都是基于签名的,也就是说系统维护着一套特定攻击数据包的数据模式签名。系统工作时,检查经过的数据包的内容,和自己数据库内数据模式签名对比,如果和某种攻击模式签名相同,那么就判断发生了某种攻击。 由此我们可以看出很明显的存在若干问题:如对签名的依赖不可避免的导致两个结果,false negative ,false positive。也就是说会产生漏报和误报,这一点很容易理解,当新出现一种攻击模式时,由于IDS系统内没有相应的数据签名,那么就不可能捕获相应的攻击数据包,false negative由此发生。同时,过于依赖签名模式也很容易误报,就象我们上面的例子。同时,对数据签名的依赖会在一定程度上降低系统性能-经过的数据包都需要和IDS系统的签名对照。(请参阅参考资料) 此外,基于签名的IDS系统本身有可能由于依据签名这一特性而被攻击,一个例子是stick ,这个程序的作者利用IDS系统进行签名匹配工作原理,发送大量带有攻击特征的数据包给IDS系统,使IDS系统本身处理能力超过极限,从而导致IDS系统无法响应。按照作者Coretez Giovanni的说法,运行2秒钟stick就能使著名的商用IDS系统ISS real secure崩溃。由上我们看到,对IDS系统的完全依赖同样是有风险的。(请参阅参考资料) 一些解决思路 看来依靠手头的IDS是无法察觉这种行为了,那么有其它办法吗?我们仔细分析一下事件过程中截获的httptunnel数据包再说吧。 仔细观察截获的httptunnel数据包,可以发现紧跟着三次握手完成后的第一个数据包包含着一个POST动作,是由htc(client端)发送到hts(server端)的。如下: 14:55:39.128908 client.yiming.com.51767 > server.yiming.com.80: S 3521931836:3521931836(0) win 8760 (DF) 0x0000 4500 002c d3cc 4000 fb06 53c9 xxxx xxxx E..,..@...S..f.# 0x0010 yyyy yyyy ca37 0050 d1ec 6a3c 0000 0000 .f.D.7.P..j<.... 0x0020 6002 2238 1708 0000 0204 05b4 0000 `."8.......... 14:55:39.128945 server.yiming.com.80 > client.yiming.com.51767: S 2946004964:2946004964(0) ack 3521931837 win 8760 (DF) 0x0000 4500 002c cb85 4000 ff06 5810 yyyy yyyy E..,..@...X..f.D 0x0010 xxxx xxxx 0050 ca37 af98 77e4 d1ec 6a3d .f.#.P.7..w...j= 0x0020 6012 2238 ef79 0000 0204 05b4 `."8.y...... 14:55:39.131002 client.yiming.com.51767 > server.yiming.com.80: . ack 1 win 8760 (DF) 0x0000 4500 0028 d3cd 4000 fb06 53cc xxxx xxxx E..(..@...S..f.# 0x0010 yyyy yyyy ca37 0050 d1ec 6a3d af98 77e5 .f.D.7.P..j=..w. 0x0020 5010 2238 0737 0000 0000 0000 0000 P."8.7........ 14:55:39.132841 server.yiming.com.80 > client.yiming.com.51767: . ack 44 win 8760 (DF) 0x0000 4500 0028 cb86 4000 ff06 5813 yyyy yyyy E..(..@...X..f.D 0x0010 xxxx xxxx 0050 ca37 af98 77e5 d1ec 6a68 .f.#.P.7..w...jh 0x0020 5010 2238 070c 0000 P."8.... 14:55:39.132860 client.yiming.com.51767 > server.yiming.com.80: P 1:44(43) ack 1 win 8760 (DF) 0x0000 4500 0053 d3ce 4000 fb06 53a0 xxxx xxxx E..S..@...S..f.# 0x0010 yyyy yyyy ca37 0050 d1ec 6a3d af98 77e5 .f.D.7.P..j=..w. 0x0020 5018 2238 d23a 0000 504f 5354 202f 696e P."8.:..POST./in 0x0030 6465 782e 6874 6d6c 3f63 7261 703d 3130 dex.html?crap=10 0x0040 3037 3838 3034 3836 2048 5454 502f 312e 07880486.HTTP/1. 0x0050 310d 0a 1.. 1.. 看起来是发送client端的数据包到server端的,那么server有什么反应呢?我们往下看,在上面这个过程完成后,htc和hts又发生了一次握手(注意,又一次握手),如下: 14:55:39.134301 client.yiming.com.51768 > server.yiming.com.80: S 2851199448:2851199448(0) win 8760 (DF) 0x0000 4500 002c d3df 4000 fb06 53b6 xxxx xxxx E..,..@...S..f.# 0x0010 yyyy yyyy ca38 0050 a9f1 d9d8 0000 0000 .f.D.8.P........ 0x0020 6002 2238 cf65 0000 0204 05b4 0000 `."8.e........ 14:55:39.134389 server.yiming.com.80 > client.yiming.com.51768: S 2946060449:2946060449(0) ack 2851199449 win 8760 (DF) 0x0000 4500 002c cb8f 4000 ff06 5806 yyyy yyyy E..,..@...X..f.D 0x0010 xxxx xxxx 0050 ca38 af99 50a1 a9f1 d9d9 .f.#.P.8..P..... 0x0020 6012 2238 cf19 0000 0204 05b4 `."8........ 14:55:39.136527 client.yiming.com.51768 > server.yiming.com.80: . ack 1 win 8760 (DF) 0x0000 4500 0028 d3e0 4000 fb06 53b9 xxxx xxxx E..(..@...S..f.# 0x0010 yyyy yyyy ca38 0050 a9f1 d9d9 af99 50a2 .f.D.8.P......P. 0x0020 5010 2238 e6d6 0000 0000 0000 0000 P."8.......... 14:55:39.137333 client.yiming.com.51768 > server.yiming.com.80: P 1:43(42) ack 1 win 8760 (DF) 0x0000 4500 0052 d3e1 4000 fb06 538e xxxx xxxx E..R..@...S..f.# 0x0010 yyyy yyyy ca38 0050 a9f1 d9d9 af99 50a2 .f.D.8.P......P. 0x0020 5018 2238 25ce 0000 4745 5420 2f69 6e64 P."8%...GET./ind 0x0030 6578 2e68 746d 6c3f 6372 6170 3d31 3030 ex.html?crap=100 0x0040 3738 3830 3438 3620 4854 5450 2f31 2e31 7880486.HTTP/1.1 0x0050 0d0a .. 14:55:39.137379 server.yiming.com.80 > client.yiming.com.51768: . ack 43 win 8718 (DF) 0x0000 4500 0028 cb90 4000 ff06 5809 yyyy yyyy E..(..@...X..f.D 0x0010 xxxx xxxx 0050 ca38 af99 50a2 a9f1 da03 .f.#.P.8..P..... 0x0020 5010 220e e6d6 0000 P."..... 14:55:39.139733 client.yiming.com.51768 > server.yiming.com.80: P 43:89(46) ack 1 win 8760 (DF) 0x0000 4500 0056 d3e2 4000 fb06 5389 xxxx xxxx E..V..@...S..f.# 0x0010 yyyy yyyy ca38 0050 a9f1 da03 af99 50a2 .f.D.8.P......P. 0x0020 5018 2238 e156 0000 486f 7374 3a20 3230 P."8.V..Host:.20 0x0030 322e 3130 322e 3232 372e 3638 3a38 300d 2.102.227.68:80. 0x0040 0a43 6f6e 6e65 6374 696f 6e3a 2063 6c6f .Connection:.clo 0x0050 7365 0d0a 0d0a se.... 14:55:39.151300 server.yiming.com.80 > client.yiming.com.51768: P 1:170(169) ack 89 win 8760 (DF) 0x0000 4500 00d1 cb91 4000 ff06 575f yyyy yyyy E.....@...W_.f.D 0x0010 xxxx xxxx 0050 ca38 af99 50a2 a9f1 da31 .f.#.P.8..P....1 0x0020 5018 2238 e721 0000 4854 5450 2f31 2e31 P."8.!..HTTP/1.1 0x0030 2032 3030 204f 4b0d 0a43 6f6e 7465 6e74 .200.OK..Content 0x0040 2d4c 656e 6774 683a 2031 3032 3430 300d -Length:.102400. 0x0050 0a43 6f6e 6e65 6374 696f 6e3a 2063 6c6f .Connection:.clo 0x0060 7365 0d0a 5072 6167 6d61 3a20 6e6f 2d63 se..Pragma:.no-c 0x0070 6163 6865 0d0a 4361 6368 652d 436f 6e74 ache..Cache-Cont 0x0080 726f 6c3a 206e 6f2d 6361 6368 652c 206e rol:.no-cache,.n 0x0090 6f2d 7374 6f72 652c 206d 7573 742d 7265 o-store,.must-re 0x00a0 7661 6c69 6461 7465 0d0a 4578 7069 7265 validate..Expire 0x00b0 733a 2030 0d0a 436f 6e74 656e 742d 5479 s:.0..Content-Ty 0x00c0 7065 3a20 7465 7874 2f68 746d 6c0d 0a0d pe:.text/html... 从数据包中可以看到,本次通讯中hts(server)端向htc(client)端发送了一个GET的标识包,估计是去"取"刚才client端发来的数据包,而且是一次新的握手!为了验证,我们分别在client,server端,执行netstat -an,结果证明了我们的观察是正确的,如下: client.yiming.com.51767 server.yiming.com.80 8760 0 8760 0 ESTABLISHED client.yiming.com.51768 server.yiming.com.80 8760 0 8760 0 ESTABLISHED 在server端,执行netstat -an,结果如下: server.yiming.com.80 client.yiming.com.51767 8760 0 8760 0 ESTABLISHED server.yiming.com.80 client.yiming.com.51768 8760 0 8760 0 ESTABLISHED 果然,防火墙两边的系统都起了两个socket,和一般程序不同,这是个比较特殊的现象。 GET动作完成后,server端又向client端发送了一个数据包,内容是 HTTP/1.1 200 OK Content-Length: 102400 Connection: close Pragma: no-cache Cache-Control: no-cache, no-store, must-revalidate Expires: 0 Content-Type: text/html 这里应该是定义数据包传输最大值等参数的。 作者察觉,经由了这三次htc和hts之间的作用后,httptunnel才真正的建立起来,后面的工作才能正常开展,而且很有意思的是,自此以后所有后续的数据包一律没有80端口经常走的GET,PUT,POST之类的内容!!这里看来可以想点办法。 上面说过,正常走80端口的数据包应该是web行为,那么就数据包中就应该少不了get等正常的动作内容,如果在80端口经过的数据总是没有这些东东,那么就肯定有问题了, 那么这种问题就有了一种解决方案,就是手工检查通过80端口通过的数据包,如果数据包是明文传送,那么就很容易发现这种行为。但这种行为也只能在理论上可行。在实际上的操作是不可能的,有没有比较成熟的这种产品呢?按照这个思路检索网上的数据,果然发现有种入侵检测e-Gap系统可以确实察觉及屏蔽httptunnel等通道软件的存在,它工作在tcp/ip的应用层,在应用层一级检测数据包的确切性,比如,检测80端口的数据包,如果看起来数据包中总是没有有效的数据(URL,get,put等参数),那么e-Gap系统就会报警,并中断连接行为。(请参阅参考资料) 需要注意的是,这种侦测方法仅对明文传送的有效,如果数据被加密,那么也就无计可施了。那么再进一步,如果加密了呢?目前作者掌握的情况来看,StealthWatch硬件产品可能是一种比较好的选择,它完全摈弃了基于签名的工作模式,而是采用一种正在申请专利的基于flow-base构架策略,按照几家评测实验室的结果来看,可以有效的察觉已经公开和未公开的各种攻击,Dos,蠕虫,病毒等,甚至包括加密的通讯!但是,它的价钱也远远的超出了普通的商用IDS系统,一套齐备的设施需4万美元!具体效果作者目前没有条件测试。(请参阅参考资料) 总结 在我们的试验中,httptunnel同时逃过了防火墙的屏蔽以及入侵检测系统的追踪,这是值得思考的。我们可以看到,网络安全仅仅依靠某种或某几种手段是不可靠的,尤其是对安全性要求很高的应用系统,同时对安全系统的盲目依赖往往会造成巨大的安全隐患。 参考资料 httptunnel主页 http://www.nocrew.org/software/httptunnel.html httptunnel程序下载 ftp://ftp.nocrew.org/pub/nocrew/unix/httptunnel-3.0.5.tar.gz tcpdump主页及相关资源 http://www.tcpdump.org SNORT主页及相关资源 http://www.snort.org NSS关于IDS系统的评测报告 http://www.nss.co.uk/ids/index.htm Open source mounts IDS challenge 的报道 http://www.vnunet.com/News/1127283 文章"Insertion, Evasion, and Denial of Service: Eluding Network Intrusion Detection" http://secinf.net/info/ids/idspaper/idspaper.html Stick作者主页 http://www.eurocompton.net/stick/projects8.html e-Gap产品 http://www.whalecommunications.com StealthWatch产品 http://www.lancope.com/products 关于作者 宫一鸣,男,26 岁,河南电信网络关键设备高级系统管理员,主任工程师,中国电信国家级跨世纪人才,中国电信网络安全小组核心成员,河南电信网络安全小组成员。您可以通过E-mail :yiming@security.zz.ha.cn或网站http://security.zz.ha.cn联系他! <淘宝热门商品:
 

80.00 元  

托玛琳厂家直营店

托玛琳预防富贵病;脂降压降糖减肥 活效清肠杯 一馈赠佳品限量版

 

37.00 元  

深圳兴鹏电子/专业的索爱外壳配件供应商

【兴鹏电子】索爱W800外壳W800c机壳 高品质做工 比肩原装 大图


来源:程序员网

小小豆叮

SQLPlus中的复制和粘贴技巧

系统环境: 1、数据库: Oracle 8i R3 (8.1.7) for NT 企业版 说明: 方法一: 1、 将鼠标移至想要复制内容的开始 2、 用右手按下鼠标左键 3、 向想要复制内容的另一角拖动鼠标,与Word中选取内容的方法一样 4、 内容选取完毕后(所选内容全部反显),鼠标左键可以按住不动,也可以松开 5、 用左手按CTRL+C键(或用鼠标点击系统菜单上:编辑—复制—粘贴) 6、 这时,所选内容会被复制到剪贴板上,所选内容自动取消反显,光标落到SQL*Plus环境的最后一行 方法二: 1、 鼠标移至想要复制内容的开始 2、 用右手食指按下鼠标左键 3、 向想要复制内容的另一角拖动鼠标,与Word中选取内容的方法一样 4、 内容选取完毕后(所选内容全部反显),鼠标左键按住不动,用右手中指按鼠标右键 5、 这时,所选内容会自动复制到SQL*Plus环境的最后一行 <淘宝热门商品:
 

28.00 元  

保健食品,散装,正装由你选

 

86.00 元  

艾尔微品牌店//九阳豆浆机//女士精品-三钻100%真人拍摄

Disney Mickey 迪斯尼米奇多色手动机芯机械中性手表


来源:程序员网

小小豆叮

java中文乱码的解决

在基于JAVA的编程中,经常会碰到汉字的处里及显示的问题,比如一大堆乱码或问号。 这是因为JAVA中默认的编码方式是UNICODE,而中国人通常使用的文件和DB都是基于GB2312或者BIG5等编码,故会出现此问题。以前我也经常为这个问题而苦恼,后来经查了些资料,终于解决了,我知道一定有很多朋友也会碰到这个问题,所以特就总结了一下,来拿出来让大家一起分享了。 1、在网页中输出中文。 JAVA在网络传输中使用的编码是"ISO-8859-1",故在输出时需要进行转化,如: String str="中文"; str=new String(str.getBytes("GB2312"),"8859_1"); 但如果在编译程序时,使用的编码是“GB2312”,且在中文平台上运行此程序,不会出现此问题,一定要注意。 2、从参数中读取中文 这正好与在网页中输出相反如: str=new String(str.getBytes("8859_1"),"GB2312"); 3、操作DB中的中文问题 一个较简单的方法是:在“控制面扳”中,把“区域”设置为“英语(美国)”。如果还会出现乱码,还可进行如下设置: 取中文时:str=new String(str.getBytes("GB2312")); 向DB中输入中文:str=new String(str.getBytes("ISO-8859-1")); 4、在JSP中的中文解决: 在“控制面扳”中,把“区域”设置为“英语(美国)”. 在JSP页面中加入:<%@ page contentType="text/html;charaset=gb2312"%> 如果还不行正常显示,则还要进行下面的转换: 如:name=new String(name.getBytes("ISO-8859-1"),"GBK"); 就不会出现中文问题了。 <淘宝热门商品:
 

冰之.点卡店 

冰之.点卡店

 

18.50 元 

出口韩国 棉质弹性不透内搭显瘦踩脚裤/打底裤


来源:程序员网

小小豆叮

重用java.util.Observable类

通常你可以完全开发一套自己的Listener/Event(监听器/事件)系统,但是在Java标准库中已经有了现存的通用解决方案,使用它可以节约大量的时间。 在Java库中,事件和监听器的使用是很普遍的,这些都只是观察者(Observer)模式的例子。Java Uitl包中提供了一个Observable/Observer对,虽然并不是非常强大,但在很多场合下仍然有用。 下面的三个类演示了使用Observer/Observable类的一种方式。 import java.util.*; public class OEventManager extends Observable { static public void main(String[ ] args) { OEventManager mgr = new OEventManager( ); mgr.addObserver( new OListener( ) ); mgr.addObserver( new OListener( ) ); mgr.addObserver( new OListener( ) ); mgr.fireChange("Changed. "); } public void fireChange(String msg) { setChanged( ); notifyObservers( new OEvent(msg)); } } class OListener implements Observer { public void update(Observable o, Object arg) { System.err.println("Passed '"+arg+"' by "+o+" to "+this); } } class OEvent extends EventObject { public OEvent(String msg) { super(msg); } } 一个需要注意的要点是OEvent类把事件消息存储在源中。通常情况下,这儿应该存储的是激发事件的对象,并且事件消息也应该存储在单独的域中,但是这儿这样做是出于简洁的目的。 另一个需要注意的是Observable的setChanged方法的使用,如果Observable没有发生变化,它并不通知观察者;相反,它仅简单地忽略对notifyObservers方法的调用。 下面是例子程序的输出: Passed 'OEvent[source=Changed. ]' by OEventManager@c9a to OListener@3b63e6 Passed 'OEvent[source=Changed. ]' by OEventManager@c9a to OListener@25cf3e Passed 'OEvent[source=Changed. ]' by OEventManager@c9a to OListener@48f0cd 因为Observer接口强制了update(Observable, Object)方法签名(signature),所以Observer/Observable类并不能替代你自己定义的Event/Listener类;当该接口可以接受时,它们是一个有用的工具。 <淘宝热门商品:
 

160.00 元  

皇冠 店主亲身植物藻类瘦身劲减30斤

 

268.00 元 

绝对NO1新版mirifem魔力丰丰胸片


来源:程序员网

小小豆叮

拷贝枚举器以加强效率

当一个代码段正对集合进行枚举而另一段代码试图修改这个集合时,就会发生常见的多线程问题。解决这一问题的方法是在处理前拷贝一份枚举变量。 在撰写多线程代码时,你遇到过多少次下面的提示: Exception in thread "main" java.util.ConcurrentModificationException 这个异常产生的原因有几个。一是直接对集合调用删除操作而不是在枚举器上。二是不同的线程试图对集合进行增删操作的时候。 这个解决办法的第一步就是同步代码,使得你在枚举的时候其它的线程不能增删记录。但是如果每个枚举过程要进行复杂的计算或者是数据库访问的一部分的话,这个同步就会导致可怕的后果。为了减少负面影响,可以拷贝一个只读的枚举器,去掉同步,然后采用下列代码所示的方法: private List list; public void add(Object obj) { synchronized(list) { list.add(obj); } } public void perform( ) { Iterator iterator = null; synchronized(list) { iterator = new CopiedIterator(list.iterator( )); } while(iterator.hasNext( )) { // perform resource or cpu hungry work } } 重要的是记住,CopiedIterator不是一个克隆,只是一个只读的拷贝,所以它并没有保持原有的全部功能。最重要的是,不能再调用CopiedIterator.remove方法了。CopiedIterator.remove的实现如下: public class CopiedIterator implements Iterator { private Iterator iterator = null; public CopiedIterator(Iterator itr) { LinkedList list = new LinkedList( ); while(itr.hasNext( )) { list.add(itr.next( )); } this.iterator = list.iterator( ); } public boolean hasNext( ) { return this.iterator.hasNext( ); } public void remove( ) { throw new UnsupportedOperationException("This is a read-only iterator. "); } public Object next( ) { return this.iterator.next( ); } } 枚举器的只读拷贝将用在同步状态上的时间减少到最小,因此可以增强全局的效率。 <淘宝热门商品:
 

 

极限特攻-新奇产品仓库   金秋时节好礼送不停

 

4.00 元  

阳光网游挂机程序专业店

[自动发货]梦幻西游辅助脚本单开压镖+半自动跑商+单开打图日卡


来源:程序员网

小小豆叮

JBuilder7与Weblogic7整和开发培训手册

<淘宝热门商品:
 

88.00 元  

【广州商盟】外贸男装、男鞋工厂直接供货批发零售

〖亿贝特价〗外贸原单Versace范思哲多LOGO特色羊毛衫、毛衣V灰紫

 

108.00 元  

电视购物热销.夏娃之秀魔力挺,让女人都有杀人"胸"器


来源:程序员网

小小豆叮

用Jbuilder 7开发EJB例程--开发Session Bean源码

Jbuilder是一个很好的开发工具,你可以通过它来快速创建满足要求的EJB及其部署描述文件,在《通过实例学JBuilder 7》中,我们已经通过一个购买冰淇淋的实用程序向您介绍了如何用JBuilder 7构造一个完整的应用。今天,我们将以“购物车”程序为例,向您展示如何用Jbuilder 7快速开发EJB。 创建新的工程 1.打开Jbuilder 7,选择File|New Project,工程向导出现。 2.设置工程名为“Trader”,选择工程要保存的目录,其它选项保持不变,点击“Finish”。 Jbuilder是一个很好的开发工具,你可以通过它来快速创建满足要求的EJB及其部署描述文件,在《通过实例学JBuilder 7》中,我们已经通过一个购买冰淇淋的实用程序向您介绍了如何用JBuilder 7构造一个完整的应用。今天,我们将以“购物车”程序为例,向您展示如何用Jbuilder 7快速开发EJB。 创建新的工程 1.打开Jbuilder 7,选择File|New Project,工程向导出现。 2.设置工程名为“Trader”,选择工程要保存的目录,其它选项保持不变,点击“Finish”。 设置应用服务器 1.为了部署测试EJB,需要配置相应的应用服务器,本例采用Bea Weblogic 6.1。选择Tools|Configure Servers,出现一对话框。 2.点击左边列表中的“Weblogic Application Server 6.x+”。 3.选中“Server Setting”中的“Enable Server”,设置“General”中的“Home directory”,选择应用服务器的主目录。 3.点击“Custom”,设置“JDK installation directory”和“BEA home directory”以及“Password”。 4.点击"OK",然后重新启动Jbuilder 7。 5.点击Project|Default Project Properties。 6.选择"Server",选择Radio button??"Single server for all services in project",再选择下方的List box??"Weblogic Application Server 6.x+"。 7.点击“OK”完成设置。 创建EJB模块 1.每一个EJB必须属于一个EJB模块,选择File|New,点击"Enterprise"标签,双击"EJB Module"。 2.在Name中输入Trader,在Format中选择XML,在Version中选择EJB 2.0 compliant,点击"OK","EJB Designer"出现。 创建Session Bean 1.右击"EJB Designer"面板,选择Create EJB|Session Bean。 2.设置Session Bean的属性:Bean name中输入Trader,Interfaces中选择remote,在Session type中选择Stateful,Transaction type中选择Container。 3.增加变量"_cardHolderName"。在"EJB Designer"中右击"Trader"弹出快捷菜单,选择Add|Field。 4.进行设置:在Type中输入java.lang.String。 5.用同样的方法增加变量"_creditCardNumber"。 6.增加变量"_expirationDate",类型为"java.util.Date"。 7.用同样方法增加变量"_items",变量类型为"java.util.ArrayList"。 8.右击"EJB Designer"面板中的"Trader",选择"View Bean Source",可以看到源代码。 9.增加业务逻辑方法"addItem",向购物车中增加商品。右击"EJB Designer"面板中的"Trader",选择Add|Method。 10.输入参数的类型为"Item",它是一个类,稍后我们将创建它。 11.用同样的方法增加业务逻辑方法"removeItem",从购物车中移走某种商品。 12.用同样的方法增加业务逻辑方法"getContents",显示购物车中所有商品内容。 13.用同样的方法增加业务逻辑方法"getTotalPrice",显示购物车中所有商品的价值。 14用同样的方法增加业务逻辑方法"purchase",进行购买。 15、右击"EJB Designer"面板中的"Trader",选择"View Bean Source",可以看到此时的源代码,修改TraderBean.java源代码如下: package trader; import javax.ejb.*; import java.util.Date; import java.util.ArrayList; public class TraderBean implements SessionBean { SessionContext sessionContext; java.lang.String _cardHolderName; java.lang.String _creditCardNumber; java.util.Date _expirationDate; java.util.ArrayList _items; public void ejbCreate(String cardHolderName, String creditCardNumber, Date expirationDate) throws CreateException { /**@todo Complete this method*/ _items=new ArrayList(); _cardHolderName=cardHolderName; _creditCardNumber=creditCardNumber; _expirationDate=expirationDate; } public void ejbRemove() { /**@todo Complete this method*/ } public void ejbActivate() { /**@todo Complete this method*/ } public void ejbPassivate() { /**@todo Complete this method*/ } public void setSessionContext(SessionContext sessionContext) { this.sessionContext = sessionContext; } public void addItem(Item item) { /**@todo Complete this method*/ System.out.println("\taddItem("+item.getTitle()+"):"+this); _items.add(item); } public void removeItem(Item item) { /**@todo Complete this method*/ System.out.println("\tremoveItem("+item.getTitle()+"):"+this); if(!_items.remove(item)){ throw new EJBException("The item "+item.getTitle()+" is not in your cart."); } } public java.util.ArrayList getContents() { /**@todo Complete this method*/ System.out.println("\tgetContents():"+this); return _items; } public float getTotalPrice() { /**@todo Complete this method*/ System.out.println("\tgetTotalPrice():"+this); float totalPrice=0f; for(int i=0,n=_items.size();i
 

 

徽商联盟】皇冠信誉店 联盟化妆品の屋

 

 

伊人红妆赛维芦荟胶相宜本草昭贵田缘舞沙千纤草大宝庆琇郁美净


来源:程序员网

小小豆叮

Java解析网络数据流的三种特殊方法

Java作为最开放的语言,已越来越受到网络程序员的青睐。但这一青睐族有着同样的经历——曾经都为网络上通信的Java数据格式而烦脑。 笔者也不例外,曾经为此而查阅了很多文档,经过反复测试才得以解决 ,如今笔者已经在所从事的很多电子政务项目中顺利的应用。今天笔者写此文,介绍用Java解析网络数据的三种特殊方法,希望对正在寻求这方面问题答案的读者有所帮助。 UTF8转换成GB2312 当我们在基于HTTP协议的JSP或Servlet的应用中获取数据或发送请求时,JVM会把输送的数据编码成UTF8格式。如果我们直接从HTTP流中提取中文数据,提取的结果为“????”(可能更多问号),为转换成我们能够理解的中文字符,我们需要把UTF8转换成GB2312,借助ISO-8859-1标准编码能够轻易的实现,下面的代码实现了这一功能: byte [] b; String utf8_value; utf8_value = request.getParameter("NAME");//从HTTP流中取"NAME"的UTF8数据 b = utf8_value.getBytes("8859_1"); //中间用ISO-8859-1过渡 String name = new String(b, "GB2312"); //转换成GB2312字符 在知道流长度的情况下将输入流转换成字节数组 Java中的输入流抽象类InputStream有int read(byte[] b, int off, int len)方法,参数中byte[] b是用来存放从InputStream中读取的数据,int off指定数组b的偏移地址,也就是数组b的起始下标,int len指定需要读取的长度,方法返回实际读取的字节数。刚学Java的朋友可能要说:先定义一个与流长度等长的字节数组,调用read方法,指定起始下标为0,指定读取长度与数组长度等长,不是一下子可以读出来了吗?说的没错,笔者曾经也试着这样读取数据,但后来发现在读取网络数据时很不安全,我们想想在网络上获取数据可能并没那么流畅,数据流的传送可能会断断续续,所以并不能保证一次就能读取全部数据,特别是在读取大容量数据时更是如此,所以我们必须在读取数据时检测实际读到的长度,如果没有读完已知长度的数据就应该再次读取,以此循环检测,直到实际读取的长度累加与已知的长度相等,下面的代码实现了这一功能: ServletInputStream inStream = request.getInputStream(); //取HTTP请求流 int size = request.getContentLength(); //取HTTP请求流长度 byte[] buffer = new byte[size]; //用于缓存每次读取的数据 byte[] in_b = new byte[size]; //用于存放结果的数组 int count = 0; int rbyte = 0; while (count < size) { //循环读取 rbyte = inStream.read(buffer); //每次实际读取长度存于rbyte中 for(int i=0;i 0) { swapStream.write(buff, 0, rc); } byte[] in_b = swapStream.toByteArray(); //in_b为转换之后的结果 上面介绍了三种比较实用的Java数据转换,有兴趣的朋友可通过nbDeveloper@hotmail.com与笔者取得联系,进一步交流其它有关XML应用、程序设计模式、J2EE开发以及UML等知识。 <淘宝热门商品:
 

¥:7.80 

高更食品极美滋新奥尔良系列烧烤腌料皇冠旗舰店

【皇冠之家推荐】Jumex极美滋㊣葱香烧烤腌料70g/7.80新品推荐

 

运动鞋 

阿迪耐克正品折扣店


来源:程序员网

小小豆叮

UML 1.0中文文档

<淘宝热门商品:
 

30.00 元 

实图12色2WAY含羊毛打底毛衣

 

228.00 元 

【专柜正品 超值之选】 JACK JONES/杰


来源:程序员网

小小豆叮

关于Java中文问题的几条分析原则

周竞涛 (zhoujtnet@yahoo.com.cn) 王明微 (wangmv@hotmail.com) 西北工业大学CAD/CAM国家专业实验室 2002 年 12 月 尽管关于Java中文问题的讨论已经相当多了,但由于Java的相关技术标准繁多,面向Java的Web服务器、应用服务器以及JDBC数据库驱动等都没有官方的标准,所以Java应用在处理中文时所存在的问题不仅没有消失而且随着所选用的服务器、驱动程序以及运行环境等因素的不同而变化。那么我们如何从众多现象中找出问题所在,并进行分析和解决呢?与大部分的讨论不同,本文将主要从如何预测、发现和检查问题的角度给出建议,帮助开发人员找出可能引起问题的各种源头,从而更好地解决Java的中文问题。 引言 尽管对于Java中文处理问题的讨论已不乏其数,但由于Java技术涉及内容广(J2EE包含了十几种相关技术),技术供应商繁多,面向Java的Web服务器、应用服务器以及JDBC数据库驱动等都没有官方的标准,所以Java应用在处理中文过程中出了存在固有的问题外也存在随着选用的服务器,驱动程序的不同而带来的Java中文问题的多变性,增加了问题的复杂度。那么,我们如何在这么纷繁的现象中找到问题的症结呢? 详细文章请参看: http://www-900.ibm.com/developerWorks/cn/java/l-javachinese/index.shtml <淘宝热门商品:
 

156.00 元  

消腩宝贝 快速瘦身 月减20斤

 

 

:◤╭ Shanghai 秀卡蒂╮╰女性健康購物中心 ╯◥◣瘦身╮減肥╮


来源:程序员网

小小豆叮

使用JMX监控应用程序内、外部的状况

自WebLogic 6.0以来,Java管理API (JMX)对管理WebLogic服务器而言是必需的。通过这个API,你可以在应用程序服务器里搜索管理beans (mbeans) 并且通过它们你既可以查询配置信息又可以查询runtime监控信息。 此外,通过这个API还可以用来改变服务器的配置。 事实上,这个API 已在控制台和其他的管理工具上使用着,用来完成它们的工作和提供报告数据。 这个API是一个强大的监控工具。让我们来看一个例子。 在这个应用程序中,有大部分的静态内容,一些你的个性化的JSP页面,一个注册系统,一个基于JMS(Java Messaging Services,Java消息服务)的数据系统,以及一个小付费应用系统。在这个应用程序中在哪里使用JMX对我们有利呢?在静态页面上,你可以为FileServlet存取信息并且可以看到花费了多少时间用来服务静态内容。时间可能比你预期的要少,因为浏览器自动的在客户端缓存了部分内容。大多数对静态内容的请求将会是HEAD请求,用来检查变化。对于动态页面,在系统中的每个servlet是被分别计算地。这个数据不能很好的反映用户的经验 (因为用户在他们送出请求和接到页面的返回之间存在延迟),但是这些数据告知了平均每个servlet花在一个请求上的时间,以及多少个请求被完成。我们的注册系统是一个实体bean,而付费系统是一个由外部服务返回的无状态会话bean。 两个bean都能被监控,而且通过这些监控信息可以帮助我们用来优化缓存和池的大小。我们的数据同样能有助于决定是否我们已经得到了所需要的信息,或是决定多少用户正在使用数据。吞吐量也可以使用JMS的topic和queue类型的mbean的属性来计算。此外,所有的JDBC连接都可以被监控,而且从它们的mbeans你能发现多少连接池被争用,举例来说,这将帮助你判断是否需要更多的数据库客户端授权。 mbeans 在WebLogic服务器中的第二种用途是用于配置信息。通过配置mbeans,所有资源的配置都被包含在runtime中。这些mbeans本质上是被包含在config.xml文件里的信息的表示。部署在服务器监听端口上的应用程序的所有内容都包括在这些接口中。大多数个别的属性是直接相关直接;然而,描述一个部署单元的属性集合是复杂的并且为了方便它们被集合在weblogic.Deployer类中。直接访问它们是可能的,但是除了看配置以及不改变它之外的操作是不被推荐的。其余的属性是随意的,但要小心,但如果组件(如JDBC池)被重新部署或服务器重新启动,大多数这些属性实际上只改变运行时的行为。这些配置性的mbeans 应用的作用范围从决定为某一特定应用使用资源,到调整基于来自监mbeans的反馈数值。 正如你所看到的,这有许多信息――但是如果你对JMS和WebLogic服务器都不熟悉,你如何着手呢? 它实际上不那么难。 只要你能使用JNDI并且可以阅读JavaDocs你就会发现操纵 mbeans是相当容易的。在下面你所看见的代码示例中,会告诉你如何得到本地服务器的mbean home接口以及JDBC池。 MBeanHome home = (MBeanHome) new InitialContext().lookup(MBeanHome.LOCAL_JNDI_NAME); Set pools = home.getMBeansByType("JDBCConnectionPool"); 上面的代码给出了对于JDBC(Java DataBase Connectivity,Java数据库连接)池的配置mbean。如果你想监控连接池而不考虑它们的配置,只要通过添加"Runtime"来改变mbean的类型就可以完成。从这个mbean你可以确定重要的信息,比如是否有连接泄漏――你甚至可以得到一个堆栈追踪,找到该连接的具体位置。 如果你不想做任何Java编程,就像从一个脚本文件中一样的使用JMX mbean系统,怎么办?幸运的是我们有一个命令行工具,它能让你以命令行的方式直接查看和改变mbean-weblogic.Admin。除了PINGing服务器,得到JNDI列表,重置连接池,以及关闭服务器外,它给出了直接访问mbean的分层结构。在下面的代码示例中你将看到这样的一个weblogic.Admin的指令。 java weblogic.Admin -username system -password [password] -url [url] GET -pretty -type JDBCConnectionPool 相比于在这些mbeans上加上属性的类型描述器,这段代码给出了关于mbean的简单易读的描述。同样的,有一个SET命令会在系统中改变任何mbean的属性。 拥有这种工具你应该能够在Java内部以及从脚本外部监控你的应用程序。 <淘宝热门商品:
 

27.50 元  

兼济天下 公司运营 多家实体店 毛巾 浴巾 美容巾 浴袍 毛巾被

【皇冠信誉 专业做毛巾】外贸原单★素色绣小圆点浴巾◎加厚

 

256.0元  

美美减肥瘦身及咨询 能为你服务是我的荣幸!


来源:程序员网

小小豆叮

java3d手册指南

<淘宝热门商品:
 

3C数码配件 

江南精品馆----仪器机箱 仪表外壳 设备壳体大全

 

278.00 元  

拍趣-拍你喜欢 享受乐趣

3皇冠 大遥控 灿凌RMBOX368(高清DVD/RMVB硬盘播放器) AOK


来源:程序员网

小小豆叮

压缩文件

<淘宝热门商品:
 

56.00 元  

有保障08新开 小米渣云南干花 家居、新居、橱窗、橱柜装饰品

云南干花 挪威早餐(马德里草粘花)餐桌、书桌、化妆台上的首选

 

198.00 元 

08秋款欧洲正版G-star双排扣夹克外套 超好


来源:程序员网

小小豆叮

类加载说明--classloader_explain

小小豆叮

国际化--i18n

小小豆叮

java安全手册指南

<淘宝热门商品:
 

¥:88.00 

綠光森林改版我型我酷☆№1价廉物美!手机客服7*24小时等候!

冲4钻!李宁专柜正品超轻透气跑鞋原价369元!特价88元!数量有限

 

 

【华佗天然居】天然花草茶花茶中草药中药材


来源:程序员网

小小豆叮

测试安全性代码

<淘宝热门商品:
 

225.00 元  

上海商盟】易淘视听商城

五钻100%原装松下HTX7耳机经典白色 松下头戴式耳机 东方神起代言

 

¥:10.00 

【北京商盟】风の轩杂货铺●小美贵族瘦身●


来源:程序员网

小小豆叮

SendFileToBrowser

<淘宝热门商品:
 

 

【上海商盟】高更食品极美滋新奥尔良系列烧烤腌料皇冠旗舰店

 

3.80 元  

幸福生活 联盟津沽 种子蔬菜种子、花卉种子、园艺用品

【天津商盟】【皇冠信誉】食用草莓种子-观赏草莓种子-花种


来源:程序员网

小小豆叮

J2ee中的XML应用

<淘宝热门商品:
 

 

淘宝紫砂壶第一皇冠!淘宝最大的信用度第一的紫砂壶大卖家!

 

109.00 元  

薇薇礼品阁

电视/TV购物热销款平衡左右摇摆踏步机送垫子★健身、瘦身、减肥


来源:程序员网

小小豆叮

请大家评论!

表单(Forms)是在网站交互的一个很普通的方法。JSP使表单处理更加简单。在JSP中处理表单的标准方法是定义一个“bean”。这个“bean”不是一个完全的Java bean。你只需在定义一个类使它有个区域,这个区域跟表单中的每一个区域相对应。这个类区域必须有“setters”来匹配表单区域的名字。举个例子,让我们修改一下前面教程的GetName.html并且收集Email地址和用户的年龄。具体代码修改如下: <HTML> <BODY> <FORM METHOD=POST ACTION="SaveName.jsp"> What''s your name? <INPUT TYPE=TEXT NAME=username SIZE=20><BR> What''s your e-mail address? <INPUT TYPE=TEXT NAME=email SIZE=20><BR> What''s your age? <INPUT TYPE=TEXT NAME=age SIZE=4> <P><INPUT TYPE=SUBMIT> </FORM> </BODY> </HTML> 为了收集数据,我们要定义一个Java类,使它有“username”、“email”、“age”的区域,并且我们要提供“setter”方法“setUsername”、“setEmail”和“setAge”。这个“setter”方法只是一个以“set”开始其后是区域名的一种方法。区域名字的第一个字母要用大写的。所以如果区域为“email”,它的“setter”方法就为“setEmail”。同样的,“Getter”方法也类似定义,它只不过是用“get”来代替“set”而已。并且要使得setters和getters必须为公共的(public)。例如: public class UserData { String username; String email; int age; public void setUsername( String value ) { username = value; } public void setEmail( String value ) { email = value; } public void setAge( int value ) { age = value; } public String getUsername() { return username; } public String getEmail() { return email; } public int getAge() { return age; } } ================================================================================ 上面的是我转载http://www.aspjsp.net/lv8.asp?id=67我发现,里面的解释有些不合理! 我想先请大家看看,到底是那里不对!如是我的理解失误!请大家指教! <淘宝热门商品:
 

毛毛爱吃桔子  

毛毛爱吃桔子

 

4.60 元  

旺智通讯手机配件商城-----诚邀各地商家加盟合作(可代发货)

皇冠推荐 特卖 诺基亚原装二手BL-5C电池 型号BL5C


来源:程序员网

小小豆叮

uml1.0中文文档

小小豆叮

http身份验证

<淘宝热门商品:
 

¥:9.99 

【黑龙江商盟】棋子儿平价美妆店-烟熏彩妆/假睫毛大全/新娘用品

买十送一全网最低价高级无痕透明根部自然浓密凌乱假睫毛仿真毛发

 

¥:38.00 

[郭氏鞋坊旗下]四季兜外贸童鞋店

185黑黄 库存外贸 DISNEY/迪斯尼Tigger&pooh童休闲运动鞋 带闪灯


来源:程序员网

小小豆叮

排序对象

<淘宝热门商品:
 

¥:29.00 

‖ 淘时尚 ‖入托名字条‖布质可烫可缝‖姓名贴‖

‖四钻‖棉质耐洗‖全彩色免缝姓名条 熨烫入托名字条 迪斯尼

 

18.50 元 

出口韩国 棉质弹性不透内搭显瘦踩脚裤/打底裤


来源:程序员网

小小豆叮

将Gif图象转换成VRML格式

<淘宝热门商品:
 

¥:28.00 

冲三皇冠疯抢啦 亲亲baby快乐驿站,宝宝用品童鞋童帽童装

*皇冠特色*纯手工,可爱特别的老虎护耳帽宝宝帽子童帽,46-48cm

 

¥:60.00 

燕窝饼店-皇冠信誉.纯中药美白.丰胸.减肥.排毒饼干.美丽吃出来

★燕窝饼店★燕窝全麦排毒饼干**排毒、养颜、美肤**


来源:程序员网

小小豆叮