??xml version="1.0" encoding="utf-8" standalone="yes"?>久久精品国产亚洲av麻,亚洲国产成人久久一区久久,亚洲欧美熟妇综合久久久久http://www.tkk7.com/wshsdlau/category/51797.html如何学好j(lu)avaQ其实很单,只要用心(j)体会(x)Q慢慢积累!zh-cnThu, 29 Nov 2012 01:49:44 GMTThu, 29 Nov 2012 01:49:44 GMT60struts2学习(fn)http://www.tkk7.com/wshsdlau/archive/2011/11/28/379145.html哈希哈希Mon, 28 Nov 2011 07:09:00 GMThttp://www.tkk7.com/wshsdlau/archive/2011/11/28/379145.htmlhttp://www.tkk7.com/wshsdlau/comments/379145.htmlhttp://www.tkk7.com/wshsdlau/archive/2011/11/28/379145.html#Feedback0http://www.tkk7.com/wshsdlau/comments/commentRss/379145.htmlhttp://www.tkk7.com/wshsdlau/services/trackbacks/379145.htmlhttp://code.google.com/p/j2eewiki/wiki/Struts2Hello

哈希 2011-11-28 15:09 发表评论
]]>
mldn's sshhttp://www.tkk7.com/wshsdlau/archive/2011/06/11/379152.html哈希哈希Sat, 11 Jun 2011 07:35:00 GMThttp://www.tkk7.com/wshsdlau/archive/2011/06/11/379152.htmlhttp://www.tkk7.com/wshsdlau/comments/379152.htmlhttp://www.tkk7.com/wshsdlau/archive/2011/06/11/379152.html#Feedback0http://www.tkk7.com/wshsdlau/comments/commentRss/379152.htmlhttp://www.tkk7.com/wshsdlau/services/trackbacks/379152.html<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.c...  阅读全文

哈希 2011-06-11 15:35 发表评论
]]>
MVC三层模型(struts+spring+hibernate)ȝhttp://www.tkk7.com/wshsdlau/archive/2011/05/20/379155.html哈希哈希Fri, 20 May 2011 09:00:00 GMThttp://www.tkk7.com/wshsdlau/archive/2011/05/20/379155.htmlhttp://www.tkk7.com/wshsdlau/comments/379155.htmlhttp://www.tkk7.com/wshsdlau/archive/2011/05/20/379155.html#Feedback0http://www.tkk7.com/wshsdlau/comments/commentRss/379155.htmlhttp://www.tkk7.com/wshsdlau/services/trackbacks/379155.html

单的_(d)(x)

struts 控制用的

hibernate 操作数据库的

spring 用解耦的

详细的说Q?/span>

STRUTS ?SSH 框架中v控制的作?, 其核?j)?Controller, ?ActionServlet, ?ActionServlet 的核?j)就?Struts-confi g.xml. 主要控制逻辑关系的处?.

hibernate 是数据持久化?, 是一U新的对象、关pȝ映射工具 , 提供?jin)?Java cd数据表的映射Q也提供?jin)数据查询和恢复{机?, 大大减少数据讉K的复杂度。把Ҏ(gu)据库的直接操?, 转换为对持久对象的操?.

SPRING 是一个轻量的控制反?(IoC) 和面向切?(AOP) 的容器框?, 面向接口的编E?, 由容器控制程序之间的Q依赖)(j)关系Q而非传统实现中,q序代码直接操控。这也就是所?“ 控制反{ ” 的概忉|在:(x)Q依赖)(j)控制权由应用代码中{C(jin)外部容器Q控制权的{U,是所谓反转。依赖注入,即组件之间的依赖关系由容器在q行期决定,形象的来_(d)即由容器动态的某U依赖关pL入到lg之中

起到的主要作用是解?/span>

Struts ?spring ?Hibernate 在各层的作用

1 Q?struts 负责 web ?.

ActionFormBean 接收|页中表单提交的数据Q然后通过 Action q行处理Q再 Forward 到对应的|页?/span>

?struts-config.xml 中定?<action-mapping>, ActionServlet ?x)加载?/span>

2 Q?spring 负责业务层管理,?Service Q或 Manager).

1 Q?service ?action 提供l计的调用接口,装持久层的 DAO.

2 Q可以写一些自q业务Ҏ(gu)?/span>

3 Q统一?javabean 理Ҏ(gu)

4 Q声明式事务理Q?a >http://www.cnblogs.com/rushoooooo/archive/2011/08/28/2155960.htmlQ?/span>

5. 集成 Hiberante

3 Q?Hiberante Q负责持久化层,完成数据库的 crud 操作

hibernate 为持久层Q提?OR/Mapping ?/span>

它有一l?.hbm.xml 文g?POJO, 是跟数据库中的表相对应的。然后定?DAO Q这些是跟数据库打交道的c,它们?x)?PO ?/span>

?struts+spring+hibernate 的系l中Q?/span>

对象的调用流E是Q?jsp-> Action Q?> Service ->DAO ->Hibernate ?/span>

数据的流向是 ActionFormBean 接受用户的数据, Action 数据从 ActionFromBean 中取出,装?VO ?PO,

再调用业务层?Bean c,完成各种业务处理后再 forward 。而业务层 Bean 收到q个 PO 对象之后Q会(x)调用 DAO 接口Ҏ(gu)Q进行持久化操作?/span>

 

 

 

spring:Aop理事务控制,IoC理各个lg的耦合,DaoTemplate作ؓ(f)常规持久层的快速开发模?

struts:控制层Action,面标签和Model数据,调用业务?

Hibernate:负责数据库和对象的映?负责DAO?Data Access Object:数据讉K)

 

spring整合hibernate和strutsQ只要在配好?jin)applicationContext.xml,在struts的action中直接调用就可以?jin)。hibernate讉K数据库的操作都在spring中实C(jin)Qspring的调用又在stuts的action中实C(jin)。这个ssh框架pC(jin)一?#8230;…

 

 

1 SSH在开发中的位|?/span>

现在J2EE的开源框架多的数不清楚,目前Q已l、正在)(j)比较行的常用框架大概有struts,spring,hibernate,jsf,webworkQ?struts+spring+hibernate(SSH)q种轻量U架构被誉ؓ(f)“黄金l合”。spring和hibernate更是被许多h认ؓ(f)是未来五q内不会(x)被淘汰的技术,犹如当年的strutsQ今天的开发中依然被广泛采用?/span>

2 Z么用SSH  

