﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-匪客Blog-随笔分类-开发技术</title><link>http://www.blogjava.net/96sd2/category/7287.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 24 Jan 2008 08:56:18 GMT</lastBuildDate><pubDate>Thu, 24 Jan 2008 08:56:18 GMT</pubDate><ttl>60</ttl><item><title>让嵌入窗体的 WebBrowser 控件无边框（转）</title><link>http://www.blogjava.net/96sd2/archive/2008/01/24/177506.html</link><dc:creator>匪客</dc:creator><author>匪客</author><pubDate>Thu, 24 Jan 2008 07:23:00 GMT</pubDate><guid>http://www.blogjava.net/96sd2/archive/2008/01/24/177506.html</guid><wfw:comment>http://www.blogjava.net/96sd2/comments/177506.html</wfw:comment><comments>http://www.blogjava.net/96sd2/archive/2008/01/24/177506.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/96sd2/comments/commentRss/177506.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/96sd2/services/trackbacks/177506.html</trackback:ping><description><![CDATA[<p>　　前一段时间升级了一个程序，将程序的主界面用网页来设计，效果非常好，用 HTML+CSS 可以实现更加丰富的界面效果，比直接用 Delphi 来得容易。</p>
<p>　　实现的方法很简单，在窗体添加一个 WebBrowser 组件，然后执行以下代码：<br />
</p>
　　<span style="color: #ff0000">WebBrowser1.Navigate('D:\Soft\HomePage.html'); <br />
</span><br />
<p>　　但随之而来出现了一个问题：WebBrowser 组件在未载入 HTML 之前是无边框的，当载入 HTML 之后，WebBrowser 四周出现了一个三维边框，和程序本身的风格极不协调，查看了 WebBrowser 的所有属性，没有属性可以改变这一设置。</p>
<p>　　经过测试以后发现，该边框并不是 WebBrowser 产生的，而是 WebBrowser 中载入的 HTML 产生的，如果是这样的话，那问题就好解决了，真接用 CSS 去掉边框：<br />
</p>
　　<span style="color: #ff0000">body { border: 0px; overflow: auto; /*可自动隐藏或显示滚动条；设为 hidden 完全隐藏滚动条*/ } <br />
</span>
<p><br />
　　当你高兴地设置以上 CSS 后，却发现 WebBrowser 的边框却依然存在，是 CSS 错了吗？NO，是你的 DOCTYPE 出了问题，以上的 CSS 在 XHTML 下是无效果的，将 DOCTYPE 设为 HTML4 即可：<br />
</p>
　　<span style="color: #ff0000">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br />
</span>
<img src ="http://www.blogjava.net/96sd2/aggbug/177506.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/96sd2/" target="_blank">匪客</a> 2008-01-24 15:23 <a href="http://www.blogjava.net/96sd2/archive/2008/01/24/177506.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>大褂还是内裤</title><link>http://www.blogjava.net/96sd2/archive/2008/01/11/174602.html</link><dc:creator>匪客</dc:creator><author>匪客</author><pubDate>Fri, 11 Jan 2008 05:28:00 GMT</pubDate><guid>http://www.blogjava.net/96sd2/archive/2008/01/11/174602.html</guid><wfw:comment>http://www.blogjava.net/96sd2/comments/174602.html</wfw:comment><comments>http://www.blogjava.net/96sd2/archive/2008/01/11/174602.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/96sd2/comments/commentRss/174602.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/96sd2/services/trackbacks/174602.html</trackback:ping><description><![CDATA[<p>　　有个相声说，某人买了一丈布，要找裁缝做大褂。其妻自告奋勇，称自己也会做，就接手做了。两个月后问她，说做是做，只是把布剪坏啦，改做小褂吧。如此循环，从大褂变成小褂，小褂变成肚兜，肚兜变成内裤，内裤变成口罩，最后只好扎了墩布。</p>
<p>　　闲话表过，再表闲话。</p>
<p>　　话说Mitch Kapor以数十亿美金高价把一手创建的Lotus公司卖给IBM后，做了一段投资人，又回归技术界，创立一家开源基金会。为了实现心目中&#8220;最好的PIM软件（个人信息管理，类似Outlook那样的）&#8221;，投入百万美元，聘请了一群最NB的程序员（包括Netscape元老级程序员、Macintosh操作系统核心程序员、微软资深开发工程师&#8230;&#8230;），动手开干。有近乎奢侈的资源（财力、人力、时间），照说项目应该顺利进行吧。其实不然。这个名为Chandler的项目，从2000年开始立项，开发过程中软件功能列表一再缩减，直至今日尚未推出1.0正式版本。测试版本在我的Windows 2003操作系统上，仍然无法运行。</p>
<p>　　看过上面两桩闲话，读者大概知道我想说什么了。雄伟的愿景往往流于空想，做软件难，第一难就在于蓝图太宏大。常有朋友找我帮他们做顾问，看看他们的软件/网站项目。通常的过程会是这样——</p>
<p>&nbsp;　　（演示、讲解项目目标、功能等等）<br />
　　我：请问，这是你们真正想要的东西吗？<br />
　　对方：是，我们想做最好的xxx。<br />
　　我：请问，你们打算花多长时间来做这个项目呢？<br />
　　对方：三个月。<br />
　　我：坦率地说，你们不可能做得到。我的建议是，把刚才说的功能先砍掉一半，再砍掉三分之二，剩下的部分，大概就是三个月之内你们能完成的部分了。<br />
　　对方：&#8230;&#8230;</p>
<p>&nbsp;　　产品设计者往往会想得太多，把所有可能路径都设想在内。而开发者则往往会低估项目难度，做出太过乐观的判断。这样的结果就是，以为可以在过短时间内完成过于庞杂的功能。危害有二：其一，项目无限期延误；其二，功能不断缩减。六个月甚至一年之后，大褂没做成，千疮百孔内裤倒是有一条。与其如此，不如一开始就以内裤为目标好了。</p>
<p>　　昨天有人问我，为什么是&#8220;先砍一半再砍三分之二&#8221;而不是&#8220;砍掉六分之五&#8221;。我说的&#8220;砍&#8221;，不是简单按字母顺序嚓嚓嚓，而是一个讨论、思考的过程。第一步去除一半，第二步去除一半的三分之二。起初设想出那么多功能，肯定花了不少心血。现在要砍，每一项都显得那么宝贵而舍不得丢弃。反复斟酌、流泪放弃，最后剩下的，是软件/网站项目最最核心和关键的功能，也是以目前资源所能完成的工作。以后，再视运营情况加以增补。</p>
<p>　　我想，做其它事，或许也可以采用类似的方法吧。大褂还是内裤，这是一个难题。以我之愚鲁，大褂不敢妄想，甚至没准内裤也做不出来，那就踏踏实实、裁剪缝制一个真有用的口罩吧。</p>
<img src ="http://www.blogjava.net/96sd2/aggbug/174602.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/96sd2/" target="_blank">匪客</a> 2008-01-11 13:28 <a href="http://www.blogjava.net/96sd2/archive/2008/01/11/174602.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>腾讯搜索产品中心副总邢宏宇谈：技术与产品的故事</title><link>http://www.blogjava.net/96sd2/archive/2008/01/11/174599.html</link><dc:creator>匪客</dc:creator><author>匪客</author><pubDate>Fri, 11 Jan 2008 05:24:00 GMT</pubDate><guid>http://www.blogjava.net/96sd2/archive/2008/01/11/174599.html</guid><wfw:comment>http://www.blogjava.net/96sd2/comments/174599.html</wfw:comment><comments>http://www.blogjava.net/96sd2/archive/2008/01/11/174599.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/96sd2/comments/commentRss/174599.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/96sd2/services/trackbacks/174599.html</trackback:ping><description><![CDATA[<p>　　一天，一位产品经理走进了技术人员的办公室，要求在技术上实现B方案，产品经理滔滔不绝的描述起了B方案的种种细节，虽然产品经理的口才了得，但是说完之后，技术人员仍然不理解为什么要突然实施这样一个技术方案。</p>
<p>　　我想这种场景在我们的项目实施过程中会经常出现，那么接下来该做些什么呢？是技术人员该就此技术方案找出N+1条拒绝的理由还是产品经理继续讲述第N+1遍方案细节呢？当然都不是，腾讯搜索产品中心副总经理邢宏宇认为：讨论一致性的目标才是最应该做的。</p>
<p>　　腾讯搜索产品中心副总经理邢宏宇是一位技术团队&#8220;老练的&#8221;的领路人。他认为，在项目实施的过程中，技术和需求之间会产生矛盾这是一个普遍的现象。这些矛盾的存在带来的负面影响可谓是大小不一，大到会使整个项目停滞或者流 产，小到员工之间不和睦闹矛盾。当然，我们也看到了很多成功合作的案例，他们是如何解决这些矛盾的呢？</p>
<p>　　在上面的故事中，其实产品经理做了B技术方案是为了实现产品功能A，那么他只需要把他要实现的功能A清楚的描述给技术人员就可以了。最后技术人员用了更好的技术方案C轻松的实现了产品功能A。因此，在现代项目实施过程中，产品经理和技术人员之间需要学会&#8220;沟通、信任、支持&#8221;。</p>
<p>　　软件产品特别是互联网产品的多样性、多变性的特征使得它的诞生必然要伴随着成千上万次的沟通。 邢宏宇表示，&#8220;沟通更深层次的也代表着你主动参与意识的强弱，而不仅仅是被动的去完成一项任务，参与程度越高它所能给你带来的乐趣也越大。&#8221;</p>
<p>　　沟通也需要技巧，正如我们之前的故事里所讲，如果产品经理一直和技术人员沟通B技术方案，但技术人员却并不知道是为了实现功能A，这样的沟通只会浪费时间。所以，沟通也要&#8220;各司其职&#8221;。越线的沟通就会埋下问题的种子，这也是为什么沟通之后需要信任。</p>
<p>　　产品经理擅长的是功能描述、技术人员擅长的是技术方案的制定。邢宏宇说：&#8220;我们都要相信对方的专业素质，技术人员要相信产品经理提出的功能一定是经过专业思考的，而产品经理也一定要相信针对这样的功能技术人员肯定能拿出最优的技术解决方案。&#8221;只有这样，技术人员才不会说产品的某一个功能是&#8220;垃圾&#8221;，而产品经理也不会越俎代庖的帮技术人员想好技术方案。团队之间表现在，技术人员帮助产品经理提建议和想办法，思考自己在技术实现的过程中出现的问题，可不可以做技术上的优化；而产品经理在帮助技术人员建议方案同时也要反思一下自己提出的功能是否真的合理。</p>
<p>　　邢宏宇总结说：&#8220;任何一个软件产品都是一个高度集中的集体智慧，这其中团队内部、团队之间你来我往的协作过程中，包含了更多的艺术和技巧。&#8221;</p>
<img src ="http://www.blogjava.net/96sd2/aggbug/174599.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/96sd2/" target="_blank">匪客</a> 2008-01-11 13:24 <a href="http://www.blogjava.net/96sd2/archive/2008/01/11/174599.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>单独使用Spring建立简易开发框架（六） </title><link>http://www.blogjava.net/96sd2/archive/2007/09/11/144382.html</link><dc:creator>匪客</dc:creator><author>匪客</author><pubDate>Tue, 11 Sep 2007 15:22:00 GMT</pubDate><guid>http://www.blogjava.net/96sd2/archive/2007/09/11/144382.html</guid><wfw:comment>http://www.blogjava.net/96sd2/comments/144382.html</wfw:comment><comments>http://www.blogjava.net/96sd2/archive/2007/09/11/144382.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/96sd2/comments/commentRss/144382.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/96sd2/services/trackbacks/144382.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: <br>　　7. 开发工作要做什么<br><br>　　一般说来，完成一个操作流程的全部开发需要完成以下工作：<br><br>　　　　1.  配置servlet-xxx.xml文件，加入URI请求的控制器Bean、逻辑类及方法；<br>　　　　2.  配置applicaionContext-xxx.xml文件，加入响应URI请求的逻辑类Bean定义；<br>　　　　3.  建立逻辑类文件接口类文件，加入响应URI请求的方法，并实现该类和方法，在方法体中完成具体的业务代码，如果需要操作数据库，则实现类需要继承JdbcDaoSupport类；<br>　　　　4.  建立.jsp文件，输出请求结果；<br><br>　　进入下载演示代码！！！<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/96sd2/archive/2007/09/11/144382.html'>阅读全文</a><img src ="http://www.blogjava.net/96sd2/aggbug/144382.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/96sd2/" target="_blank">匪客</a> 2007-09-11 23:22 <a href="http://www.blogjava.net/96sd2/archive/2007/09/11/144382.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>单独使用Spring建立简易开发框架（五） </title><link>http://www.blogjava.net/96sd2/archive/2007/09/11/144380.html</link><dc:creator>匪客</dc:creator><author>匪客</author><pubDate>Tue, 11 Sep 2007 15:10:00 GMT</pubDate><guid>http://www.blogjava.net/96sd2/archive/2007/09/11/144380.html</guid><wfw:comment>http://www.blogjava.net/96sd2/comments/144380.html</wfw:comment><comments>http://www.blogjava.net/96sd2/archive/2007/09/11/144380.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/96sd2/comments/commentRss/144380.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/96sd2/services/trackbacks/144380.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: <br>　　6. SPRING配置<br>　　　　6.1. 视图配置<br>　　　　6.2. 数据库连接<br>　　　　6.3. 数据库事务<br>　　　　6.4. 控制器配置<br>　　　　6.5. 逻辑类配置<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/96sd2/archive/2007/09/11/144380.html'>阅读全文</a><img src ="http://www.blogjava.net/96sd2/aggbug/144380.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/96sd2/" target="_blank">匪客</a> 2007-09-11 23:10 <a href="http://www.blogjava.net/96sd2/archive/2007/09/11/144380.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>单独使用Spring建立简易开发框架（四） </title><link>http://www.blogjava.net/96sd2/archive/2007/09/11/144345.html</link><dc:creator>匪客</dc:creator><author>匪客</author><pubDate>Tue, 11 Sep 2007 11:11:00 GMT</pubDate><guid>http://www.blogjava.net/96sd2/archive/2007/09/11/144345.html</guid><wfw:comment>http://www.blogjava.net/96sd2/comments/144345.html</wfw:comment><comments>http://www.blogjava.net/96sd2/archive/2007/09/11/144345.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/96sd2/comments/commentRss/144345.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/96sd2/services/trackbacks/144345.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: <br>　　5. WEB.XML配置	<br>　　　　5.1. 基本配置	<br>　　　　5.2. 加载SPRING监听<br>　　　　5.3. LOG4J日志<br>　　　　5.4. 解决中文乱码<br>　　　　5.5. 配置SERVLET&nbsp;&nbsp;<a href='http://www.blogjava.net/96sd2/archive/2007/09/11/144345.html'>阅读全文</a><img src ="http://www.blogjava.net/96sd2/aggbug/144345.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/96sd2/" target="_blank">匪客</a> 2007-09-11 19:11 <a href="http://www.blogjava.net/96sd2/archive/2007/09/11/144345.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>单独使用Spring建立简易开发框架（三） </title><link>http://www.blogjava.net/96sd2/archive/2007/09/11/144344.html</link><dc:creator>匪客</dc:creator><author>匪客</author><pubDate>Tue, 11 Sep 2007 11:06:00 GMT</pubDate><guid>http://www.blogjava.net/96sd2/archive/2007/09/11/144344.html</guid><wfw:comment>http://www.blogjava.net/96sd2/comments/144344.html</wfw:comment><comments>http://www.blogjava.net/96sd2/archive/2007/09/11/144344.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/96sd2/comments/commentRss/144344.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/96sd2/services/trackbacks/144344.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: <br>　　4. 开发准备	<br>　　　　4.1. 开发工具	<br>　　　　4.2. 支撑库文件	<br>　　　　4.3. 系统目录结构	<br>　　　　4.4. 配置开发环境	<br>　　　　　　4.4.1 设置字符集	<br>　　　　　　4.4.2 配置数据库驱动	<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/96sd2/archive/2007/09/11/144344.html'>阅读全文</a><img src ="http://www.blogjava.net/96sd2/aggbug/144344.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/96sd2/" target="_blank">匪客</a> 2007-09-11 19:06 <a href="http://www.blogjava.net/96sd2/archive/2007/09/11/144344.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>单独使用Spring建立简易开发框架（二） </title><link>http://www.blogjava.net/96sd2/archive/2007/09/11/144320.html</link><dc:creator>匪客</dc:creator><author>匪客</author><pubDate>Tue, 11 Sep 2007 10:05:00 GMT</pubDate><guid>http://www.blogjava.net/96sd2/archive/2007/09/11/144320.html</guid><wfw:comment>http://www.blogjava.net/96sd2/comments/144320.html</wfw:comment><comments>http://www.blogjava.net/96sd2/archive/2007/09/11/144320.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/96sd2/comments/commentRss/144320.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/96sd2/services/trackbacks/144320.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: <br>　　3. 架构概览 <br><br>　　MVC 层在 Spring 的 AbstractController 类基础上进行了继承和重构，使整个框架仅使用单一的公共控制器，数据操作采用 Spring JdbcTemplate ，在逻辑层中直接集成了 Spring Jdbc 能力，可直接操作数据，表现层 Jstl ，除此之外，未定义任何的表单对象、数据库表映射对象和其他 ORM 的配置文件，在保留对关键功能的集成度的基础上技术入门度极低，重点关注业务功能和优化 SQL 语句 。 <br>&nbsp;&nbsp;<a href='http://www.blogjava.net/96sd2/archive/2007/09/11/144320.html'>阅读全文</a><img src ="http://www.blogjava.net/96sd2/aggbug/144320.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/96sd2/" target="_blank">匪客</a> 2007-09-11 18:05 <a href="http://www.blogjava.net/96sd2/archive/2007/09/11/144320.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>单独使用Spring建立简易开发框架（一）</title><link>http://www.blogjava.net/96sd2/archive/2007/09/11/144308.html</link><dc:creator>匪客</dc:creator><author>匪客</author><pubDate>Tue, 11 Sep 2007 09:07:00 GMT</pubDate><guid>http://www.blogjava.net/96sd2/archive/2007/09/11/144308.html</guid><wfw:comment>http://www.blogjava.net/96sd2/comments/144308.html</wfw:comment><comments>http://www.blogjava.net/96sd2/archive/2007/09/11/144308.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/96sd2/comments/commentRss/144308.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/96sd2/services/trackbacks/144308.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: <br>　　1. 前言	<br>　　2. 参考资料	<br>　　3. 架构概览<br>　　4. 开发准备	<br>　　5. WEB.XML配置	<br>　　6. SPRING配置	<br>　　7. 应用范例	<br>　　　　&nbsp;&nbsp;<a href='http://www.blogjava.net/96sd2/archive/2007/09/11/144308.html'>阅读全文</a><img src ="http://www.blogjava.net/96sd2/aggbug/144308.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/96sd2/" target="_blank">匪客</a> 2007-09-11 17:07 <a href="http://www.blogjava.net/96sd2/archive/2007/09/11/144308.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache2.0 + Tomcat5.5 如何禁止掉目录浏览</title><link>http://www.blogjava.net/96sd2/archive/2007/08/28/140627.html</link><dc:creator>匪客</dc:creator><author>匪客</author><pubDate>Tue, 28 Aug 2007 10:47:00 GMT</pubDate><guid>http://www.blogjava.net/96sd2/archive/2007/08/28/140627.html</guid><wfw:comment>http://www.blogjava.net/96sd2/comments/140627.html</wfw:comment><comments>http://www.blogjava.net/96sd2/archive/2007/08/28/140627.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/96sd2/comments/commentRss/140627.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/96sd2/services/trackbacks/140627.html</trackback:ping><description><![CDATA[
		<p>　　近日公司同事在开发一段程序完成后在网站上面测试，无意中发现访问网站路径<a href="http://www.xxx.com/WEB-INF/">http://www.xxx.com/WEB-INF/</a>这样的地址后会列出该目录下的所有文件，点击文件WEB-INF下的web.xml可以查看和下载，这样一来，配置的数据库连接信息就都暴露了，存在重大的安全隐患。<br /><br />　　该网站是采用Apache2.0 + Tomcat5.5配置的，*.jsp和*.do文件交由TOMCAT处理，其他文件由Apache处理，在Apache的配置文件httpd.conf中，配置了DocumentRoot与Tomcat的webapps/ROOT为相同目录，经过测试发现，如果访问地址不是*.jsp或*.do，并且在目录下没有默认欢迎文件index.html等，就会显示文件目录列表，这样以来Tomcat的webapps/ROOT/WEB-INF下的所有文件都可以下载下来，完全没有安全可言。<br /><br />　　经过查阅资料，可以有以下方式解决这个问题：一个是禁止目录索引功能，一个是禁止访问WEB-INF目录下文件的功能，都需要修改apache的配置文件httpd.conf：<br /> <br />　　1、禁止目录索引功能，查找如下段字符串，删除其中的“Indexes”即可，注意实际字符串可能有所区别：<br /> <br />            DocumentRoot "/usr/local/tomcat5/webapps/ROOT"<br /><br />            &lt;Directory "/usr/local/tomcat/webapps/ROOT"&gt;<br />                #<br />                Options <span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: red; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">Indexes </span>FollowSymLinks Includes<br />                #<br />                AllowOverride None<br />                #<br />                Order allow,deny<br />                Allow from all<br />            &lt;/Directory&gt;<br /> <br />　　2、禁止访问WEB-INF目录下文件的功能，在文件尾部加入如下字符串即可：<br /> <br />            &lt;Location ~ "/WEB-INF/"&gt; <br />              AllowOverride None<br />              Deny from all<br />            &lt;/Location&gt;<br /><br />　其中“~ "/WEB-INF/"”是通配符设置，即所有的路径中包含/WEB-INF/都不允许访问。</p>
		<p>　　上面是对Apache的配置，Tomcat也是需要调整的，修改tomcat目录/conf/web.xml文件，如下，将listings改为true：<br /><br />            &lt;servlet&gt;<br />              &lt;servlet-name&gt;default&lt;/servlet-name&gt;<br />              &lt;servlet-class&gt;org.apache.catalina.servlets.DefaultServlet&lt;/servlet-class&gt;<br />              &lt;init-param&gt;<br />                &lt;param-name&gt;debug&lt;/param-name&gt;<br />                &lt;param-value&gt;0&lt;/param-value&gt;<br />              &lt;/init-param&gt;<br />              &lt;init-param&gt;<br />                &lt;param-name&gt;<span lang="EN-US" style="FONT-SIZE: 10.5pt; COLOR: red; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">listings</span>&lt;/param-name&gt;<br />                &lt;param-value&gt;false&lt;/param-value&gt;<br />              &lt;/init-param&gt;<br />              &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />            &lt;/servlet&gt;<br /><br /><br />　　特此记录下来，供大家参考。<br /> <br /></p>
