﻿<?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-流浪的蜗牛-文章分类-Java Web</title><link>http://www.blogjava.net/vagasnail/category/42605.html</link><description>读历史、看小说、写程序都是我所爱。</description><language>zh-cn</language><lastBuildDate>Fri, 06 Nov 2009 19:36:20 GMT</lastBuildDate><pubDate>Fri, 06 Nov 2009 19:36:20 GMT</pubDate><ttl>60</ttl><item><title>Spring MVC框架（通过Spring showcase示例）</title><link>http://www.blogjava.net/vagasnail/articles/301156.html</link><dc:creator>vagasnail</dc:creator><author>vagasnail</author><pubDate>Wed, 04 Nov 2009 13:18:00 GMT</pubDate><guid>http://www.blogjava.net/vagasnail/articles/301156.html</guid><wfw:comment>http://www.blogjava.net/vagasnail/comments/301156.html</wfw:comment><comments>http://www.blogjava.net/vagasnail/articles/301156.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vagasnail/comments/commentRss/301156.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vagasnail/services/trackbacks/301156.html</trackback:ping><description><![CDATA[
		<p>
				<br />1、 mvc-convention</p>
		<p>The Spring MVC Convention Over Configuration application showcases the<br />new Convention Over Configuration support introduced in Spring 2.0.</p>
		<p>The web application is *very* simplistic, because the intent is<br />to convey the essence（本质） of the convention over configuration support（配置文档协议支</p>
		<p>持）<br />and nothing else.</p>
		<p>   &lt;!-- maps request URLs to Controller names 将请求与Controller类名自动匹配 如hello.do自动</p>
		<p>查找HelloController实例处理<br />     但是必须要遵守命名规范，它是根据请求路径URI中的路径来匹配Controller，最后一个也就是</p>
		<p>文件名，在默认的MethodNameResolver中是<br />     用来匹配Controller的方法，如果没有路径，那么也就根据这个文件名来匹配Controller--&gt;<br />    &lt;bean </p>
		<p>class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/&gt;</p>
		<p>    &lt;bean id="baseRecipeController" abstract="true"&gt;<br />        &lt;property name="recipeManager" ref="recipeManager"/&gt;<br />    &lt;/bean&gt;</p>
		<p>    &lt;!-- Controller names are not important when using the above HandlerMapping </p>
		<p>implementation <br />      简单的继承一个虚拟的类，记住这里的继承不是真正意义上的基础，而是在Spring层次上的继</p>
		<p>承--&gt;<br />    &lt;bean class="org.springframework.showcase.coverc.web.SwitchBoardController"<br />          parent="baseRecipeController"/&gt;</p>
		<p>    &lt;bean class="org.springframework.showcase.coverc.web.EditRecipeController"<br />          parent="baseRecipeController"&gt;<br />        &lt;property name="commandName" value="recipe"/&gt;<br />        &lt;property name="commandClass" </p>
		<p>value="org.springframework.showcase.coverc.domain.Recipe"/&gt;<br />        &lt;property name="formView" value="editRecipe"/&gt;<br />        &lt;property name="successView" value="redirect:switchboard/listRecipes.htm"/&gt;<br />    &lt;/bean&gt;</p>
		<p>    &lt;!-- this bean with the well known name generates view names for us --&gt;<br />    &lt;!-- not strictly required since we just want to accept the defaults--&gt;<br />    &lt;!-- 在Spring2.0中可以不指定View，而由RequestToViewNameTranslator，根据请求来提供View名</p>
		<p>称。如想使用<br />     RequestToViewNameTranslator那么请作如下配置，那么就会根据请求来选择提供View，然后在</p>
		<p>viewResolver中找页面 --&gt;<br />    &lt;bean id="viewNameTranslator" </p>
		<p>class="org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator"/&gt;<br />&lt;!-- View层解析器，根据传回ModelAndView实例名称来选择View页面 --&gt;<br />    &lt;bean id="viewResolver" </p>
		<p>class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt;<br />        &lt;property name="prefix" value="/WEB-INF/jsp/"/&gt;<br />        &lt;property name="suffix" value=".jsp"/&gt;<br />&lt;/bean&gt;</p>
		<p>
				<br />流程说明：在web.xml中配置：<br />    &lt;servlet&gt;<br />        &lt;servlet-name&gt;coverc&lt;/servlet-name&gt;       &lt;servlet-</p>
		<p>class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt;<br /> &lt;/servlet&gt;</p>
		<p>这个前端控制器，来负责将客户的请求转发给控制对象Controller，针对于转发方案，我们使用<br />org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping<br />来映射控制器，将请求与Controller类名自动匹配，如hello.do自动查找HelloController实例处理，但</p>
		<p>是必须要遵守命名规范。<br />如果有映射到的Controller，那么用这个Controller来具体的控制，然后根据在Controller中的</p>
		<p>handleRequest中返回的ModelAndView方法的名称来查找View页面，并且将业务层数据来提交给View页面</p>
		<p>。<br />我们使用org.springframework.web.servlet.view.InternalResourceViewResolver这个viewResolver来</p>
		<p>根据ModelAndView的名称来选择View 页面，我们可以配置        &lt;property name="prefix" </p>
		<p>value="/WEB-INF/jsp/"/&gt;<br /> &lt;property name="suffix" value=".jsp"/&gt;<br />来确定View页面的地点，prefix是文件夹，suffix是文件后缀。<br /> 在Spring2.0中可以不指定View，而由RequestToViewNameTranslator，根据请求来提供View名</p>
		<p>称。如想使用RequestToViewNameTranslator那么请作如下配置：<br />&lt;bean id="viewNameTranslator" </p>
		<p>class="org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator"/&gt;<br />那么就会根据请求来选择提供View，然后在viewResolver中找页面。</p>
		<p>属性编辑器：<br />a) 在BaseCommandController及其子类中的属性编辑器，重写initBinder这个方法中注册：<br />binder.registerCustomEditor(Long.class, new RecipeEditor());<br /> 继承至java.beans.PropertyEditorSupport 将参数转换为指定的对象用setAsText，如果想把</p>
		<p>指定的对象转换成String请用getAsText。<br />b) 还有通过CustomEditorConfigurer这个BeanFactoryPostProcessor来配置PropertyEditor。做如下配</p>
		<p>置：<br />&lt;bean id=”configBean” class=”</p>
		<p>org.springframework.beans.factory.config.CustomEditorConfigurer”&gt;<br />&lt;property name=”customEditors”&gt;<br /> &lt;map&gt;<br />  &lt;entry key=”onlyfun.caterpillar.User”&gt;<br /> &lt;bean id=”userEditor” class=”onlyfun.caterpillar.UserEditor”/&gt;<br />&lt;/entry&gt;<br />&lt;/map&gt;<br />&lt;/property&gt;<br />&lt;/bean&gt;<br />2、 formtags<br />1)、如果WebApp中没有配置Handler Mapping，那么它就会使用默认的Handler Mapping ，也就是</p>
		<p>BeanNameUrlHandlerMapping,它根据Controller定义中的Bean标签中的name属性的URI，来决定使用哪个</p>
		<p>Controller。<br /> 2)、ModelAndView中的addObject 通过这里得到存储在modelObject中的对象的简单的类名在加</p>
		<p>上Conventions提供的suffix（List）就成为添加在ModelMap中的对象了。<br />3)、如果在Spring中没有配置RequestToViewNameTranslator，那么系统会给我们一个默认的</p>
		<p>DefaultRequestToViewTranslator，根据URI请求，或者映射路径产生。如果我们没有指定viewName，那</p>
		<p>么则使用RequestToViewNameTranslator。<br />ViewName付给当前的ModelAndView，然后根据当前ModelAndView取得View对象，有View对象进行数据存</p>
		<p>储，以及根据ViewName进行页面的转发或跳转。<br />4)、可以在下面配置commandName 和 commandClass， 否则使用默认的，也就是根据返回的对象的实际</p>
		<p>的Class信息为commandClass，以默认的“command”为commandName，我们从JSP页面中可以使用这一名</p>
		<p>称读取数据。<br /> &lt;bean name="/form.htm" <br />&lt;property name=”commandName” value=”user”/&gt;<br />&lt;property name=”commandClass” value=”test.User”/&gt;<br />class="org.springframework.showcase.formtags.web.FormController"&gt;<br />&lt;/bean&gt;<br />5)、主要流程<br />DispatcherServlet的doService方法调用doDispatch为处理者处理实际的页面分派任务。<br />通过servlet的HandlerMapping取得实际的Handler，然后委托给一个servlet预装的HandlerAdapter进行</p>
		<p>实际的处理工作，再用这个handlerAdapter取得实际Controller进行实际的操作。<br />首先调用其handlerRequest方法，其实是调用实际的AbstractController的handlerRequest方法，这里</p>
		<p>做了一些session的同步处理，然后调用handleRequestInternal方法进行实际的处理，每种不同的</p>
		<p>Controller实现有该方法有不同的实现：<br />我这里是AbstractFormController，是一种从request中对FormBean能进行自动的组装的Controller，针</p>
		<p>对不同的请求isFormSubmission（POST==true）采用不同的策略，GET请求时调用showNewForm方法显示</p>
		<p>表单页面；<br />如果是POST请求那么则进行request参数的FormBean绑定自动装配，进行处理各种验证处理等，然后调用</p>
		<p>processFormSubmission方法，如果有任何错误或异常都会调用showForm方法返回的form页面，最后调用</p>
		<p>onSubmit进行页面跳转。<br />6)、总结： <br /> 使用Spring的form tag虽然是在使用Spring MVC的最优方案，它能优美的使request的参数与</p>
		<p>model模型对象进行绑定，而不像struts那样需要定义额外的formbean类(当然Struts动态bean也可以避</p>
		<p>免)，所以如果使用Spring MVC务必请使用Spring Form Tag，至于View的逻辑控制请使用JSTL。</p>
		<p> </p>
