<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>java &#8211; 天地一沙鸥</title>
	<atom:link href="https://haoluobo.com/tag/java/feed/" rel="self" type="application/rss+xml" />
	<link>https://haoluobo.com</link>
	<description>to be continue....</description>
	<lastBuildDate>Thu, 11 Oct 2012 06:31:43 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>
	<item>
		<title>编程语言们各自的哲学</title>
		<link>https://haoluobo.com/2012/10/program-language-zen/</link>
		
		<dc:creator><![CDATA[vicalloy]]></dc:creator>
		<pubDate>Thu, 11 Oct 2012 06:31:43 +0000</pubDate>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>
		<guid isPermaLink="false">/?p=10800</guid>

					<description><![CDATA[曾有同事打算将ZOPE和PLONE啃下，我是不建议的。同事说我不够开放，对自己不喜欢的技术都很排斥。我承认，每 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>曾有同事打算将ZOPE和PLONE啃下，我是不建议的。同事说我不够开放，对自己不喜欢的技术都很排斥。我承认，每个人都会有自己的偏好。但我不赞成使用ZOPE恰恰不是因为偏好问题，我也不会因个人偏好而建议采用或不采用某项技术。<br />
在我看来ZOPE是一个很变扭的技术。ZOPE引入了接口/容器等概念，给人感觉ZOPE在很多方面都在有意的模仿JAVA。Python和JAVA在语言哲学方面有着比较大的差异，试图以Java的方式来做一个Python的WEB开发框架无疑是有些别扭的。如果ZOPE真的学的特别象，那我为什么不干脆直接使用Java？<br />
这世界上存在各种编程语言，每种编程语言都有着自己的特点，正是这些差异满足了各类人的不同需求。这些编程语言都有着自己最核心的思想，这个核心思想就是所谓的“哲学”。没有自己“哲学”的编程语言是无法在这个世界上存活的。有些编程语言看上去问题很多，却很流行。或许它的那些问题也正是它流行的原因。</p>
<h4>PHP</h4>
<p>PHP的使用门槛非常的低，而且通常用PHP写出来的东西代码都不是那么的“漂亮”。于是有些人将PHP看成是业余程序员用的东西。然而就是这么一个看似不怎么专业的东西统治了大半个互联网。PHP的“哲学”是“quick and dirty”。在一定程度上beauty和quick并不容易并存。PHP将quick和简单作为第一要求，代码的漂亮退居第二。dirty的代码并不容易维护，所以通常在系统在复杂后，复杂业务逻辑功能将交由其他技术实现。PHP则安心做着自己表现层的事。</p>
<h4>Java</h4>
<p>有人说Java是给笨人用的语言。这话虽然很难听，不过在一定程度上这还真就是Java的哲学。Java充分利用语言特性和IDE等自动化工具来避免程序员犯错，让人海战术成为可能。对于大多Java项目只需要少数的牛人来设计系统构架和主要接口，下面的具体实现用“笨人”来做就可以了。</p>
<h4>Python</h4>
<p>python的哲学是“quick and clean”。在一定程度上说python确实非常clean也很quick。不过python的clean可让也让python变的有些平庸。python号称什么都能做，却又没在哪个领域特别突出。</p>
<h4>Ruby</h4>
<p>Ruby强调人文关怀，编程是一件有乐趣的事，你可以按照自己喜欢的方式去使用ruby。相对而言ruby可能更容易发挥个人的创造性，但在团队协作时则容易遇到麻烦。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>使用嵌入式jetty启动axis提供webservice服务</title>
		<link>https://haoluobo.com/2010/02/%e4%bd%bf%e7%94%a8%e5%b5%8c%e5%85%a5%e5%bc%8fjetty%e5%90%af%e5%8a%a8axis%e6%8f%90%e4%be%9bwebservice%e6%9c%8d%e5%8a%a1/</link>
		
		<dc:creator><![CDATA[vicalloy]]></dc:creator>
		<pubDate>Tue, 02 Feb 2010 06:36:31 +0000</pubDate>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[axis]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[webservice]]></category>
		<guid isPermaLink="false">/?p=10054</guid>

					<description><![CDATA[JDK6已经内置了webservice支持，使用JDK6开发webservice是一件很方便的事。很不幸的是， [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>JDK6已经内置了webservice支持，使用JDK6开发webservice是一件很方便的事。很不幸的是，由于IDE的支持axis成为使用最广的java webservice库。而且由于的部分应用使用了不兼容的RPC/encoded模式，使得你还不得不用axis。</p>
<p>通常情况下用axis开发webservice服务端，需要挂在tomcat等web服务器下，以servlet的方式提供服务。但有些时候我会想将接口部分以一个单独应用程序的方式进行发布，另外再多带个web服务器似乎有些笨拙。</p>
<p>使用嵌入式的jetty是一个比较简单的解决方式。其中需要注意的是，一定要设置Context的ResourceBase，不然是无法找到webservice配置文件的。我当初就是想当然的认为jetty会默认在当前路径下查找配置文件，导致一直无法正确发布服务。</p>
<pre lang="java">protected static void runJetty() throws Exception {
    Server server = new Server();
    SocketConnector connector = new SocketConnector();
    connector.setMaxIdleTime(30000);
    connector.setPort(8000);//jetty的端口
    server.addConnector(connector);
    ServletHolder axisServletholder = new ServletHolder(new AxisServlet());
    ServletHolder axisAdminServletholder = new ServletHolder(new AdminServlet());
    Context root = new Context(server, "/", Context.SESSIONS);
    root.setResourceBase("./web/");//WEB资源目录，./web/WEB-INF/server-config.wsdd
    root.addServlet(axisServletholder, "/servlet/AxisServlet");
    root.addServlet(axisServletholder, "/ws/*");//设置webservice的发布目录
    root.addServlet(axisServletholder, "*.jws");
    root.addServlet(axisAdminServletholder, "/servlet/AdminServlet");
    server.start();
}
</pre>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>JdbcTemplate之BeanPropertyRowMapper</title>
		<link>https://haoluobo.com/2009/12/jdbctemplate%e4%b9%8bbeanpropertyrowmapper/</link>
		
		<dc:creator><![CDATA[vicalloy]]></dc:creator>
		<pubDate>Thu, 10 Dec 2009 14:12:36 +0000</pubDate>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[JdbcTemplate]]></category>
		<category><![CDATA[spring]]></category>
		<guid isPermaLink="false">/index.php/2009/12/jdbctemplate%e4%b9%8bbeanpropertyrowmapper/</guid>

					<description><![CDATA[Spring的JdbcTemplate无疑极大的简化了JDBC操作。只是查询出的数据都直接放在MAP里。想要直 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Spring的JdbcTemplate无疑极大的简化了JDBC操作。只是查询出的数据都直接放在MAP里。想要直接从数据库里直接查询出对象的朋友不免要有些失望。</p>
<p>这写天本想给JdbcTemplate做个扩展，让JdbcTemplate自动绑定对象。等写得差不多的时候，很不幸的发现自己只是重复造轮子而已。Spring已经自带了比较完善的解决方案，通过BeanPropertyRowMapper自动绑定数据库的列到对象。BeanPropertyRowMapper的绑定规则是，FiledName相同的绑定，如果绑定失败，将尝试将hiVik转换成hi_vik查找数据库的列。</p>
<p>如果需要查询出一个包含YouVO对象的List只需要做如下操作就可以了。</p>
<p>List objList = DbHelper.getJdbcTemplate().query(sql, new Object[]{}, new BeanPropertyRowMapper(YouVO.class));</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>java的类ROR框架Play!</title>
		<link>https://haoluobo.com/2009/12/java%e7%9a%84%e7%b1%bbror%e6%a1%86%e6%9e%b6play/</link>
		
		<dc:creator><![CDATA[vicalloy]]></dc:creator>
		<pubDate>Tue, 08 Dec 2009 15:43:20 +0000</pubDate>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[play!]]></category>
		<guid isPermaLink="false">/index.php/2009/12/java%e7%9a%84%e7%b1%bbror%e6%a1%86%e6%9e%b6play/</guid>

					<description><![CDATA[Play!一个类ROR的java框架。和Grails不同的是，Play!没有用Groovy等脚本技术进行扩展。 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="http://www.playframework.org/">Play!</a>一个类ROR的java框架。和<a href="http://www.springsource.com/products/grails">Grails</a>不同的是，Play!没有用<a href="http://groovy.codehaus.org/">Groovy</a>等脚本技术进行扩展。直接使用java技术，这对java程序员来说要亲切很多，而且推广阻力也相应的会小不少。</p>
<p>最近简单的了解Play!，感觉确实是挺有意思的一个东西。Play!作为ROR“仿制品”，在开发思想方面和ROR还是比较接近。Play!本身提供了不少开发相关的辅助命令。使用命令创建出的新工程直接就可以运行了。相比之下，基于ssh的开发，光是脚手架的搭建就得费不少事。</p>
<p>数据模型方面使用JPA定义数据对象，直接从对象生成数据库。这点和django比较像，这也是比较符合我开发习惯的一个做法。</p>
<p>模板方面和Django类似，支持模板的继承。Django模板的继承给我的体验很好。jsp页面虽然可以使用include实现复用，但对于结构相似的页面依旧需要重复的include。<a href="http://www.opensymphony.com/sitemesh/">Sitemesh</a>虽然可以实现类似django模板的功能但看到那繁琐的配置我就撤了。</p>
<p>总的来说Play!给我的印象还是挺不错的，希望在日后的工作中可以用到。</p>
<h3>其他</h3>
<p>Play!的FAQ里有一个解答让我挺印象深刻的。其中有关于为什么使用不符合java规范的play做包名的说明。play!本身就是一个平台，运行在play!上的东西都将是符合play!规范的，所以不必为play这个包名而计较。play!专注于web的敏捷开发，为了适应web敏捷的需要一些无伤大雅的“另类”做法也是未尝不可的。想自己在某些情况下对代码还是有些所谓的“洁癖”。在django开发的时候喜欢在自己的app外面还要另外加一层包，而这种做法在一定程度上是不符合django做法的（django的app名必须唯一，即使上层的包名不同也没用）。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>GoogleCode上的SpringSide2vik项目建好了</title>
		<link>https://haoluobo.com/2008/12/googlecode%e4%b8%8a%e7%9a%84springside2vik%e9%a1%b9%e7%9b%ae%e5%bb%ba%e5%a5%bd%e4%ba%86/</link>
		
		<dc:creator><![CDATA[vicalloy]]></dc:creator>
		<pubDate>Thu, 25 Dec 2008 15:14:58 +0000</pubDate>
				<category><![CDATA[vicalloy的庄家]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[springside]]></category>
		<category><![CDATA[springside2vik]]></category>
		<guid isPermaLink="false">/?p=21</guid>

					<description><![CDATA[本想将代码先整理下，不过似乎也没多少整理的必要。为项目新添加了netbeans的项目配置文件，这样使用netb [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>本想将代码先整理下，不过似乎也没多少整理的必要。为项目新添加了netbeans的项目配置文件，这样使用netbeans的用户也可以方便的打开工程了。另外还做了个简单的视频演示，空间太烂，似乎要花挺久才能下载完。<br />
项目地址：<a href="http://code.google.com/p/springside2vik/" target="_blank" rel="noopener">http://code.google.com/p/springside2vik/</a><br />
视频演示：<a href="http://vik.haoluobo.com/static/springside2vik/springside2vik.htm" target="_blank" rel="noopener">http://vik.haoluobo.com/static/springside2vik/springside2vik.htm</a></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