<img src ="http://www.blogjava.net/96sd2/aggbug/140627.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/96sd2/" target="_blank">匪客</a> 2007-08-28 18:47 <a href="http://www.blogjava.net/96sd2/archive/2007/08/28/140627.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Exception 处理之最佳实践（转）</title><link>http://www.blogjava.net/96sd2/archive/2007/07/10/129402.html</link><dc:creator>匪客</dc:creator><author>匪客</author><pubDate>Tue, 10 Jul 2007 10:02:00 GMT</pubDate><guid>http://www.blogjava.net/96sd2/archive/2007/07/10/129402.html</guid><wfw:comment>http://www.blogjava.net/96sd2/comments/129402.html</wfw:comment><comments>http://www.blogjava.net/96sd2/archive/2007/07/10/129402.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/96sd2/comments/commentRss/129402.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/96sd2/services/trackbacks/129402.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Exception 处理之最佳实践 原文：http://www.onjava.com/pub/a/onjava/2003/11/19/exceptions.html作者：Gunjan Doshi 2003-11-19译者注：本文算是一篇学习笔记，仅供学习参考使用，有不妥之处，还请指出。2003-12-04        “本文是Exception处理的一篇不错的文章，从Java Exception...&nbsp;&nbsp;<a href='http://www.blogjava.net/96sd2/archive/2007/07/10/129402.html'>阅读全文</a><img src ="http://www.blogjava.net/96sd2/aggbug/129402.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/96sd2/" target="_blank">匪客</a> 2007-07-10 18:02 <a href="http://www.blogjava.net/96sd2/archive/2007/07/10/129402.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>揭开J2EE集群的神秘面纱（PDF）</title><link>http://www.blogjava.net/96sd2/archive/2006/10/20/76399.html</link><dc:creator>匪客</dc:creator><author>匪客</author><pubDate>Fri, 20 Oct 2006 08:01:00 GMT</pubDate><guid>http://www.blogjava.net/96sd2/archive/2006/10/20/76399.html</guid><wfw:comment>http://www.blogjava.net/96sd2/comments/76399.html</wfw:comment><comments>http://www.blogjava.net/96sd2/archive/2006/10/20/76399.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/96sd2/comments/commentRss/76399.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/96sd2/services/trackbacks/76399.html</trackback:ping><description><![CDATA[
		<p>揭开J2EE集群的神秘面纱<br />2005年八月</p>
		<p>整理：枫远雅客 <a href="http://www.fyyk.com/">http://www.fyyk.com</a>   <a href="/Files/96sd2/揭开J2EE集群的神秘面纱.rar">点击下载PDF文件</a> <br />转载自<a href="http://blog.csdn.net/esoftwind">http://blog.csdn.net/esoftwind</a><br />翻译自TSS的文章。-- Uncover the hood of J2EE Clustering<br />原文：<a href="http://www.theserverside.com/tt/articles/article.tss?l=J2EEClustering">http://www.theserverside.com/tt/articles/article.tss?l=J2EEClustering</a></p>
		<p>    越来越多的关键应用运行在J2EE（Java 2, Enterprise Edition）中，这些诸如银行系统和账单处理系统需要高的可用性（High Availability, HA），同时像Google和Yahoo这种大系统需要大的伸缩性。高可用性和伸缩性在今天高速增长的互连接的世界的重要性已经证实了。eBay于1999年6月停机22小时的事故，中断了约230万的拍卖，使eBay的股票下降了9.2个百分点。</p>
		<p>    J2EE集群是用来提供高可用性和伸缩性服务，同时支持容错处理的一种流行的技术。但是，由于J2EE规范缺乏对集群的支持，J2EE供应商实现集群的方法也各异。这给J2EE架构师和开发人员带来了很多困难。以下是几个常见的问题：<br />     &gt;为什么带集群功能的商业J2EE服务器产品如此昂贵？（10倍于不带集群功能的产品）<br />     &gt;为什么基于单服务器环境构建的应用不能在集群中运行？<br />     &gt;为什么应用在集群环境中运行得很慢，但在非集群环境中却快得多？<br />     &gt;为什么集群的应用移植到其他服务器中失败？</p>
		<p>理解这些限制和要素的最佳方法是学习他们的实现方式。</p>
<img src ="http://www.blogjava.net/96sd2/aggbug/76399.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/96sd2/" target="_blank">匪客</a> 2006-10-20 16:01 <a href="http://www.blogjava.net/96sd2/archive/2006/10/20/76399.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>