其实Q就用Java建造一个不是很?ch)琐的web应用Q也不是件轻杄事情?在构架的一开始就有很多事情要考虑。从高处看,摆在开发者面前有很多问题Q要考虑是怎样建立用户接口Q在哪里处理业务逻辑Q?怎样持久化的数据?而这三层构架中,每一层都有他们要仔细考虑的?各个层该使用什么技术?怎样的设计能松散耦合q能灉|改变Q?怎样替换某个层而不影响整体构架Q应用程序如何做各种U别的业务处理(比如事务处理Q?

    构架一个Web应用需要弄明白好多问题?q运的是Q已l有不少开发者已l遇到过q类问题Qƈ且徏立了(jin)处理q类问题的框架?一个好框架具备以下几点Q减d发者处理复杂的问题的负担("不重复发明轮?Q;内部有良好的扩展Q?q且有一个支持它的强大的用户团体?好的构架一般有针对性的处理某一c问题,q且能将它做好(Do One Thing wellQ?然而,你的E序中有几个层可能需要用特定的框架Q已l完成的UI(用户接口) q不代表你也可以把你的业务逻辑和持久逻辑偶合C的UI部分?举个例子Q你不该在一个Controller(控制?里面写JDBC代码作ؓ(f)你的业务逻辑Q?q不是控制器应该提供的?一个UI 控制器应该委z其它l在UI范围之外的轻量lg?好的框架应该能指g码如何分布?更重要的是,框架能把开发者从~码中解攑և来,使他们能专心(j)于应用程序的逻辑Q这对客h说很重要Q?nbsp;

他们里面有很我优U的设计理念及(qing)模式应用。比如, struts属于MVC框架Q关键是要了(jin)解MVC的概念及(qing)大致原理Q掌握就很容易了(jin)Q而hibernate属于ormpȝQ属于持久层的解x案,同样需要对ORM的概念及(qing)原理有一个M的了(jin)解,必要时可以去查查EJB1?qing)EJB2里面用于持久层的Entity Bean的用。而spring属于应用E序框架Q其核心(j)是IOC容器以及(qing)AOPQ把q两个核?j)概?也可UCؓ(f)大模??jin)解以后Q再加上一定的内力修ؓ(f)Q其它就都不难了(jin)。Spring中还集成?jin)很多适用东西(不过q些东西80%的在某一个项目中可能一直用不上)Q比如对JDBC的封装、自qMVC、对动态语a的简z访问等Q这些你Ҏ(gu)自己的项目情冉|选择学习(fn)Q用到的时候再看看他的文档Q一个项目下来应该就能把握?

3 对于SSH的理?/span>

在SSH框架中,struts用来解决MVC中显C、请求控刉分,spring主要负责讉K数据库DAOcȝ事务控制以及(qing)它被人称誉的IOC思想在业务类中的恰当q用Qhibernate主要是充当数据访问层lg。由于spring对hibernate的良好支持,在DAOcM要由spring来完成,hibernate更多x的应是O/R影射文g上的配置Q如U联关系Qgq加载等如何讄才能使效率更高。见? Q框架组合示意图Q?/span>

4 收获和问?

4.1 actionform,PO,VO三对象的q用

讨论最多的是actionform,PO,VO三对象的q用Q本人們֐的观Ҏ(gu)Q在SSH框架中,PO和VO可以不必区分Q即业务层和持久层都可以使用hibernate产生的PO对象Q我暂时把对象分成actionform和po两种来分析,action 应该是actionform和po的分界点Qpo不能IK业务层Q突破action到达面昄层,同样actionform也不能突破action传到后台业务、持久层。(原因Qpo是持久对象,到达面后就q?jin)session成ؓ(f)无状态(暂理解ؓ(f)q态)(j)的对象,而hibernate的持久对象是有状态(包含数据库主键)(j)的,无状态的对象传到后台在调用hibernate的保存方法时?x)出错,一定要把无状态的对象先{化成持久态对象才能保存)(j)在action中应该对两对象进行{化,转化的方法目前我q没发现有什么非常好的方法(Ƣ迎高手不惜赐教Q,最普通的是用getQ)(j)QsetQ)(j)Ҏ(gu)Q也可以使用struts提供的属性复制方法BeanUtilsc,但这个好象只支持单个cȝ转化Q对于集合对象不行,需要我们自己扩展?/span>

4.2 spring事务理

在配|spring的事务管理中Q最好把事务控制配置在业务类上,而不要配|在DAOc(需要保证多个原子事务操作同时失败回滚时q是一U解军_法)(j)Q?/span>

4.3 action如何获取业务c?/span>

action中如何获取业务类Q写一个父cactionQ在父类中通过spring的webapplicationcontent获得业务cȝ实例。struts中的具体actionl承该父c,通过调用父类的getServiceQ)(j)直接获得业务cȝ实例?/span>

4.4 理解AOP思想

深入理解AOP思想Q我暂时感觉到的是量面向接口~程Q不是域对象还是业务类或者是DAOc都设计出接口,在各Ҏ(gu)中我们尽量传入对象的接口Q这Ҏ(gu)们重用这些方法,扩展是很有好处的?/span>

4.5 分页处理 level

5 pȝ包划?/span>



哈希 2011-05-20 17:00 发表评论
]]>
Eclipse快速上手Hibernate之入门实?/title><link>http://www.tkk7.com/wshsdlau/archive/2011/05/20/379156.html</link><dc:creator>哈希</dc:creator><author>哈希</author><pubDate>Fri, 20 May 2011 07:30:00 GMT</pubDate><guid>http://www.tkk7.com/wshsdlau/archive/2011/05/20/379156.html</guid><wfw:comment>http://www.tkk7.com/wshsdlau/comments/379156.html</wfw:comment><comments>http://www.tkk7.com/wshsdlau/archive/2011/05/20/379156.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/wshsdlau/comments/commentRss/379156.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/wshsdlau/services/trackbacks/379156.html</trackback:ping><description><![CDATA[     摘要: Eclipse快速上手Hibernate--1. 入门实例 < language="javascript" type="text/javascript">document.title="Eclipse快速上手Hibernate--1. 入门实例 - "+document.title     q篇文章主要谈谈Hibernate的入门开发,例子很简单,是...  <a href='http://www.tkk7.com/wshsdlau/archive/2011/05/20/379156.html'>阅读全文</a><img src ="http://www.tkk7.com/wshsdlau/aggbug/379156.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wshsdlau/" target="_blank">哈希</a> 2011-05-20 15:30 <a href="http://www.tkk7.com/wshsdlau/archive/2011/05/20/379156.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>springMVChttp://www.tkk7.com/wshsdlau/archive/2011/05/17/379157.html哈希哈希Tue, 17 May 2011 14:23:00 GMThttp://www.tkk7.com/wshsdlau/archive/2011/05/17/379157.htmlhttp://www.tkk7.com/wshsdlau/comments/379157.htmlhttp://www.tkk7.com/wshsdlau/archive/2011/05/17/379157.html#Feedback0http://www.tkk7.com/wshsdlau/comments/commentRss/379157.htmlhttp://www.tkk7.com/wshsdlau/services/trackbacks/379157.html阅读全文

哈希 2011-05-17 22:23 发表评论
]]>
Hibernate~存分类http://www.tkk7.com/wshsdlau/archive/2011/05/10/379159.html哈希哈希Tue, 10 May 2011 10:03:00 GMThttp://www.tkk7.com/wshsdlau/archive/2011/05/10/379159.htmlhttp://www.tkk7.com/wshsdlau/comments/379159.htmlhttp://www.tkk7.com/wshsdlau/archive/2011/05/10/379159.html#Feedback0http://www.tkk7.com/wshsdlau/comments/commentRss/379159.htmlhttp://www.tkk7.com/wshsdlau/services/trackbacks/379159.html~存是位于应用程序与物理数据源之_(d)用于临时存放复制数据的内存区域,目的是ؓ(f)?jin)减应用程序对物理数据源访问的ơ数Q从而提高应用程序的q行性能.
  Hibernate在查询数据时Q首先到~存中去查找Q如果找到就直接使用Q找不到的时候就?x)从物理数据源中(g)索,所以,把频J用的数据加蝲到缓存区后,可以大大减应用程序对物理数据源的讉KQ得程序的q行性能明显的提?
 
Hibernate~存分类Q?/span>

Session~存Q一U缓?