<img src ="http://www.blogjava.net/vagasnail/aggbug/301156.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vagasnail/" target="_blank">vagasnail</a> 2009-11-04 21:18 <a href="http://www.blogjava.net/vagasnail/articles/301156.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring jpetstore 阅读笔记</title><link>http://www.blogjava.net/vagasnail/articles/301155.html</link><dc:creator>vagasnail</dc:creator><author>vagasnail</author><pubDate>Wed, 04 Nov 2009 13:16:00 GMT</pubDate><guid>http://www.blogjava.net/vagasnail/articles/301155.html</guid><wfw:comment>http://www.blogjava.net/vagasnail/comments/301155.html</wfw:comment><comments>http://www.blogjava.net/vagasnail/articles/301155.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vagasnail/comments/commentRss/301155.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vagasnail/services/trackbacks/301155.html</trackback:ping><description><![CDATA[
		<p>1．org.springframework.beans.support.PagedListHolder<br />PagedListHolder 是一个简单状态的，可以处理对象列表的持有者，它将这些对象分成页面。页号从0开</p>
		<p>始。 <br />这个主要在WEB UI中使用。具有代表的，一个实例将被以列示一列bean，将它们放置到session中，然后</p>
		<p>将它们导出为一个model(模型)。所有的属性将程序化set/get，但是最常用的方式是数据绑定，例如组</p>
		<p>装请求参数中的bean。View层中主要用到getter方法。<br />使用一个属性“sort”，将通过一个SortDifinition实现将基本的list排序。默认，一个</p>
		<p>MutableSortDefinition实例将被使用，使用相同的属性将递增给定的值。<br /> BeanWrapper要求，绑定数据名必须被称作“pageSize”和 “sort.ascending”。 注意，名字</p>
		<p>和嵌套语法匹配各自的JSTL EL表达式，例如“myModelAttr.pageSize”和</p>
		<p>“myModelAttr.sort.ascending”。<br /> 其实，就是用来提供给表现分页用的。</p>
		<p>2.  org.springframework.beans.factory.InitializingBean<br />  这是一个能够被bean实现的接口，如果这个bean需要一旦它所有的属性被注入(还有指定的</p>
		<p>BeanFactoryAware和ApplicationContextAware接口相关的方法都被执行)后就做出反应：例如，执行一</p>
		<p>个自定义的初始化，或者仅仅是检查所有托管的属性是否被正确的注入。可以通过抛出异常阻止继续初</p>
		<p>始化。<br /> 我们也可以选择指定一个自定义的 init-method来代替实现InitializingBean，这个init-</p>
		<p>method通过一个描述bean定义的XML定义。<br /> <br />3. org.springframework.aop. AfterReturningAdvice<br />After returning advice 仅仅在正常的方法返回后调用，而不是在抛出异常时调用。这个通知能够看到</p>
		<p>返回值，但是不能改变它。<br />它唯一的方法为：void afterReturning(Object returnValue, Method method, Object[] args, </p>
		<p>Object target) throws Throwable;<br />  在指定的方法(其实就是JoinPoint)成功返回后被调用。<br />  参数 returnValue： 指定的方法的返回值。<br />  参数 method：被调用的方法。<br />  参数 args：方法的参数。<br />  参数 target：方法期待的目标。可以使null。JoinPoint所在的对象。<br />  @throws ：如果当前对象希望中断调用，则抛出异常。所有方法签名中允许抛出的异</p>
		<p>常将会返回给调用者。否则将会被包装为运行期异常。</p>
		<p>4.  org.springframework.mail.SimpleMailMessage<br />设计一个简单mail 信息，它包括收信人mail、发信人mail、主题和内容。<br /> 考虑JavaMailSender 和 JavaMailMimeMessage 来创建更复杂的信息，例如带有附件的信息，</p>
		<p>特殊符号，或者私人邮件。<br />5.  org.springframework.samples.jpetstore.domain.logic. PetStoreImpl<br /> 这里是该程序的作者对其说明，很有意义。<br /> JPetStore主要业务对象。<br />这个对象使用了5个DAO对象，从具体的操作持久化API工作中解脱出来。因此，虽然这个程序使用 </p>
		<p>iBATIS 做数据访问，但是如果要使用其它的持久化工具来访问，就不需要修改这个类的任何代码。<br />这个对象使用DAO实例是通过Spring容器依赖注入的(使用依赖注入使DAO变成是可配置的)。我们这里使</p>
		<p>用的setter注入，暴露每个DAO的setter方法给用户。这就意味着我们只要在配置该类的bean时，使用“</p>
		<p>property”属性就可以注入DAO。这里的属性是只写的(write-only)：相应的setter方法没有对应的</p>
		<p>getter方法。Getter方法是可选的：只有当你的业务对象需要访问这些属性时，才去暴露getter方法。<br /> 在JPetStore程序中只有一个该类的对象。在Spring术语中，这叫做一个“singleton“(单例)</p>
		<p>对象。这就意味着每个程序上下文都只有一个。工厂创建一个单例对象；在这里没有必要提供一个私有</p>
		<p>的构造器，静态工厂方法等是单例模式的传统实现方式。<br /> 这是一个POJO(普通的Java对象，自我维护自身的状态，处理本身的属性及存取方法外，一般不</p>
		<p>提供任何API)。它不依赖于任何的Spring API。在Spring容器外，仍然可用，而且能够在使用JUnit 测</p>
		<p>试时，初始化该对象。但是，我们仍然使用声明式事务管理，而依赖Spring的AOP。<br /> 这个类给每个方法定义了一个默认的事务属性。<br /> 注意，这个属性定义仅仅在使用Commons Attribute auto-proxying (即使用Common Attribute </p>
		<p>或 Annotation时， Annotation是Spring提供的API，所以依赖了Spring API或Common Attribute API)</p>
		<p>时才是必须使用的。<br />在 war/WEB-INF 目录下的默认applicationContext.xml 文件中的TransactionFactoryProxyBean不需要</p>
		<p>定义attributes。<br />而在接下来使用Commons Attributes attribute 语法来定义的attribute。</p>
		<p>6. org.springframework.orm.ibatis.support.SqlMapClientDaoSupport<br />给iBATIS SqlMapClientDAO提供的方便的父类。需要设置一个SqlMapClient，提供给子类一个基于设入</p>
		<p>的SqlMapClient的SqlMapClinetTemplate。<br />你也可以传递一个已经配置好的SqlMapClientTemplate实例来代替传递一个SqlMapClient(也就是代替默</p>
		<p>认的SqlMapClientTemplate，默认的SqlMapClientTemplate使用了传入的SqlMapClient)。这样就使得你</p>
		<p>所有的DAO的分享同一个SqlMapClientTemplate配置，例如，一个自定义的SQLExceptionTranslator也可</p>
		<p>以使用这个SqlMapClientTemplate。</p>
		<p>7.  org.springframework.orm.ibatis.SqlMapClientTemplate<br /> 一个帮助类，用来简化使用iBATIS com.ibatis.sqlmap.client.SqlMapClient API进行数据访</p>
		<p>问，依照org.springframework.dao 异常模型，将被检查性异常SQLExceptions转换成不受检测异常</p>
		<p>DataAccessExceptions。使用和org.springframework.jdbc.core.JdbcTemplate相同的</p>
		<p>org.springframework.jdbc.support.SQLExceptionTranslator机制。<br /> 这个类的主要方法执行了数据访问行为的回调。此外，该类提供了众多的方法去镜像</p>
		<p>com.ibatis.sqlmap.client.SqlMapExecutor的执行方法。<br /> 这个模版一般都使用了方便而简单的方法去执行 query/insert/update/delete 操作。但是，</p>
		<p>更复杂的操作例如批量更新，就必须自定义一个SqlMapClientCallback，常常都是使用匿名的内部类实</p>
		<p>现。例如：<br />getSqlMapClientTemplate().execute(new SqlMapClientCallback() {<br />   public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException {<br />    executor.startBatch();<br />    executor.update("insertSomething", "myParamValue");<br />    executor.update("insertSomethingElse", "myOtherParamValue");<br />    executor.executeBatch();<br />    return null;<br />   }<br /> });<br /> 这个模版需要一个SqlMapClient来工作，可以通过”sqlMapClient”属性来传递。一个Spring </p>
		<p>上下文都典型地使用一个SqlMapClientFactoryBean去构建SqlMapClient。模版还需要配置一个</p>
		<p>DataSource来取得连接，但是，如果在传入的SqlMapClient中指定了DataSource(典型地，使用</p>
		<p>SqlMapClientFactoryBean的”dataSource”属性)，那么这不是必须的。<br /> 所谓的回调就是指，一个对象通过调用另一个对象的方法来完成既定的行为（也可以说是委托</p>
		<p>给另一个对象来完成），而本对象可以去执行其它的操作。<br />8.  org.springframework.samples.jpetstore.web.struts. BaseAction<br /> JPetStore的Web层的所有Struts Action的父类<br />从ServletContext中获得WebApplicationContext，然后又从WebApplicationContext中获得</p>
		<p>PetStoreFacade，然后通过一个getter方法提供给子类。(或者是继承Spring提供的ActionSupport类，</p>
		<p>它预实现了WebApplicatinContext的查找)但是这里在Struts中插入了Spring的API。所以增加了耦合度</p>
		<p>，该Action类及其子类不能脱离Spring使用,这里并不是最佳实践。<br />比较好的方式是：配置Spring将Action作为Bean托管，使用ContextLoaderPlugin，并在Spring context</p>
		<p>。<br /> * 中设置依赖关系。具体看Spring手册。</p>
		<p>9. org.springframework.util.StringUtils<br />String工具方法的混合类。<br />主要在Spring框架内工作；请参考Jakarta's Commons Lang 来了解更多而全面的String 工具类的信息</p>
		<p>。<br />这个提供了一些处理core Java String 和 StringBuffer的简单功能，例如替换一个目标字符串中所有</p>
		<p>给定的子字符串的功能。它也提供易使用的方法去转换定界字符串，如CSV字符串，和集合以及数组。<br />关于持久层DAO接口的好处（个人想法）<br /> 事实上，在程序中有很多对象依赖了DAO，如果我们直接使用DAO，而不是使用DAO的接口的话，</p>
		<p>那么如果我们改变底层的数据库时（或者是不同的ORM框架），相关的依赖该DAO的对象的类，或者配置</p>
		<p>必须修改。例如，我们使用AOP可配置编程时，我们就必须修改织入的DAO，而如果我们使用DAO接口，我</p>
		<p>们可以直接织入到接口上，那么我们不需要修改任何代码。业务层和持久层也应该通过接口通信。<br /> 同样，DAO接口也获得所有接口必将获得的好处，那么就是耦合度的下降。<br /> 具体来说就是，避免其它API的污染，增加API维护和使用的复杂性；另外就是提供给一个更灵</p>
		<p>活的多态实现，也就是说在我们无法修改源码的情况下，也能改变具体实现，而且我们应该总是避免，</p>
		<p>因为我们常常没有这样的权限，那么就要就API的设计者提供更好的实现（开--闭原理），这里是通过</p>
		<p>XML配置文件的方式。<br /> 但是显然，这里增加了间接性，增加了代码量，似乎增加了复杂性，然而恰恰相反，合理的使</p>
		<p>用接口使得程序的结构更加的清晰。<br /> JPetStore使用了SecureBaseAction 主要是提供了当HttpSession中未包含登陆信息时，跳到登</p>
		<p>陆页面，其实所有扩展了这个类的类的实例，都是需要在安全条件下(用户权限控制)使用的，其实我们</p>
		<p>可以用filter代替。但是这样显然效率更高，但是耦合度也更高了，因为我们不可以配置自己的安全策</p>
		<p>略了。<br /> JPetStore在Struts Web控制代码中使用了大量的Spring API，其实这是不推荐使用的，例如，</p>
		<p>BaseAction中使用了WebApplicationContext；SearchProductsAction使用了</p>
		<p>org.springframework.util.StringUtils，还有使用很频繁的</p>
		<p>org.springframework.beans.support.PagedListHolder。<br /> JPetStore在使用Struts时，大量使用了HttpSession，好的建议是尽量少使用HttpSession，所</p>
		<p>以这里也不是好的实践，例如，将所有的页面都找出来，但是是缓存在HttpSession中，虽然提高了客户</p>
		<p>端的用户感受，但是会给服务器以沉重的负担。<br /> JPetStore中将ActionForm做了两种作用，一种主要是用于数据的提交(Form中用)，一般以</p>
		<p>working开头，一种主要用于处理过后的数据的显示和数据的保存。因为都是存储在HttpSession中，为</p>
		<p>了区分采用了不同的名字，而working FormBean的生命周期是在提交了数据后结束，因此在这时，我们</p>
		<p>应该将内存空间收回。<br /></p>
<img src ="http://www.blogjava.net/vagasnail/aggbug/301155.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vagasnail/" target="_blank">vagasnail</a> 2009-11-04 21:16 <a href="http://www.blogjava.net/vagasnail/articles/301155.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>petclinic阅读笔记</title><link>http://www.blogjava.net/vagasnail/articles/301154.html</link><dc:creator>vagasnail</dc:creator><author>vagasnail</author><pubDate>Wed, 04 Nov 2009 13:15:00 GMT</pubDate><guid>http://www.blogjava.net/vagasnail/articles/301154.html</guid><wfw:comment>http://www.blogjava.net/vagasnail/comments/301154.html</wfw:comment><comments>http://www.blogjava.net/vagasnail/articles/301154.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vagasnail/comments/commentRss/301154.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vagasnail/services/trackbacks/301154.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1														、														Web 														程序的设计原则：																																																								The following items should be noted regarding th...&nbsp;&nbsp;<a href='http://www.blogjava.net/vagasnail/articles/301154.html'>阅读全文</a><img src ="http://www.blogjava.net/vagasnail/aggbug/301154.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vagasnail/" target="_blank">vagasnail</a> 2009-11-04 21:15 <a href="http://www.blogjava.net/vagasnail/articles/301154.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>