SessionFactory的缓存分为内|缓存和外置~存.内置~存中存攄是SessionFactory对象的一些集合属性包含的数据(映射元素? ?qing)预定义SQL语句{?,对于应用E序来说,它是只读?外置~存中存攄是数据库数据的副?其作用和一U缓存类?二~存除了(jin)以内存作为存储介? ?q可以选用盘{外部存储设?

Hibernate的缓存范?/span>

Hibernate的一U缓存和二~存都位于均位于持久?且均用于存放数据库数据的副本,最大的区别是~存的范围各不一?

~存的范围分?c?

1.事务范围
   事务范围的缓存只能被当前事务讉K,每个事务都有各自的缓?~存内的数据通常采用怺兌的对象Ş?~存的生命周期依赖于事务的生命周?只有当事务结束时,~存的生命周期才?x)结?事务范围的缓存用内存作为存储介?一U缓存就属于事务范围.
2.应用范围
   应用E序的缓存可以被应用范围内的所有事务共享访?~存的生命周期依赖于应用的生命周?只有当应用结束时,~存的生命周期才?x)结?应用范围的缓存可以用内存或盘作ؓ(f)存储介质,二~存属于应用范?
3.集群范围
   在集环境中,~存被一个机器或多个机器的进E共?~存中的数据被复制到集群环境中的每个q程节点,q程间通过q程通信来保证缓存中的数据的一?~存中的数据通常采用对象的松散数据Ş?

  Hibernate的缓存管?/span>

一U缓存的理:

  evit(Object obj)  指定的持久化对象从一U缓存中清除,释放对象所占用的内存资?指定对象从持久化状态变状?从而成为游d?
  clear()  一U缓存中的所有持久化对象清除,释放其占用的内存资源
  contains(Object obj) 判断指定的对象是否存在于一U缓存中.
  flush() h一U缓存区的内?使之与数据库数据保持同步.

  二~存的管?
  
   evict(Class arg0, Serializable arg1)  某个类的指定ID的持久化对象从二U缓存中清除,释放对象所占用的资?
  
Java代码  收藏代码
  1. sessionFactory.evict(Customer.class, new Integer(1));  

   evict(Class arg0)  指定类的所有持久化对象从二U缓存中清除,释放其占用的内存资源.
  
Java代码  收藏代码
  1. sessionFactory.evict(Customer.class);  

   evictCollection(String arg0)  指定类的所有持久化对象的指定集合从二~存中清?释放其占用的内存资源.
  
Java代码  收藏代码
  1. sessionFactory.evictCollection("Customer.orders");  


Hibernate的二U缓存的配置

首先,不是所有的数据都适合攑֜二~存?看一?什么样的数据适合攑֜二~存中来?什么样的数据不适合攑֜二~存中来?
  下面q几U情况就不适合加蝲CU缓存中:
  1.l常被修改的数据
  2.l对不允许出现ƈ发访问的数据
  3.与其他应用共享的数据
  下面q己U情?span style="color: red">合?/span>加蝲CU缓存中:
  1.数据更新频率?
  2.允许偶尔出现q发问题的非重要数据
  3.不会(x)被ƈ发访问的数据
  4.帔R数据
  5.不会(x)被第三方修改的数?

Hibernate的二U缓存功能是靠配|二U缓存插件来实现?HibernateZ(jin)集成q些插g,Hibernate提供?jin)org.hibernate.cache.CacheProvider借口,它充当缓存插件与Hibernate之间的适配?.

常用的二U缓存插?
EHCache  org.hibernate.cache.EhCacheProvider
OSCache  org.hibernate.cache.OSCacheProvider
SwarmCahe  org.hibernate.cache.SwarmCacheProvider
JBossCache  org.hibernate.cache.TreeCacheProvider

单介l一下EHCache的配|?
hibernate.cfg.xml
Xml代码  收藏代码
  1. <hibernate-configuration>  
  2.    <session-factory>  
  3.       <!-- 讄二~存插gEHCache的Providerc?->  
  4.       <property name="hibernate.cache.provider_class">  
  5.          org.hibernate.cache.EhCacheProvider  
  6.       </property>  
  7.       <!-- 启动"查询~存" -->  
  8.       <property name="hibernate.cache.use_query_cache">  
  9.          true  
  10.       </property>  
  11.    </session-factory>  
  12.  </hibernate-configuration>  


ehcache.xml

Xml代码  收藏代码
  1. <ehcache>  
  2.   <!-- maxElementsInMemory为缓存对象的最大数? eternal讄是否永远不过?timeToIdleSeconds对象处于I闲状态的最多秒?timeToLiveSeconds对象处于~存状态的最多秒?nbsp;-->  
  3.   <diskStore path="java.io.tmpdir"/>  
  4.     <defaultCache maxElementsInMemory="10000" eternal="false"  timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="true"/>  
  5. </ehcache>  


****.hbm.xml

Xml代码  收藏代码
  1. <?xml version="1.0" encoding='UTF-8'?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC  
  3.                             "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.                             "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >  
  5.   
  6. <hibernate-mapping>  
  7.        
  8.    <class>  
  9.        <!-- 讄该持久化cȝ二~存q发讉K{略 read-only read-write nonstrict-read-write transactional-->  
  10.        <cache usage="read-write"/>      
  11.    </class>  
  12.   
  13. </hibernate-mapping>  


最q用上了(jin),看看?有什么不妥的地方,多谢指出.

哈希 2011-05-10 18:03 发表评论
]]>
spring中aop和Ioc的理?/title><link>http://www.tkk7.com/wshsdlau/archive/2011/05/10/379160.html</link><dc:creator>哈希</dc:creator><author>哈希</author><pubDate>Tue, 10 May 2011 09:49:00 GMT</pubDate><guid>http://www.tkk7.com/wshsdlau/archive/2011/05/10/379160.html</guid><wfw:comment>http://www.tkk7.com/wshsdlau/comments/379160.html</wfw:comment><comments>http://www.tkk7.com/wshsdlau/archive/2011/05/10/379160.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/wshsdlau/comments/commentRss/379160.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/wshsdlau/services/trackbacks/379160.html</trackback:ping><description><![CDATA[<span style="color: red">1.关于spring ioc </span> <br /> <br /> q段旉也着实好好的看了(jin)下spring的相关书c,对其也有?jin)大概和初步的认识和理解Q虽然之前也一直听说spring是一个非怼U的开? 框架Q可一直没有机?x)学习(fn)和使用Q是不是有点落伍?jin)?呵呵Q,所以呢Q这D|间就重点学习(fn)?jin)springQ一个星期的旉当然是入门的啦~~Q? <br /> <br /> 大家一直都说spring的IOC如何如何的强大,其实我倒觉得不是IOC如何的强大,说白?jin)IOC其实也非常的单。我们先从IOC说vQ? q个概念其实是从我们q_new一个对象的对立面来说的Q我们^怋用对象的时候,一般都是直接用关键字cnew一个对象,那这h什么坏处呢Q其实很 昄的,使用new那么pC当前模块已l不知不觉的和new的对象耦合?jin),而我们通常都是更高层次的抽象模块调用底层的实现模块Q这样也׃生了(jin)模块? 赖于具体的实玎ͼq样与我们JAVA中提倡的面向接口面向抽象~程是相冲突的,而且q样做也带来pȝ的模块架构问题。很单的例子Q我们在q行数据库操? 的时候,L业务层调用DAO层,当然我们的DAO一般都是会(x)采用接口开发,q在一定程度上满?jin)松耦合Q业务逻辑层不依赖于具体的数据库DAO层。但 是我们在使用的时候还是会(x)new一个特定数据库的DAO层,q无形中也与特定的数据库l定?jin),虽然我们可以使用抽象工厂模式来获取DAO实现c,但除非我 们一ơ性把所有数据库的DAO写出来,否则在进行数据库q移的时候我们还是得修改DAO工厂cR? <br /> <br /> 那我们用IOC能达C么呢QIOCQ就是DAO接口的实C再是业务逻辑层调用工厂类去获取,而是通过容器Q比如springQ来自动? 为我们的业务层设|DAO的实现类。这h个过E就反过来,以前是我们业务层d去获取DAOQ而现在是DAOd被设|到业务逻辑层中来了(jin)Q这也就是反 转控制的由来。通过IOCQ我们就可以在不修改M代码的情况下Q无~的实现数据库的换库q移Q当然前提还是必d写一个实现特定数据库的DAO。我们把 DAO普遍到更多的情况下,那么IOC׃ؓ(f)我们带来更大的方便性,比如一个接口的多个实现Q我们只需要配|一下就ok?jin),而不需要再一个个的写工厂来来? 取了(jin)。这是IOC为我们带来的模块的松耦合和应用的便利性? <br /> <br /> 那ؓ(f)什么说IOC很简单呢Q说白了(jin)其实是由我们^常的new转成?jin)用反来获取cȝ实例Q相信Q何h只要?x)用java的反机Ӟ那么自己写一个IOC框架也不是不可能的。比如:(x) <br /> <br /> …… <br /> public ObjectgetInstance(String className) throws Exception <br /> { <br /> Object obj = Class.forName(className).newInstance(); <br /> Method[] methods = obj.getClass().getMethods(); <br /> for (Method method : methods) { <br /> if (method.getName().intern() == "setString") { <br /> method.invoke(obj, "hello world!"); <br /> } <br /> } <br /> } <br /> …… <br /> <br /> 上面的一个方法我们就很简单的使用?jin)反?f)指定的类的setStringҎ(gu)来设|一个hello world!字符丌Ӏ其实可以看到IOC真的很简单,当然?jin)IOC单ƈ不表Cspring的IOCq单,spring的IOC的功能强大就在于有一p? 列非常强大的配置文gl护c,它们可以l护spring配置文g中的各个cȝ关系Q这才是spring的IOC真正强大的地斏V在spring的Bean 定义文g中,不仅可以为定义Bean讄属性,q支持Bean之间的ѝBean的抽象和不同的获取方式等{功能? <br /> <br /> 下次俺再把spring的Bean配置的相兛_(j)得和大家一起分享下Q如果说的不好,大家可以提意见哦Q可千万不要仍臭鸡蛋Q嘿嘿~~~~ <br /> <br /> <br /> <span style="color: red">2.关于spring aop</span> <br /> <br /> 反射实现 AOP 动态代理模?Spring AOP 的实?原理) <br /> 好长旉没有用过Spring? H然拿v?我都发现自己对AOP都不熟?zhn)? <br /> 其实AOP的意思就是面向切面编E? <br /> OO注重的是我们解决问题的方?装成Method),而AOP注重的是许多解决解决问题的方法中的共同点,是对OO思想的一U补? <br /> q是拿h家经怋D的一个例子讲解一下吧: <br /> 比如?我们现在要开发的一个应用里面有很多的业务方?但是,我们现在要对q个Ҏ(gu)的执行做全面监控,或部分监?也许我们׃(x)在要一些方法前d上一条日志记? <br /> 我们写个例子看看我们最单的解决Ҏ(gu) <br /> 我们先写一个接口IHello.java代码如下: <br /> 1package sinosoft.dj.aop.staticaop; <br /> 2 <br /> 3public interface IHello { <br /> 4    /** *//** <br /> 5     * 假设q是一个业务方? <br /> 6     * @param name <br /> 7     */ <br /> 8    void sayHello(String name); <br /> 9} <br /> 10 <br /> 里面有个Ҏ(gu),用于输入"Hello" 加传q来的姓?我们d个类实现IHello接口 <br /> package sinosoft.dj.aop.staticaop; <br /> <br /> public class Hello implements IHello { <br /> <br />     public void sayHello(String name) { <br />         System.out.println("Hello " + name); <br />     } <br /> <br /> } <br /> <br /> 现在我们要ؓ(f)q个业务Ҏ(gu)加上日志记录的业?我们在不改变原代码的情况?我们?x)去怎么做呢?也许,你会(x)d一个类d现IHello接口,q依赖Helloq个c?代码如下: <br /> 1package sinosoft.dj.aop.staticaop; <br /> 2 <br /> 3public class HelloProxy implements IHello { <br /> 4    private IHello hello; <br /> 5 <br /> 6    public HelloProxy(IHello hello) { <br /> 7        this.hello = hello; <br /> 8    } <br /> 9 <br /> 10    public void sayHello(String name) { <br /> 11        Logger.logging(Level.DEBUGE, "sayHello method start."); <br /> 12        hello.sayHello(name); <br /> 13        Logger.logging(Level.INFO, "sayHello method end!"); <br /> 14 <br /> 15    } <br /> 16 <br /> 17} <br /> 18 <br /> 其中.LoggercdLevel枚D代码如下: <br /> Logger.java <br /> 1package sinosoft.dj.aop.staticaop; <br /> 2 <br /> 3import java.util.Date; <br /> 4 <br /> 5public class Logger{ <br /> 6    /** *//** <br /> 7     * Ҏ(gu){记录日志 <br /> 8     * @param level <br /> 9     * @param context <br /> 10     */ <br /> 11    public static void logging(Level level, String context) { <br /> 12        if (level.equals(Level.INFO)) { <br /> 13            System.out.println(new Date().toLocaleString() + " " + context); <br /> 14        } <br /> 15        if (level.equals(Level.DEBUGE)) { <br /> 16            System.err.println(new Date() + " " + context); <br /> 17        } <br /> 18    } <br /> 19 <br /> 20} <br /> 21Level.java <br /> <br /> 1package sinosoft.dj.aop.staticaop; <br /> 2 <br /> 3public enum Level { <br /> 4    INFO,DEBUGE; <br /> 5} <br /> 6那我们去写个试cȝ?代码如下: <br /> Test.java <br /> 1package sinosoft.dj.aop.staticaop; <br /> 2 <br /> 3public class Test { <br /> 4    public static void main(String[] args) { <br /> 5        IHello hello = new HelloProxy(new Hello()); <br /> 6        hello.sayHello("Doublej"); <br /> 7    } <br /> 8} <br /> 9q行以上代码我们可以得到下面l果: <br /> <br /> Tue Mar 04 20:57:12 CST 2008 sayHello method start. <br /> Hello Doublej <br /> 2008-3-4 20:57:12 sayHello method end! <br /> 从上面的代码我们可以看出,hello对象是被HelloProxyq个所谓的代理态所创徏?q样,如果我们以后要把日志记录的功能去?那我们只要把得到hello对象的代码改成以? <br /> 1package sinosoft.dj.aop.staticaop; <br /> 2 <br /> 3public class Test { <br /> 4    public static void main(String[] args) { <br /> 5        IHello hello = new Hello(); <br /> 6        hello.sayHello("Doublej"); <br /> 7    } <br /> 8} <br /> 9 <br /> 上面代码,可以说是AOP最单的实现! <br /> 但是我们?x)发C个问?如果我们像Helloq样的类很多,那么,我们是不是要d很多个HelloProxyq样的类?没错,是的.其实? 是一U很ȝ(ch)的事.在jdk1.3以后.jdk跟我们提供了(jin)一个API   java.lang.reflect.InvocationHandler的类. q个cd以让我们在JVM调用某个cȝҎ(gu)时动态的ZҎ(gu)做些什么事.让我们把以上的代码改一下来看看效果. <br /> 同样,我们写一个IHello的接口和一个Hello的实现类.在接口中.我们定义两个Ҏ(gu);代码如下 : <br /> <br /> IHello.java <br /> 1package sinosoft.dj.aop.proxyaop; <br /> 2 <br /> 3public interface IHello { <br /> 4    /** *//** <br /> 5     * 业务处理AҎ(gu) <br /> 6     * @param name <br /> 7     */ <br /> 8    void sayHello(String name); <br /> 9    /** *//** <br /> 10     * 业务处理BҎ(gu) <br /> 11     * @param name <br /> 12     */ <br /> 13    void sayGoogBye(String name); <br /> 14} <br /> 15 <br /> <br /> Hello.java <br /> <br /> 1package sinosoft.dj.aop.proxyaop; <br /> 2 <br /> 3public class Hello implements IHello { <br /> 4 <br /> 5    public void sayHello(String name) { <br /> 6        System.out.println("Hello " + name); <br /> 7    } <br /> 8    public void sayGoogBye(String name) { <br /> 9        System.out.println(name+" GoodBye!"); <br /> 10    } <br /> 11} <br /> 12 <br /> 我们一L(fng)d一个代理类.只不q?让这个类d现java.lang.reflect.InvocationHandler接口,代码如下: <br /> 1package sinosoft.dj.aop.proxyaop; <br /> 2 <br /> 3import java.lang.reflect.InvocationHandler; <br /> 4import java.lang.reflect.Method; <br /> 5import java.lang.reflect.Proxy; <br /> 6 <br /> 7public class DynaProxyHello implements InvocationHandler { <br /> 8 <br /> 9    /** *//** <br /> 10     * 要处理的对象(也就是我们要在方法的前后加上业务逻辑的对?如例子中的Hello) <br /> 11     */ <br /> 12    private Object delegate; <br /> 13 <br /> 14    /** *//** <br /> 15     * 动态生成方法被处理q后的对?(写法固定) <br /> 16     * <br /> 17     * @param delegate <br /> 18     * @param proxy <br /> 19     * @return <br /> 20     */ <br /> 21    public Object bind(Object delegate) { <br /> 22        this.delegate = delegate; <br /> 23        return Proxy.newProxyInstance( <br /> 24                this.delegate.getClass().getClassLoader(), this.delegate <br /> 25                        .getClass().getInterfaces(), this); <br /> 26    } <br /> 27    /** *//** <br /> 28     * 要处理的对象中的每个Ҏ(gu)?x)被此方法送去JVM调用,也就是说,要处理的对象的方法只能通过此方法调? <br /> 29     * 此方法是动态的,不是手动调用? <br /> 30     */ <br /> 31    public Object invoke(Object proxy, Method method, Object[] args) <br /> 32            throws Throwable { <br /> 33        Object result = null; <br /> 34        try { <br /> 35            //执行原来的方法之前记录日? <br /> 36            Logger.logging(Level.DEBUGE, method.getName() + " Method end ."); <br /> 37            <br /> 38            //JVM通过q条语句执行原来的方?反射机制) <br /> 39            result = method.invoke(this.delegate, args); <br /> 40            //执行原来的方法之后记录日? <br /> 41            Logger.logging(Level.INFO, method.getName() + " Method Start!"); <br /> 42        } catch (Exception e) { <br /> 43            e.printStackTrace(); <br /> 44        } <br /> 45        //q回Ҏ(gu)q回值给调用? <br /> 46        return result; <br /> 47    } <br /> 48 <br /> 49} <br /> 50 <br /> 上面cM出现的LoggercdLevel枚Dq是和上一上例子的实现是一L(fng).q里׃贴出代码? <br /> <br /> 让我们写一个Testcd试一?代码如下: <br /> Test.java <br /> 1package sinosoft.dj.aop.proxyaop; <br /> 2 <br /> 3public class Test { <br /> 4    public static void main(String[] args) { <br /> 5        IHello hello = (IHello)new DynaProxyHello().bind(new Hello()); <br /> 6        hello.sayGoogBye("Double J"); <br /> 7        hello.sayHello("Double J"); <br /> 8        <br /> 9    } <br /> 10} <br /> 11 <br /> q行输出的结果如? <br /> Tue Mar 04 21:24:03 CST 2008 sayGoogBye Method end . <br /> Double J GoodBye! <br /> 2008-3-4 21:24:03 sayGoogBye Method Start! <br /> Tue Mar 04 21:24:03 CST 2008 sayHello Method end . <br /> Hello Double J <br /> 2008-3-4 21:24:03 sayHello Method Start! <br /> ׃U程的关p?W二个方法的开始出现在W一个方法的l束之前.q不是我们所x? <br /> 从上面的例子我们看出.只要你是采用面向接口~程,那么,你的M对象的方法执行之前要加上记录日志的操作都是可以的.? (DynaPoxyHello)自动M理执行被代理对象(Hello)中的每一个方?一? java.lang.reflect.InvocationHandler接口把我们的代理对象和被代理对象解藕了(jin).但是,我们又发现还有一个问?q? 个DynaPoxyHello对象只能跟我们去在方法前后加上日志记录的操作.我们能不能把DynaPoxyHello对象和日志操作对? (Logger)解藕? <br /> l果是肯定的.让我们来分析一下我们的需? <br /> 我们要在被代理对象的Ҏ(gu)前面或者后面去加上日志操作代码(或者是其它操作的代?, <br /> 那么,我们可以抽象Z个接?q个接口里就只有两个Ҏ(gu),一个是在被代理对象要执行方法之前执行的Ҏ(gu),我们取名为start,W二个方法就是在被代理对象执行方法之后执行的Ҏ(gu),我们取名为end .接口定义如下 : <br /> 1package sinosoft.dj.aop.proxyaop; <br /> 2 <br /> 3import java.lang.reflect.Method; <br /> 4 <br /> 5public interface IOperation { <br /> 6    /** *//** <br /> 7     * Ҏ(gu)执行之前的操? <br /> 8     * @param method <br /> 9     */ <br /> 10    void start(Method method); <br /> 11    /** *//** <br /> 12     * Ҏ(gu)执行之后的操? <br /> 13     * @param method <br /> 14     */ <br /> 15    void end(Method method); <br /> 16} <br /> 17 <br /> 我们d一个实C面接口的c?我们把作他真正的操作?如下面是日志操作者的一个类: <br /> LoggerOperation.java <br /> package sinosoft.dj.aop.proxyaop; <br /> <br /> import java.lang.reflect.Method; <br /> <br /> public class LoggerOperation implements IOperation { <br /> <br />     public void end(Method method) { <br />         Logger.logging(Level.DEBUGE, method.getName() + " Method end ."); <br />     } <br /> <br />     public void start(Method method) { <br />         Logger.logging(Level.INFO, method.getName() + " Method Start!"); <br />     } <br /> <br /> } <br /> <br /> 然后我们要改一下代理对象DynaProxyHello中的代码.如下: <br /> 1package sinosoft.dj.aop.proxyaop; <br /> 2 <br /> 3import java.lang.reflect.InvocationHandler; <br /> 4import java.lang.reflect.Method; <br /> 5import java.lang.reflect.Proxy; <br /> 6 <br /> 7public class DynaProxyHello implements InvocationHandler { <br /> 8    /** *//** <br /> 9     * 操作? <br /> 10     */ <br /> 11    private Object proxy; <br /> 12    /** *//** <br /> 13     * 要处理的对象(也就是我们要在方法的前后加上业务逻辑的对?如例子中的Hello) <br /> 14     */ <br /> 15    private Object delegate; <br /> 16 <br /> 17    /** *//** <br /> 18     * 动态生成方法被处理q后的对?(写法固定) <br /> 19     * <br /> 20     * @param delegate <br /> 21     * @param proxy <br /> 22     * @return <br /> 23     */ <br /> 24    public Object bind(Object delegate,Object proxy) { <br /> 25        <br /> 26        this.proxy = proxy; <br /> 27        this.delegate = delegate; <br /> 28        return Proxy.newProxyInstance( <br /> 29                this.delegate.getClass().getClassLoader(), this.delegate <br /> 30                        .getClass().getInterfaces(), this); <br /> 31    } <br /> 32    /** *//** <br /> 33     * 要处理的对象中的每个Ҏ(gu)?x)被此方法送去JVM调用,也就是说,要处理的对象的方法只能通过此方法调? <br /> 34     * 此方法是动态的,不是手动调用? <br /> 35     */ <br /> 36    public Object invoke(Object proxy, Method method, Object[] args) <br /> 37            throws Throwable { <br /> 38        Object result = null; <br /> 39        try { <br /> 40            //反射得到操作者的实例 <br /> 41            Class clazz = this.proxy.getClass(); <br /> 42            //反射得到操作者的StartҎ(gu) <br /> 43            Method start = clazz.getDeclaredMethod("start", <br /> 44                    new Class[] { Method.class }); <br /> 45            //反射执行startҎ(gu) <br /> 46            start.invoke(this.proxy, new Object[] { method }); <br /> 47            //执行要处理对象的原本Ҏ(gu) <br /> 48            result = method.invoke(this.delegate, args); <br /> 49//            反射得到操作者的endҎ(gu) <br /> 50            Method end = clazz.getDeclaredMethod("end", <br /> 51                    new Class[] { Method.class }); <br /> 52//            反射执行endҎ(gu) <br /> 53            end.invoke(this.proxy, new Object[] { method }); <br /> 54 <br /> 55        } catch (Exception e) { <br /> 56            e.printStackTrace(); <br /> 57        } <br /> 58        return result; <br /> 59    } <br /> 60 <br /> 61} <br /> 62 <br /> 然后我们把Test.java中的代码改一?试一? <br /> package sinosoft.dj.aop.proxyaop; <br /> <br /> public class Test { <br />     public static void main(String[] args) { <br />         IHello hello = (IHello)new DynaProxyHello().bind(new Hello(),new LoggerOperation()); <br />         hello.sayGoogBye("Double J"); <br />         hello.sayHello("Double J"); <br />         <br />     } <br /> } <br /> l果q是一L(fng)? <br /> <br /> 如果你想在每个方法之前加上日志记?而不在方法后加上日志记录.你就把LoggerOperationcL成如? <br /> 1package sinosoft.dj.aop.proxyaop; <br /> 2 <br /> 3import java.lang.reflect.Method; <br /> 4 <br /> 5public class LoggerOperation implements IOperation { <br /> 6 <br /> 7    public void end(Method method) { <br /> 8        //Logger.logging(Level.DEBUGE, method.getName() + " Method end ."); <br /> 9    } <br /> 10 <br /> 11    public void start(Method method) { <br /> 12        Logger.logging(Level.INFO, method.getName() + " Method Start!"); <br /> 13    } <br /> 14 <br /> 15} <br /> 16 <br /> q行一?你就?x)发?每个Ҏ(gu)之后没有记录日志? q样,我们把代理者和操作者解藕了(jin)! <br /> <br /> 下面留一个问题给大家,如果我们不想让所有方法都被日志记?我们应该怎么去解藕呢.? <br /> 我的x是在代理对象的public Object invoke(Object proxy, Method method, Object[] args)Ҏ(gu)里面加上个if(),对传q来的method的名字进行判?判断的条件存在XML里面.q样我们可以配|文件时行解藕了(jin).如果有兴的 朋友可以把操作?被代理?都通过配置文gq行配置 ,那么可以写一个简单的SpringAOP框架? <br /> <img src ="http://www.tkk7.com/wshsdlau/aggbug/379160.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wshsdlau/" target="_blank">哈希</a> 2011-05-10 17:49 <a href="http://www.tkk7.com/wshsdlau/archive/2011/05/10/379160.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>W一个SpringE序http://www.tkk7.com/wshsdlau/archive/2011/04/28/379180.html哈希哈希Thu, 28 Apr 2011 04:19:00 GMThttp://www.tkk7.com/wshsdlau/archive/2011/04/28/379180.htmlhttp://www.tkk7.com/wshsdlau/comments/379180.htmlhttp://www.tkk7.com/wshsdlau/archive/2011/04/28/379180.html#Feedback0http://www.tkk7.com/wshsdlau/comments/commentRss/379180.htmlhttp://www.tkk7.com/wshsdlau/services/trackbacks/379180.html 1Q徏立xml文g
2Q徏立bean的接?br /> 3Q徏立bean
4Q写试E序
5Q测?br />
准备工作
环境配置如下Q需要spring.jar和common-logging.jar两个jar文g

开?br /> 1Q徏立xml文g
文g名:(x)beans.xml
文g位置Qsrc目录?br /> 文g内容Q?br /> <?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

  <!-- the application context definition for the springapp DispatcherServlet -->

  <bean id="sayhello" class="test.service.impl.HelloBean"/>
   
</beans>

2Q徏立bean的接?br /> 文g名:(x)Hello.java
文g内容Q?br /> package test.service;

public interface Hello {

    public void sayHello();

}

3Q徏立bean
文g名:(x)HelloBean.java
文g内容Q?br /> package test.service.impl;

import test.service.Hello;

public class HelloBean implements Hello {
   
    /* (non-Javadoc)
     * @see test.service.impl.Hello#sayHello()
     */
    public void sayHello() {
        System.out.println("q是一个测试程?);
    }

}

4Q写试E序
文g名:(x)FirstSpring.java
文g内容Q?br /> package test.spring;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import test.service.Hello;

public class FirstSpring {
   
    public static void main(String[] args) {
        testHello();
    }
   
    public static void testHello() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
        Hello hello =(Hello) applicationContext.getBean("sayhello");
        hello.sayHello();
       
    }
}

5Q测?br /> q行FirstSpring.java文gQ得到输出结果如下:(x)
2009-6-30 3:33:58 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [beans.xml]
2009-6-30 3:33:59 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
? ? Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@7259da]: org.springframework.beans.factory.support.DefaultListableBeanFactory@2e7820
2009-6-30 3:33:59 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
? ? Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@2e7820: defining beans [sayhello]; root of factory hierarchy
q是一个测试程?/span>

上面U字是spring输出的调试信息,蓝字是hellobean实际输入的内宏V?br />
单ȝ:
1,环境配置中不要忘C(jin)common-logging.jar文gQ我最开始忘C(jin)Q还是用junit试的,l果是不通过。出错的原因也不明白。后来直接改成普通的mainҎ(gu)试Q才明白原因?br />
2Qbean的接口和实现的分dspring中被贯彻执行。同时理解一下IOCQ控制反转)(j)的概c(din)?br /> 3Qspring中的beanQ应该指的是执行各种业务的业务bean才是。不同于strut的formbean和对应db表对象的valuebean?

哈希 2011-04-28 12:19 发表评论
]]>
strus 图解http://www.tkk7.com/wshsdlau/archive/2011/04/28/379181.html哈希哈希Thu, 28 Apr 2011 01:39:00 GMThttp://www.tkk7.com/wshsdlau/archive/2011/04/28/379181.htmlhttp://www.tkk7.com/wshsdlau/comments/379181.htmlhttp://www.tkk7.com/wshsdlau/archive/2011/04/28/379181.html#Feedback0http://www.tkk7.com/wshsdlau/comments/commentRss/379181.htmlhttp://www.tkk7.com/wshsdlau/services/trackbacks/379181.html
?
Google
 


哈希 2011-04-28 09:39 发表评论
]]>
SSH框架配置步骤详解http://www.tkk7.com/wshsdlau/archive/2011/04/26/379184.html哈希哈希Tue, 26 Apr 2011 13:14:00 GMThttp://www.tkk7.com/wshsdlau/archive/2011/04/26/379184.htmlhttp://www.tkk7.com/wshsdlau/comments/379184.htmlhttp://www.tkk7.com/wshsdlau/archive/2011/04/26/379184.html#Feedback0http://www.tkk7.com/wshsdlau/comments/commentRss/379184.htmlhttp://www.tkk7.com/wshsdlau/services/trackbacks/379184.html阅读全文

哈希 2011-04-26 21:14 发表评论
]]>
教你使用dwrQ相当犀?/title><link>http://www.tkk7.com/wshsdlau/archive/2011/04/24/379187.html</link><dc:creator>哈希</dc:creator><author>哈希</author><pubDate>Sun, 24 Apr 2011 02:49:00 GMT</pubDate><guid>http://www.tkk7.com/wshsdlau/archive/2011/04/24/379187.html</guid><wfw:comment>http://www.tkk7.com/wshsdlau/comments/379187.html</wfw:comment><comments>http://www.tkk7.com/wshsdlau/archive/2011/04/24/379187.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/wshsdlau/comments/commentRss/379187.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/wshsdlau/services/trackbacks/379187.html</trackback:ping><description><![CDATA[我个人的理解啊:(x)<br />    dwr其实是一个servlet包,它已l实C(jin)功能Q我们呢只需要调用就可以啊,关键在配|:(x)<br />    好了(jin)Q二二话不说,看啥叫犀利吧Q?br />    W一步:(x)web.xml配置<br />    <br /> <div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000; "><?</span><span style="color: #000000; ">xml version</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">1.0</span><span style="color: #000000; ">"</span><span style="color: #000000; "> encoding</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">UTF-8</span><span style="color: #000000; ">"</span><span style="color: #000000; ">?></span><span style="color: #000000; "> <br /> </span><span style="color: #000000; "><!</span><span style="color: #000000; ">DOCTYPE web</span><span style="color: #000000; ">-</span><span style="color: #000000; ">app PUBLIC </span><span style="color: #000000; ">"</span><span style="color: #000000; ">-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN</span><span style="color: #000000; ">"</span><span style="color: #000000; "> </span><span style="color: #000000; ">"</span><span style="color: #000000; ">http://java.sun.com/dtd/web-app_2_3.dtd</span><span style="color: #000000; ">"</span><span style="color: #000000; ">></span><span style="color: #000000; "> <br />   <br /> </span><span style="color: #000000; "><</span><span style="color: #000000; ">web</span><span style="color: #000000; ">-</span><span style="color: #000000; ">app</span><span style="color: #000000; ">></span><span style="color: #000000; "> <br />   </span><span style="color: #000000; "><</span><span style="color: #000000; ">servlet</span><span style="color: #000000; ">></span><span style="color: #000000; "> <br />     </span><span style="color: #000000; "><</span><span style="color: #000000; ">servlet</span><span style="color: #000000; ">-</span><span style="color: #000000; ">name</span><span style="color: #000000; ">></span><span style="color: #000000; ">dwr</span><span style="color: #000000; ">-</span><span style="color: #000000; ">invoker</span><span style="color: #000000; "></</span><span style="color: #000000;">servlet</span><span style="color: #000000; ">-</span><span style="color: #000000; ">name</span><span style="color: #000000; ">></span><span style="color: #000000; "> <br />     </span><span style="color: #000000; "><</span><span style="color: #000000; ">display</span><span style="color: #000000; ">-</span><span style="color: #000000; ">name</span><span style="color: #000000; ">></span><span style="color: #000000; ">DWR Servlet</span><span style="color: #000000; "></</span><span style="color: #000000; ">display</span><span style="color: #000000; ">-</span><span style="color: #000000; ">name</span><span style="color: #000000; ">></span><span style="color: #000000; "> <br />     </span><span style="color: #000000; "><</span><span style="color: #000000; ">servlet</span><span style="color: #000000; ">-</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">></span><span style="color: #000000; ">uk.ltd.getahead.dwr.DWRServlet</span><span style="color: #000000; "></</span><span style="color: #000000; ">servlet</span><span style="color: #000000; ">-</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">></span><span style="color: #000000; "> <br />     </span><span style="color: #000000; "><</span><span style="color: #000000; ">init</span><span style="color: #000000; ">-</span><span style="color: #000000; ">param</span><span style="color: #000000; ">></span><span style="color: #000000; "> <br />       </span><span style="color: #000000; "><</span><span style="color: #000000; ">param</span><span style="color: #000000; ">-</span><span style="color: #000000; ">name</span><span style="color: #000000; ">></span><span style="color: #000000; ">debug</span><span style="color: #000000; "></</span><span style="color: #000000; ">param</span><span style="color: #000000; ">-</span><span style="color: #000000; ">name</span><span style="color: #000000; ">></span><span style="color: #000000; "> <br />       </span><span style="color: #000000; "><</span><span style="color: #000000; ">param</span><span style="color: #000000; ">-</span><span style="color: #000000; ">value</span><span style="color: #000000; ">></span><span style="color: #0000FF; ">true</span><span style="color: #000000; "></</span><span style="color: #000000; ">param</span><span style="color: #000000; ">-</span><span style="color: #000000; ">value</span><span style="color: #000000; ">></span><span style="color: #000000; "> <br />     </span><span style="color: #000000; "></</span><span style="color: #000000; ">init</span><span style="color: #000000; ">-</span><span style="color: #000000; ">param</span><span style="color: #000000; ">></span><span style="color: #000000; "> <br />   </span><span style="color: #000000; "></</span><span style="color: #000000; ">servlet</span><span style="color: #000000; ">></span><span style="color: #000000; "> <br />   </span><span style="color: #000000; "><</span><span style="color: #000000; ">servlet</span><span style="color: #000000; ">-</span><span style="color: #000000; ">mapping</span><span style="color: #000000; ">></span><span style="color: #000000; "> <br />     </span><span style="color: #000000; "><</span><span style="color: #000000; ">servlet</span><span style="color: #000000; ">-</span><span style="color: #000000; ">name</span><span style="color: #000000; ">></span><span style="color: #000000; ">dwr</span><span style="color: #000000; ">-</span><span style="color: #000000; ">invoker</span><span style="color: #000000; "></</span><span style="color: #000000; ">servlet</span><span style="color: #000000; ">-</span><span style="color: #000000; ">name</span><span style="color: #000000; ">></span><span style="color: #000000; "> <br />     </span><span style="color: #000000; "><</span><span style="color: #000000; ">url</span><span style="color: #000000; ">-</span><span style="color: #000000; ">pattern</span><span style="color: #000000; ">>/</span><span style="color: #000000; ">dwr</span><span style="color: #008000; ">/*</span><span style="color: #008000;"></url-pattern> <br />   </servlet-mapping> <br />   <br />   <welcome-file-list> <br />     <welcome-file>index.jsp</welcome-file> <br />   </welcome-file-list> <br /> </web-app><br /> <br /> <br /> </span></div>    W二步:(x)dwr配置Q?span style="color: red;">先倒入jar?/span>dwr.jarQ?br />   <br /> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000; "><?</span><span style="color: #000000; ">xml version</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">1.0</span><span style="color: #000000; ">"</span><span style="color: #000000; "> encoding</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">gbk</span><span style="color: #000000; ">"</span><span style="color: #000000; ">?></span><span style="color: #000000; "> <br /> </span><span style="color: #000000; "><!</span><span style="color: #000000; ">DOCTYPE dwr PUBLIC <br />     </span><span style="color: #000000; ">"</span><span style="color: #000000; ">-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN</span><span style="color: #000000; ">"</span><span style="color: #000000; "> <br />     </span><span style="color: #000000; ">"</span><span style="color: #000000; ">http://www.getahead.ltd.uk/dwr/dwr10.dtd</span><span style="color: #000000; ">"</span><span style="color: #000000; ">></span><span style="color: #000000; "> <br />   <br /> </span><span style="color: #000000; "><</span><span style="color: #000000; ">dwr</span><span style="color: #000000; ">></span><span style="color: #000000; "> <br />   </span><span style="color: #000000; "><</span><span style="color: #000000; ">allow</span><span style="color: #000000; ">></span><span style="color: #000000; "> <br />    <create creator="new" javascript="us">  <br />    <param name="class" value="org.man.prj.Hello" />  <br />     </create> <br />     <create creator="new" javascript="Students"> <br />       <param name="class" value="org.man.prj.Students"/> <br />     </create> </span><span style="color: #000000; "><br />   <br />   </span><span style="color: #000000; "></</span><span style="color: #000000; ">allow</span><span style="color: #000000; ">></span><span style="color: #000000; "> <br /> </span><span style="color: #000000; "></</span><span style="color: #000000; ">dwr</span><span style="color: #000000; ">></span><span style="color: #000000; "> <br /> </span></div> W三步:(x)写java代码<br /> Ҏ(gu)你的需要了(jin)?br /> W四步:(x)index.jsp<br /> <div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000; "><%</span><span style="color: #000000; ">@ page language</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">java</span><span style="color: #000000; ">"</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">java.util.*</span><span style="color: #000000; ">"</span><span style="color: #000000; "> pageEncoding</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">utf-8</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%></span><span style="color: #000000; "><br /> </span><span style="color: #000000; "><</span><span style="color: #000000; ">html</span><span style="color: #000000; ">></span><span style="color: #000000; "> <br />   <br /> </span><span style="color: #000000; "><</span><span style="color: #000000; ">script src</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/mydwr/dwr/interface/Students.js</span><span style="color: #000000; ">"</span><span style="color: #000000; ">></</span><span style="color: #000000; ">script</span><span style="color: #000000; ">></span><span style="color: #000000; "> <br /> </span><span style="color: #000000; "><</span><span style="color: #000000; ">script src</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/mydwr/dwr/engine.js</span><span style="color: #000000; ">"</span><span style="color: #000000; ">></</span><span style="color: #000000; ">script</span><span style="color: #000000; ">></span><span style="color: #000000; "> <br /> </span><span style="color: #000000; "><</span><span style="color: #000000; ">script src</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/mydwr/dwr/util.js</span><span style="color: #000000; ">"</span><span style="color: #000000; ">></</span><span style="color: #000000; ">script</span><span style="color: #000000; ">></span><span style="color: #000000;"> <br /> <br /> <script type="text/javascript">  <br />             var dwr_callback = function(data){   <br />                alert(data);   <br />            }   <br />        </script>  <br /> </span><span style="color: #000000; "><</span><span style="color: #000000; ">select name</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">classid</span><span style="color: #000000;">"</span><span style="color: #000000; "> id</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">classid</span><span style="color: #000000; ">"</span><span style="color: #000000; "> onchange</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">javascript:update2();</span><span style="color: #000000; ">"</span><span style="color: #000000; ">></</span><span style="color: #000000; ">select</span><span style="color: #000000; ">></span><span style="color: #000000;">  <br /> <br /> <body><br />     This is my JSP page. <br><br />      <input type="button" value="invoke" onclick="us.hellodwr(dwr_callback)" />  <br />   </body><br /> </span></div> <br /> 好了(jin)q样可以用dwr?jin),很方便哦Q?br /> 不懂的话和他们联系QQQ:(x)110703194<br /> <br /> <br /> <br /> <br /> <br /> <img src ="http://www.tkk7.com/wshsdlau/aggbug/379187.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/wshsdlau/" target="_blank">哈希</a> 2011-04-24 10:49 <a href="http://www.tkk7.com/wshsdlau/archive/2011/04/24/379187.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://zs0451.com" target="_blank">޳aһ</a>| <a href="http://ghiearning.com" target="_blank">Ƶ߹ۿ</a>| <a href="http://asdfghjklzxcv.com" target="_blank">ƷѸ</a>| <a href="http://342030.com" target="_blank">պ˳ۺձ</a>| <a href="http://catalna.com" target="_blank">Ƶ</a>| <a href="http://doubiseo.com" target="_blank">һ</a>| <a href="http://ettedia.com" target="_blank">ƷŮþþ </a>| <a href="http://wulegu.com" target="_blank">þŮcc98cm</a>| <a href="http://6266tv.com" target="_blank">avվ</a>| <a href="http://26uuyy.com" target="_blank">վ߲</a>| <a href="http://591se591se.com" target="_blank">Ļ2019</a>| <a href="http://www55nana.com" target="_blank">Ƶվ</a>| <a href="http://www84847.com" target="_blank">ݽվƵ</a>| <a href="http://gttest5.com" target="_blank">AVһӰƬ</a>| <a href="http://k4h3.com" target="_blank">Ƶ88</a>| <a href="http://600c20.com" target="_blank">˰ǿŮ²Ƶ</a>| <a href="http://singbomb.com" target="_blank">޹պۺ</a>| <a href="http://18yinren.com" target="_blank">Ůһһ鴤Ƶ</a>| <a href="http://www62hth.com" target="_blank">av߹ۿ</a>| <a href="http://taoduoduo666.com" target="_blank">һƵѹۿ</a>| <a href="http://www-15706.com" target="_blank">ëƬѹۿ</a>| <a href="http://boyipark.com" target="_blank">鶹Ʒѹۿ</a>| <a href="http://adcacs.com" target="_blank">Ƶ</a>| <a href="http://yx6768.com" target="_blank">պߵӰ</a>| <a href="http://adcadm.com" target="_blank">A߹ۿվȫ</a>| <a href="http://xieehuomh.com" target="_blank">Ʒ޾Ʒ2021</a>| <a href="http://littlevv.com" target="_blank">һ뾫Ʒɫ</a>| <a href="http://626393.com" target="_blank">re99þ6Ʒ</a>| <a href="http://zhidianzh.com" target="_blank">ɫϰƵ߹</a>| <a href="http://longcais.com" target="_blank">777777</a>| <a href="http://hs969.com" target="_blank">žžþùƷ6</a>| <a href="http://www-6209.com" target="_blank">av</a>| <a href="http://lanchenews.com" target="_blank">ԲƵ</a>| <a href="http://2xpp.com" target="_blank">һձaѲ</a>| <a href="http://58rjz.com" target="_blank">337pձŷ޴ɫ</a>| <a href="http://fenxue520.com" target="_blank">Ů߾Ʒѹۿ</a>| <a href="http://lyczyb.com" target="_blank">һëƬaaѹۿ</a>| <a href="http://biarn.com" target="_blank">޹Ʒպ</a>| <a href="http://www-ttyx.com" target="_blank"> ר</a>| <a href="http://zhuguangbaoyu.com" target="_blank">ƷѸ߹ۿ </a>| <a href="http://hgbookvip.com" target="_blank">³Դվav</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>