??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲AⅤ视频一区二区三区,久久乐国产精品亚洲综合,亚洲国产老鸭窝一区二区三区http://www.tkk7.com/RiKeR/本博客停止更斎ͼ最新内容请讉K--> http://blog.csdn.net/shuaileezh-cnSun, 11 May 2025 02:03:37 GMTSun, 11 May 2025 02:03:37 GMT60RiKeR|上商城http://www.tkk7.com/RiKeR/articles/159498.htmlRiKeRRiKeRFri, 09 Nov 2007 22:48:00 GMThttp://www.tkk7.com/RiKeR/articles/159498.htmlhttp://www.tkk7.com/RiKeR/comments/159498.htmlhttp://www.tkk7.com/RiKeR/articles/159498.html#Feedback0http://www.tkk7.com/RiKeR/comments/commentRss/159498.htmlhttp://www.tkk7.com/RiKeR/services/trackbacks/159498.htmlRicer|上商城?span style="font-family: 宋体">需求确?/span>

1.       普通用户可以通过pȝ览商品Q按cdQ?/span>

2.       普通用户可以通过pȝ搜烦商品Q按cd、h(hun)位、日期等Q?/span>

3.       普通用户可以通过pȝ下订单(享受市场P

4.       普通用户可以注册成为系l会(x)员(免费注册Q?/span>

5.       ?x)员可以览和检索商?/span>

6.       ?x)员可以下订单(享受会(x)员P

7.       ?x)员可以览自己下过的订?/span>

8.       ?x)员可以理自己的信息(自服务系l)

a)         修改密码

b)        修改送货地址

c)        修改联系方式

9.       ?x)员可以分?/span>

1)      不同U别享受不同{的优?/span>

2)      通过购物的金额确定?/span>

10.   理员通过后台q行?x)员?/span>

              1Q会(x)员浏?/span>

              2Q会(x)员历史订单浏?/span>

              3Q会(x)员删?/span>

        4Q指定会(x)员?/span>

11. 理员通过后台q行产品分类的管?/span>

              1Q浏览、添加、删除、修?/span>

12. 理员通过后台q行产品理

              1Q新增?/span>

              2Q品上?/span>

              3Q品下?/span>

              4) 产品销量浏?/span>

              5Q品搜?/span>

              6Q品删?/span>

              7Q品修?/span>

13. 理员通过后台q行订单的管?/span>

              1Q订单查?/span>

              2Q修改订单状?/span>

              3Q订单搜?/span>

              4Q订单跟t?/span>

              5Q订单提?/span>

Ricer|上商城?span style="font-family: 宋体">架构分析与设?/span>

逻辑架构

       JSP + JavaBeans + Database

              JSP负责表现

              JavaBeans负责业务逻辑

              Database负责持久保持数据

物理架构

       Web服务器一?/span>

              配置

       Database服务器一?/span>

              配置

技术解x?/span>

       Web Server—Tomcat5.5

       Database—MySQL5.0

Ricer|上商城?span style="font-family: 宋体">业务逻辑分析

1.         ?x)员c?/span>

1Q?span style="font: 7pt 'Times New Roman'">    包装pȝ?x)?/span>

2Q?span style="font: 7pt 'Times New Roman'">    与订单类有一对多的关p?/span>

2.         理员类

1Q?span style="font: 7pt 'Times New Roman'">    包装pȝ理?/span>

3.         产品c?/span>

1Q?span style="font: 7pt 'Times New Roman'">    包装产品的信?/span>

2Q?span style="font: 7pt 'Times New Roman'">    与订单是多对多的关系

4.         cdc?/span>

1Q?span style="font: 7pt 'Times New Roman'">    包装产品的类?/span>

2Q?span style="font: 7pt 'Times New Roman'">    ?wi)状l构

3Q?span style="font: 7pt 'Times New Roman'">    与品是一对多的关p?/span>

5.         订单c?/span>

1Q?span style="font: 7pt 'Times New Roman'">    包装订单的信?/span>

2Q?span style="font: 7pt 'Times New Roman'">    与品是多对多的关系

3Q?span style="font: 7pt 'Times New Roman'">    与会(x)员是多对已的关系

6.         购物车类

1Q?span style="font: 7pt 'Times New Roman'">    包装购物车的信息

2Q?span style="font: 7pt 'Times New Roman'">    与品是多对多的关系

RiKeR|上商城?span style="font-family: 宋体">业务逻辑设计

1.         User

a)         properties

                         i.              id

                       ii.              username

                      iii.              password

                     iv.              phone

                       v.              addr

                     vi.              rdate

b)        methods

                         i.              getOrders()

                       ii.              save()

                      iii.              change()

                     iv.              delete

                       v.              static search()

2.         Administrator

a)         properties

                         i.              usernae

                       ii.              password

b)        methods

                         i.              login()

3.         Product

a)         properties

                         i.              id

                       ii.              name

                      iii.              descr

                     iv.              normalPrice

                       v.              memberPrice

                     vi.              pdate

                    vii.              category

2)    methods

       i.     getCategory()

       ii.     getSalesCount()

iii.                  save()?/span>change()?/span>search(){?/span>

4.         Category

a)         properties

                         i.              id

                       ii.              name

                      iii.              descr

                     iv.              pid(parent:Category)

b)        methods

                         i.              getProductCounts()

                       ii.              save()?/span>change(){?/span>

5.         SalesOrder&SaleItem

a)         properties

                         i.              id

                       ii.              userid

                      iii.              addr

                     iv.              SalesItem[]

                       v.              odate

b)        methods

                         i.              getTotalPrice()

                       ii.              save()?/span>change(){?/span>

                      iii.              getSalesItems()

6.         SalesOrder&SaleItem

a)         properties

                         i.              id

                       ii.              productID

                      iii.              unitPrice

                     iv.              pCount

b)        methods

                         i.              getTotalPrice()

                       ii.              save()?/span>change(){?/span>

7.         ShoppingCart&CartItem

a)         properties

                         i.              userid

                       ii.              CartItem[]

b)        methods

                         i.              getTotalPrice()

                       ii.              save()?/span>change(){?/span>

                      iii.              getCartItems()

8.         ShoppingCart&CartItem

a)         properties

                         i.              productID

                       ii.              unitPrice

                      iii.              pCount

b)        methods

                         i.              getTotalPrice()

RiKeR|上商城?span style="font-family: 宋体">数据库设?/span>

RiKeR|上商城?span style="font-family: 宋体">界面设计

前台

1.         首页index.jsp

a)         昄某类商品

b)        Ҏ(gu)id昄囄

c)        搜烦

d)        注册

e)         d

f)         自服?/span>

2.    搜烦界面       search.jsp

3.    搜烦l构       searchresult.jsp

4.    注册

       a)    注册面       register.jsp

       b)  注册成功       registerok.jsp

       c)    注册p|       registererr.jsp

5.    d

       a)    login.jsp

       b)    loginok.jsp

       c)    loginerr.jsp

6.    自服?/span>    selfservice.jsp

       a)    changepassword.jsp

       b)    changepasswordok.jsp

       c)    changepassworderr.jsp

       d)    changeinfo.jsp

       e)    changeinfook.jsp

       f)     changeinfoerr.jsp

7.    购物

       a)    购物车浏?/span>    cart.jsp

       b)    l帐       buy.jsp

后台Q?/span>admin目录下)

1.    d面       login.jsp

2.    首页       index.jsp

       a)    用户理

       b)    产品理

       c)    cd理

       d)    订单理

3.    用户理

       a)    昄用户       userlist.jsp

       b)    删除用户       userdelete.jsp

       c)    搜烦用户       usersearch.jsp

4.    产品理

       a)    productlist.jsp

       b)    productadd.jsp

       c)    productchange.jsp

       d)    productdelete.jsp

       e)    productSearch.jsp

5.    cd理

       a)    categorylist.jsp

       b)    categoryadd.jsp

       c)    categorydelete.jsp

       d)    categorychange.jsp

6.    订单理

       a)    订单览       salesorderlist.jsp

       b)    订单处理       salesorderdeal.jsp

RiKeR|上商城?span style="font-family: 宋体">开发环境搭?/span>

开发工?/span>

       Eclipse3.2

Web Server

       Tomcat5.5

Database

       MySQL

SCM

       CVS

RiKeR|上商城?span style="font-family: 宋体">开?/span>

先写用户

再写分类

然后写?/span>

接下来购?/span>

最后订单处?/span>

其他功能

RiKeR|上商城?span style="font-family: 宋体">开发安?/span>

V0.1

       用户—JavaBeans前台/后台

V0.2

分类—JavaBeans前台/后台

……

RiKeR|上商城?span style="font-family: 宋体">文档~纂

需求描q文?/span>

pȝ分析与设?/span>

数据库设?/span>

开发接?/span>API docs&源代码注?/span>

用户帮助Q前収ͼ

理员手册(后台Q?/span>

试文档



RiKeR 2007-11-10 06:48 发表评论
]]>
软g目开发的程http://www.tkk7.com/RiKeR/articles/159398.htmlRiKeRRiKeRFri, 09 Nov 2007 08:39:00 GMThttp://www.tkk7.com/RiKeR/articles/159398.htmlhttp://www.tkk7.com/RiKeR/comments/159398.htmlhttp://www.tkk7.com/RiKeR/articles/159398.html#Feedback0http://www.tkk7.com/RiKeR/comments/commentRss/159398.htmlhttp://www.tkk7.com/RiKeR/services/trackbacks/159398.html 1.需求分?br />  通过各种手段定pȝ的功能和性能
 功能Q购物、注册、浏览、搜索。。?br />  性能Q可同时支持N个ƈ发访问,q且响应旉不低于M毫秒。?br />  手段Q?br />   头脑风暴
  ?x)?br />   询问
  *原型-界面原型、业务原?br />  本阶D|目开发的最重要阶段
 在web目中,通常界面设计?x)在本阶D进?br /> 2.分析与设?br />  架构分析与设?br />   逻辑架构
   3层架构,N层架构。?br />    MVC
   MODEL 1 OR MODEL 2
  物理架构
   web服务器的分布
   数据库服务器的分?br />   技术解x案的定
   java/.net
   openSource/商业
 业务逻辑分析
  Ҏ(gu)需求分析业务逻辑
   有哪些h?x)用本pȝ
   他们?x)用本pȝ做什?br />    通常他们使用本系l的步骤是什么样?br />    ?x)有哪些明显的类来支撑本pȝ的运?br />    ?x)有哪些不同的提CZ(x)反馈l用?br />   本阶D与需求的定密切相关Q通常在确定需求的时候就?x)进行相关的分?br />  业务逻辑设计
  Ҏ(gu)需求的分析来确定具体的c?br />   定cȝ属?br />   定cȝ接口Q方法)
  定cM间的关系
  定用户操作程在设计上的反?br />   *q行数据库的设计
 界面设计
  设计pȝ的界面风?br />    颜色、STYLE
  设计pȝ的具?#8220;模拟”界面
   能够从头走到?br />     方便q行需求的定
    方便JSPE序员的开?br /> 3.开发环境搭?br />  开发工L(fng)定
 配置理工具的确?br />  试工具的确?br />  文g服务器、配|服务器{的定
4.开?试-开?试
 按照设计q行开?br />   *q速开发原?br />   *q行q代开?br />   提早q行试
   单元试、黑盒测试、性能试、易用性测?br /> 5.文档~纂

RiKeR 2007-11-09 16:39 发表评论
]]>
bbsPrjl验http://www.tkk7.com/RiKeR/articles/158933.htmlRiKeRRiKeRWed, 07 Nov 2007 12:56:00 GMThttp://www.tkk7.com/RiKeR/articles/158933.htmlhttp://www.tkk7.com/RiKeR/comments/158933.htmlhttp://www.tkk7.com/RiKeR/articles/158933.html#Feedback0http://www.tkk7.com/RiKeR/comments/commentRss/158933.htmlhttp://www.tkk7.com/RiKeR/services/trackbacks/158933.htmlwhere前面要空|因ؓ(f)是sql语句..

 <input type=text size=4 name="pageNo" value=<%=pageNo%> /> q?>

<select name="pageNo" onchange="document.form1.submit()">
  <%
  for(int i=1; i<=totalPages; i++) {
  %>
  <option value=<%=i %> <%=(pageNo == i) ? "selected" : ""

%>>W?lt;%=i %>?br />   <%
  }
  %>
 </select>
?lt;/select>

一、编E规?不管是用什么语a一定要有一个规范的写法。?

密码:<input type="password" name="password"><br>

如果你要加入 JavaScript 的验?你一定要加一?id 属?

密码:<input type="password" name="password" id="password"><br>

name 属性是在页面传递值的时候用 Qid 则是?本页面用

W二?在找面中的某个元素的时?我不你这样写

password1=document.form1.password1.value;

你写成这?
var password
password = document.getElementById('password');
得到 password 以后

if(password.value==null||password==""){
... ...
return false;
}

最?

OnSubmit="check()"

OnSubmit = ... 需要的是一?true 或?false

所以你p check() 的返回?再返回给 onsubmit

onsubmit="return check()"


==================>

1.?wi)状l构的存储与展现-递归方式
2.JavaScript css html jspl合q用
3.分页
4.前台、后?br /> 5.Session初步
6.功能完成与健壮之间的区别



RiKeR 2007-11-07 20:56 发表评论
]]>
2005q?月Y件设计师上午题精?/title><link>http://www.tkk7.com/RiKeR/archive/2007/10/20/154512.html</link><dc:creator>RiKeR</dc:creator><author>RiKeR</author><pubDate>Sat, 20 Oct 2007 08:09:00 GMT</pubDate><guid>http://www.tkk7.com/RiKeR/archive/2007/10/20/154512.html</guid><wfw:comment>http://www.tkk7.com/RiKeR/comments/154512.html</wfw:comment><comments>http://www.tkk7.com/RiKeR/archive/2007/10/20/154512.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/RiKeR/comments/commentRss/154512.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/RiKeR/services/trackbacks/154512.html</trackback:ping><description><![CDATA[     摘要: 坚持W一印象Q还是徘徊在45分边~,一定要努力啊!Q?nbsp; <a href='http://www.tkk7.com/RiKeR/archive/2007/10/20/154512.html'>阅读全文</a><img src ="http://www.tkk7.com/RiKeR/aggbug/154512.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/RiKeR/" target="_blank">RiKeR</a> 2007-10-20 16:09 <a href="http://www.tkk7.com/RiKeR/archive/2007/10/20/154512.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>无损分解和保持依赖的判断http://www.tkk7.com/RiKeR/articles/153733.htmlRiKeRRiKeRWed, 17 Oct 2007 16:53:00 GMThttp://www.tkk7.com/RiKeR/articles/153733.htmlhttp://www.tkk7.com/RiKeR/comments/153733.htmlhttp://www.tkk7.com/RiKeR/articles/153733.html#Feedback17http://www.tkk7.com/RiKeR/comments/commentRss/153733.htmlhttp://www.tkk7.com/RiKeR/services/trackbacks/153733.html以下的论q都Zq样一个前提:(x)
R是具有函C赖集F的关pL式,QR1 QR2Q是R的一个分解?/p>

首先我们l出一个看似无兛_非常重要的概念:(x)属性集的闭?/span>?br /> ?#945;Z属性集。我们称在函C赖集F下由α函数定的所有属性的集合为F?#945;的闭包,Cؓ(f)α+ ?br /> 下面l出一个计?#945;+的算法,该算法的输入是函C赖集F和属性集αQ输出存储在变量result中?br /> 法一Q?br /> result:=α;
while(result发生变化)do
    for each 函数依赖β→γ in F do
    begin
        if β∈result then result:=result∪γ;
    end

属性集闭包的计有以下两个常用用途:(x)
·判断α是否码,通过计算α+Q?#945;在F下的闭包Q,?#945;+ 是否包含了R中的所有属性。若是,?#945;为R的超码?br /> ·通过验是?#946;∈α+Q来验证函数依赖是否成立。也是_(d)用属性闭包计?#945;+Q看它是否包?#946;?/p>

Q请原谅我用∈W号来表CZ个集合之间的包含关系Q那个表C包含的W号我找不到Q大家知道是什么意思就行了。)

看一个例子吧Q?005q?1月系分上?7题:(x)

?l定关系R(A1QA2QA3QA4)上的函数依赖集F={A1→A2QA3→A2QA2→A3QA2→A4}QR的候选关键字为________?br /> Q?7QA. A1  B. A1A3  C. A1A3A4  D. A1A2A3

首先我们按照上面的算法计A1+ ?br /> result=A1Q?br /> ׃A1→A2QA1∈resultQ所以result=result∪A2=A1A2
׃A2→A3QA2∈resultQ所以result=result∪A3=A1A2A3
׃A2→A4QA2∈resultQ所以result=result∪A3=A1A2A3A4
׃A3→A2QA3∈resultQ所以result=result∪A2=A1A2A3A4

通过计算我们看到QA1+ =result={A1A2A3A4}Q所以A1是R的超码,理所当然是R的候选关键字。此题选A ?/p>


好了Q有了前面的铺垫Q我们进入正题?/div>
无损分解的判?/span>?br /> 如果R1∩R2是R1或R2的超码,则R上的分解QR1QR2Q是无损分解。这是一个充分条Ӟ当所有的U束都是函数依赖时它才是必要条gQ例如多g赖就是一U非函数依赖的约束)Q不q这已经_了?/div>

保持依赖的判?/span>?br /> 如果F上的每一个函C赖都在其分解后的某一个关pM成立Q则q个分解是保持依赖的Q这是一个充分条Ӟ?br /> 如果上述判断p|Qƈ不能断言分解不是保持依赖的,q要使用下面的通用Ҏ(gu)来做q一步判断?br /> 该方法的表述如下Q?br /> 法二:(x)
对F上的每一?#945;→β使用下面的过E:(x)
result:=α;
while(result发生变化)do
    for each 分解后的Ri
        t=(result∩Ri)+ ∩Ri
        result=result∪t

q里的属性闭包是在函C赖集F下计出来的。如果result中包含了β的所有属性,则函C?#945;→β。分解是保持依赖的当且仅当上q过E中F的所有依赖都被保持?/div>

下面l出一个例题,2006q?月系分上?3题:(x)

●设关系模式R<U, F>Q其中U=?jng)A, B, C, D, E},FQ{A→BCQC→DQBC→EQE→A},则分?#961;={R1QABCEQ,R2QCDQ}满 Q?3Q??br /> Q?3Q?AQ具有无损连接性、保持函C?br />               BQ不h无损q接性、保持函C?br />               CQ具有无损连接性、不保持函数依赖
              DQ不h无损q接性、不保持函数依赖

先做无损链接的判断。R1∩R2={C}Q计C+?/div>
Result=C
׃C→DQC∈resultQ所以result=result∪D=CD
可见C是R2的超码,该分解是一个无损分解?/div>

再做保持依赖的判断?br /> A→BCQBC→EQ?E→A都在R1上成立(也就是说每一个函C赖左右两边的属性都在R1中)QC→D在R2上成立,因此l分解是保持依赖的?/p>

选A?/p>


再看一个复杂点的例题?007q?月数?0-41题?/p>

●给定关pL式R<U, F>QU=?jng)A, B, C, D, E},FQ{B→AQD→AQA→EQAC→B},其候选关键字?
Q?0Q?nbsp; Q则分解ρ={R1QABCEQ,R2QCDQ}满 Q?1Q??br /> Q?0Q?AQABD
              BQABE
              CQACD
              DQCD
Q?1Q?AQ具有无损连接性、保持函C?br />               BQ不h无损q接性、保持函C?br />               CQ具有无损连接性、不保持函数依赖
              DQ不h无损q接性、不保持函数依赖

看见了吧Q和前面一题多么的相像Q?br /> 对于W一问,分别计算ABCD四个选项的闭包,
QABDQ? = { ABDE }
QABEQ? = { ABE }
QACDQ? = { ABCDE }
QCDQ? = { ABCDE }
选D?/p>

再看W二问?br /> 先做无损链接的判断。R1∩R2={C}Q计C+?/div>
result=C
因此C既不是R1也不是R2的超码,该分解不h无损分解性?/div>

再做保持依赖的判断?br /> B→AQA→EQAC→B在R1上成立,D→A在R1和R2上都不成立,因此需做进一步判断?br /> ׃B→AQA→EQAC→B都是被保持的Q因为它们的元素都在R1中)Q因此我们要判断的是D→A是不是也被保持?/p>

对于D→A应用法二:(x)
result=D
对R1Qresult∩R1=фQ空集,找不到空集的W号Q就用这个表C吧Q,t=фQresult=D
再对R2Qresult∩R2=DQD+ =ADE Qt=D+ ∩R2=DQresult=D
一个@环后result未发生变化,因此最后result=DQƈ未包含AQ所以D→A未被保持Q该分解不是保持依赖的?/p>

选D?br />


RiKeR 2007-10-18 00:53 发表评论
]]>PV֮-攉?/title><link>http://www.tkk7.com/RiKeR/articles/153732.html</link><dc:creator>RiKeR</dc:creator><author>RiKeR</author><pubDate>Wed, 17 Oct 2007 16:52:00 GMT</pubDate><guid>http://www.tkk7.com/RiKeR/articles/153732.html</guid><wfw:comment>http://www.tkk7.com/RiKeR/comments/153732.html</wfw:comment><comments>http://www.tkk7.com/RiKeR/articles/153732.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/RiKeR/comments/commentRss/153732.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/RiKeR/services/trackbacks/153732.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font color="#333333"><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">3</font></span></font><font color="#333333"><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q在某超市里有一个收银员Q且同时最多允许有</span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">n</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个顾客购物,我们可以顾客和攉员看成是两类不同的进E,且工作流E如下图所C。ؓ(f)了利?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">PV</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">操作正确地协调这两类q程之间的工作,讄了三个信号量</span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">S1</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">S2</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">Sn</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q且初值分别ؓ(f)</span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">0</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">0</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">n</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。这样图中的</span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">a</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应填?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">__(1)__</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q图中的</span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">b1</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">b2</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应分别填?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">__(2)__</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q图中的</span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">c1</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">c2</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应分别填?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">__(3)__</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span></font><font color="#333333"><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman"> <br /> <br /> <img style="width: 500px; cursor: pointer" onclick="javascript:window.open(this.src);" src="http://blog.flamesky.com/UploadFile/2006-9/921187159.jpg" onload="javascript:if(this.width alt="" />500){this.resized=true;this.style.width=500;}" resized="true"><br /> <br /> </font></span></font></p> <p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font color="#333333"><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman"><br /> </font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">  </span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">(1) A. P(S1) B</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">P(S2) C</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">P(Sn) D</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">P(Sn)</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span></font><font color="#333333"><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">P(S1)<br /> <br /> </font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">  </span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">(2) A</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">P(Sn)</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">V(S2) B</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">P(Sn)</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">V(S1) C</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">P(S2)</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">V(S1) D.V(S1)</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span></font><font color="#333333"><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">P(S2)<br /> <br /> </font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">  </span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">(3) A</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">P(S1)</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">V(S2) B</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">P(Sn)</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">V(S1) C</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">P(S2)</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">V(S1) D</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman"> V(S1)</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span></font><font color="#333333"><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman"> P(S2)<br /> <br /> </font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">  {案Q(</span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">1</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">C </font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">2</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">D </font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">3</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q?/span></font><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman"><font color="#333333">A</font><font color="#333333"><br /> <br /> </font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">  解析Q这是一道考查</span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">PV</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">操作的题Q所以首先得弄清楚那些地斚w要互斥、那些地斚w要同步。题目中l出了两c进E:(x)֮q程与收银元q程Q由于超市是֮q程之间的公有资源,而且市里限制最多允许有</span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">n</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个顾客购物,所以要讄一个公有信号量</span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">Sn</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q初值是</span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">n</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q顾客进E在q入市时要执行</span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">P(Sn)</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q离开市时要执行</span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">V(Sn)</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">操作。顾客购物后要到攉员处付款Q因此顾客进E与攉员进E之间是同步的关p,一ơ只允许一个顾客进E付?gu)ƾ,整个市只有一个收银员q程收费Q所以需要ؓ(f)֮q程讄一个私有信号量</span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">S2</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Qؓ(f)攉员进E设|一个私有信号量</span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">S1</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q由于开始时没有֮M?gu)ƾ,攉员也没有收费Q所?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">S1</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">S2</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的初gؓ(f)</span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">0</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。当有顾客买完东西去付款时执?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">V(S1)</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q通知攉员进E有֮付款Q此时收银员q程执行</span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">P(S1)</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">操作后就可进入收费,收费完成后收银元q程执行</span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">V(S2)</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q以通知֮收费完毕Q此旉客执?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">P(S2)</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可d攉収ͼ在离开市旉执行</span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">V(Sn)</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">Q释放资源?/span></font><span lang="EN-US" style="font-size: 9pt; color: black"><br /> <br /> </span><font color="#333333"><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">  复习(fn)提示Q?/span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">PV</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">操作在操作系l中处于很重要得CQ要惛_适的q用</span><span lang="EN-US" style="font-size: 9pt; color: black"><font face="Times New Roman">PV</font></span><span style="font-size: 9pt; color: black; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">操作Q必d好的理解q程之间的互斥与同步Q即那些q程之间是互斥的Q那些进E之间是同步的?/span></font></p> <p><font color="#333333"> </font></p> <p><font color="#333333"> </font></p> <p><font color="#333333">2005q上半年E序员试?br /> ●某pȝ中有一个缓冲区Q进EP1不断地生产品送入~冲区,q程P2不断C~冲区取产品消费。假设该~冲区只能容U一个品。进EP1与P2的同步模型如下图所C:(x) </font></p> <p><font color="#333333">(q个囑ְ是教E中常见的那个图)</font></p> <p><font color="#333333">    P1                             P2            <br />   __|                            __|<br />  |  生一个?nbsp;                |  P(S2)<br />  |  P(S1)                        |  从缓冲区取一个?br />  |  产品送缓冲区                 |  V(S1)<br />  |  V(S2)                        |  消费             <br />  |__|                            |__|<br />    <br /> 为此Q应设信号量S1的初gؓ(f)__(18)__Q信号量S2的初gؓ(f)__(19)__?br /> (18) AQ?2     BQ?1     CQ?     DQ?<br /> (19) AQ?2     BQ?1     CQ?     DQ?<br /> {案Q?18)D (19)C</font></p> <p><font color="#333333">分析Q?/font></p> <p><font color="#333333">资源S是这个资源初始状态拥有的数目Q也是没有M操作Q刚开始的时候资源的可用数?br /> 单的例子Q一个盘子可以放8个苹果,一ơ只能一个h拿一个苹果或者放一个苹果,则设|两个资源S1、S2分别表示盘子中苹果的数量和取放苹果的许可Q则S1初始gؓ(f)8QS2??/font></p> <p><font color="#333333">以下一定要CQ?br /> P操作<br /> S = S-1<br /> S<0 d</font></p> <p><font color="#333333">V操作<br /> S= S+1<br /> S ?0  唤醒</font></p> <p><font color="#333333">S1、S2分别是P1、P2对缓冲区操作的开养IS1=1表示初始状态P1q程可以对缓冲区q行操作Q而对于S2=0正好L了P2q程对缓冲区的操作!在刚开始的时候缓冲区为空Q其允许P1在其中放入品,但不能让P2取出产品Q所以才产生q样的结?/font></p> <p><font color="#333333"> P一ơ什么什么就减一个。如果你P的玩意是0.那P下面的东西就不开工了?br /> V 一ơ什么就加一?br />  <br /> q个同步有s1 s2.<br /> s1肯定是ؓ(f)1的。缓冲区可以攑և个东西就应该是几.<br /> 你P了p1 一ơ以后?代表向缓冲区里放了东ѝs1 = 0了。表C缓冲区不能放东西了。进E时q行了。假设这句执行完了后跛_W二个程序中厅R是p(s2) 刚肯定不行。所以s2一定要为初始要?. 要等待第一个放q缓冲区的事做完后V(s2)把s2标志位搞?/font></p> <p> </p> <p> </p> <p class="main"><font color="#333333">●某仓库有两名发货员Q一名审核员。当֮提货Ӟ只要发货员空?允许֮q入仓库提货Q顾客离开Ӟ审核员检验顾客提货是否正。其工作程如下图所C。ؓ(f)了利用PV操作正确地协调他们之间的工作Q设|了两个信号量S1和S2Q且S1的初gؓ(f)2QS2的初gؓ(f)1。图中的a应填写____(25)___Q图中的b、c和d应分别填写____(26)____?br />  </font></p> <p class="main"><img style="cursor: pointer" onclick="javascript:window.open(this.src);" src="http://blog.flamesky.com/UploadFile/2006-9/921585194.jpg" onload="javascript:if(this.width alt="" />500){this.resized=true;this.style.width=500;}"><br /> <br />  <br /> <font color="#333333">供选择的答案:(x)<br /> (25)A.P(S1)      B.P(S2)      C.V(S1)      D.V(S2)<br /> (26)A.P(S2)、VQS2Q和VQS1Q?    B.PQS1Q、VQS1Q和VQS2Q?br />   C.VQS1Q、P(S2)和V(S2)      D.VQS2Q、PQS1Q和VQS1Q?/font></p> <p class="main"><font color="#333333">分析Q?/font></p> <p class="main"><font color="#333333">֮来了,要看看是否有发货?卛_货员资源是否存在.<br /> 所以用P(S1)   若S1>0表示,存在(无论多少)<br />               若S1<=0表示,不存?q程d.</font></p> <p class="main"><font color="#333333">提完?q说?肯定用发货员?肯定q有人等着提货.q时,应该释放发货?<br /> 所以用V(S1)</font></p> <p class="main"><font color="#333333">然后,要审?<br /> 可能有h正在审呢,所以用P(S2)意思和上面相同.<br /> 审完?要释?可能有h正等着审呢.所以用V(S2)释放审货?<br /> 完毕.<br /> </font></p> <p> </p> <p align="center"><strong><font color="#0000ff" size="6">PV原语实现q程间互斥与同步</font></strong>  <p><strong>PV原语的含?/strong><br />   P操作和V操作是不可中断的E序D,UCؓ(f)原语。PV原语?qing)信号量的概念都是由荷兰U学家E.W.Dijkstra提出的。信号量sem是一整数Qsem大于{于零时代表可供q发q程使用的资源实体数Q但sem于零时则表C正在等待用(f)界区的进E数?br />   P原语操作的动作是Q?br />   Q?Qsem?Q?br />   Q?Q若sem?后仍大于或等于零Q则q程l箋执行Q?br />   Q?Q若sem?后小于零Q则该进E被d后进入与该信L(fng)对应的队列中Q然后{q程调度?br />   V原语操作的动作是Q?br />   Q?Qsem?Q?br />   Q?Q若相加l果大于Ӟ则进El执行;<br />   Q?Q若相加l果于或等于零Q则从该信号的等待队列中唤醒一{待q程Q然后再q回原进El执行或转进E调度?br />   PV操作对于每一个进E来_(d)都只能进行一ơ,而且必须成对使用。在PV原语执行期间不允许有中断的发生?br /> <strong>用PV原语实现q程的互?/strong><br />   ׃用于互斥的信号量sem与所有的q发q程有关Q所以称之ؓ(f)公有信号量。公有信号量的值反映了公有资源的数量。只要把临界区置于P(sem)和V(sem)之间Q即可实现进E间的互斥。就象火车中的每节R厢只有一个卫生间Q该车厢的所有旅客共享这个公有资源:(x)卫生_(d)所以旅客间必须互斥q入卫生_(d)只要把卫生间攑֜P(sem)和V(sem)之间Q就可以到达互斥的效果。以下例子说明进E的互斥实现?br />   <strong>?</strong><br />   生围棋的工Z心把相{数量的黑子和白子؜装蝲一个箱子里Q现要用自动分拣pȝ把黑子和白子分开Q该pȝ׃个ƈ发执行的q程l成Q功能如下:(x)<br />   Q?Q进EA专门拣黑子,q程B专门拣白子;<br />   Q?Q每个进E每ơ只拣一个子Q当一个进E在拣子时不允许另一个进E去拣子Q?br />   <strong>分析Q?/strong><br />   W一步:(x)定q程间的关系。由功能Q?Q可知进E之间是互斥的关pR?br />   W二步:(x)定信号量及(qing)其倹{由于进EA和进EB要互斥进入箱子去拣棋子,子是两个进E的公有资源Q所以设|一个信号量sQ其值取决于公有资源的数目,׃子只有一个,s的初值就设ؓ(f)1?br />   <strong>实现Q?/strong><br />   begin<br />   s:semaphore;<br />   s:=1;<br />    cobegin<br />     process A<br />     begin<br />     L1: P(s);<br />      拣黑子;<br />      V(s);<br />      goto L1;<br />     end; <br />     process B<br />     begin<br />     L2:P(s);<br />      拣白子;<br />      V(s);<br />      goto L2;<br />     end;<br />    coend;<br />   end;<br />   判断q程间是否互斥,关键是看q程间是否共享某一公有资源Q一个公有资源与一个信号量相对应。确定信号量的值是一个关键点Q它代表了可用资源实体数。如下实例:(x)<br />   <strong>?<br /> </strong>  某R站售厅QQ何时L多可容纳20名购者进入,当售厅中少?0名购者时Q厅外的购票者可立即q入Q否则需要在外面{待。每个购者可看成一个进E?br />   分析Q第一步:(x)定q程间的关系。售厅是各q程׃n的公有资源,当售厅中多?0名购者时Q厅外的购票者需要在外面{待。所以进E间是互斥的关系。第二步Q确定信号量?qing)其倹{只有一个公有资源:(x)售票厅,所以设|一个信号量s。售厅最多容U?0个进E,卛_用资源实体数?0Qs的初值就设ؓ(f)20?br />   <strong>实现Q?br /> </strong>  begin <br />   s:semaphore;<br />   s:=20;<br />   cobegin<br />    process PI(I=1,2,……)<br />     begin P(s);<br />      q入售票厅;<br />      购票Q?br />      退出;<br />      V(s);<br />     end;<br />    coend<br />         当购者进入售厅前要执行P(s)操作Q执行后若s大于或等于零Q说明售厅的h数还未满可进入。执行后若s于Ӟ则说明售厅的h数已满不能进入。这个实C同时最多允?0个进E进入售厅购票Q其余进E只能等待?br /> <strong>用PV原语实现q程的同?/strong><br />   与进E互斥不同,q程同步时的信号量只与制U进E及(qing)被制U进E有兌不是与整组q发q程有关Q所以称该信号量为私有信号量。利用PV原语实现q程同步的方法是Q首先判断进E间的关pMؓ(f)同步的,且ؓ(f)各ƈ发进E设|私有信号量Q然后ؓ(f)U有信号量赋初|最后利用PV原语和私有信号量规定各进E的执行序。下面我们将?增添一个条Ӟ使其成ؓ(f)q程间是同步的?br />   <strong>?<br /> </strong>  在例1的基之上再添加一个功能:(x)<br />   Q?Q当一个进E拣了一个棋子(黑子或白子)以后Q必让另一个进E拣一个棋子(黑子或白子)?br />   <strong>分析Q?br /> </strong>  W一步:(x)定q程间的关系。由功能Q?Q(2Q(3Q可知,q程间的关系为同步关pR第二步Q确定信号量?qing)其倹{进EA和B׃n子q个公有资源Q但规定两个q程必须轮流d不同色的子Q因而相互间要互通消息。对于进EA可设|一个私有信号量s1Q该U有信号量用于判断进EA是否能去拣黑子,初gؓ(f)1。对于进EB同样讄一个私有信号量s2Q该U有信号量用于判断进EB是否能去拣白子,初gؓ(f)0。当然你也可以设|s1初gؓ(f)0Qs2初gؓ(f)1?br />   <strong>实现:</strong><br />   begin<br />   s1,s2:semaphore;<br />   s1:=1;s2:=0;<br />   cobegin<br />    process A<br />    begin<br />    L1: P(s1);<br />     拣黑子;<br />     V(s2);<br />     goto L1;<br />    end;    <br />    process B<br />    begin<br />    L2:P(s2);<br />     拣白子;<br />     V(s1);<br />     goto L2;<br />    end;<br />   coend;<br />   end;<br />   另外一个问题就是P原语是不是一定在V原语的前面?回答是否定的。下面看一个例子?br />          <strong>?</strong><br />   讑֜公共汽R上,司机和售员的活动分别是Q司机:(x)启动车辆Q正常行车,到站停R。售员Q上乘客Q关车门Q售,开车门Q下乘客。用PV操作对其控制?br />   <strong>分析Q?/strong><br />   W一步:(x)定q程间的关系。司机到站停车后Q售员方可工作。同P售票员关车门后,司机才能工作。所以司Z售票员之间是一U同步关pR?br />   W二步:(x)定信号量及(qing)其倹{由于司Z售票员之间要互通消息,司机q程讄一个私有信号量runQ用于判断司否进行工作,初gؓ(f)0。售员q程讄一个私有信号量stopQ用于判断是否停车,售票员是否能够开车门Q初gؓ(f)0?br />   实现Q?br />   begin stop ,run:semaphore<br />   stop:=0;run:=0;<br />   cobegin<br />    driver: begin<br />    L1: P(run);<br />     启动车辆Q?br />     正常行RQ?br />     到站停RQ?br />      V(stop);<br />     goto  L1;<br />    end;<br />    conductor:begin<br />    L2:上乘客;<br />     兌R门;<br />     V(run);<br />     售票Q?br />     P(stop);<br />     开车门Q?br />     下乘客;<br />     goto L2;<br />    end;<br />    coend;<br />   end;<br />   用PV操作q可以实现进E同步与互斥的؜合问题,典型的如Q多个生产者和多个消费者共享容量ؓ(f)n的缓存区。这个例子在很多书中都有介绍Q在q里׃说了?/p> <img src ="http://www.tkk7.com/RiKeR/aggbug/153732.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/RiKeR/" target="_blank">RiKeR</a> 2007-10-18 00:52 <a href="http://www.tkk7.com/RiKeR/articles/153732.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>E序设计、Y件开发之学习(fn)Ҏ(gu)Q指导思想http://www.tkk7.com/RiKeR/articles/153731.htmlRiKeRRiKeRWed, 17 Oct 2007 16:48:00 GMThttp://www.tkk7.com/RiKeR/articles/153731.htmlhttp://www.tkk7.com/RiKeR/comments/153731.htmlhttp://www.tkk7.com/RiKeR/articles/153731.html#Feedback0http://www.tkk7.com/RiKeR/comments/commentRss/153731.htmlhttp://www.tkk7.com/RiKeR/services/trackbacks/153731.html动手Q强调实?/span>
    • 只有通过大量的实跉|能不断的培养~程感觉
    • ~程是有感觉的,好象英语阅MP是有语感?/span>
    • 每天都要~写代码Q不断培ȝE感?/span>

 

通过实践来增强对理论的理?/span>

    • 没有实践的理论是I的理?/span>
    • 没有理论的实跉|盲目的实?/span>
    • 实践是检验真理的唯一标准

 

打破同学以往在程序设计学?fn)中存在的误?/span>

    • 误区一Q注重理论,轻视实践Q学?fn)新知识前想把关于这斚w的理论全部掌握后再去实践Q?strong>大错牚w
    • 解决Ҏ(gu)Q在了解理论后,?span style="background: yellow; mso-highlight: yellow">立即d践,实践驱动理论的学?fn),q样掌握理论才更加扎实,不容易忘?/span>

 

误区二:(x)不善于做W记Q不善于ȝ?/span>

解决Ҏ(gu)QhL有忘性的Q今天记得很牢的东西Q过一星期也许完全忘CQ用W记下来Q好记性不如烂W头Q不要太怿自己的记?/span>

 

误区三:(x)不善于思考,遇到问题首先惛_问别?/span>

解决Ҏ(gu)Q勤于思考,在学?fn)的道\上会(x)遇到大量问题Q这些遇到的问题是你的宝贵胦富。遇到问题时首先想ؓ(f)什么会(x)出现该错误,其在程序中Q应该学?x)看错误提示Q根据提C去L错误的根源,实在不行再去问同学,问老师

 

因ؓ(f)自己L错误的过E是最好的学习(fn)q程Q这个错误一旦被自己解决掉,首先得到的是极大的满xQ另外会(x)留下深刻的印象,q是看书所得不到的Q有q这U经历的同学才会(x)有这U体?x)。即使没有解决也?x)从q个q程中学到很多东西,q种感觉是:(x)只可意会(x)Q不可言传?/span>

 

误区四:(x)Ҏ(gu)骄傲Q以׃(x)Ҏ(gu)术就得意h

解决Ҏ(gu)Q做谦虚Q学?fn)程序设计更要谦虚。要知道山外有山Qh外有人,只有谦虚才会(x)督促自己不断的去学习(fn)Q编E水q的提高才会(x)一点点上去?/span>

 

误区五:(x)没有耐心Q怕麻烦,思考时间不够长

解决Ҏ(gu)Q没有耐心是写不好E序的,写程序是不仅是知识的体现Q更是耐心与毅力的体现QQ何程序开始都?x)有错误的,耐心L错误体现一个h的编E素充R要多思考,多去惻I脑子用灵

 

误区六:(x)x慢学好技术,一步一个脚华ͼt踏实实Q严重错?/span>

解决Ҏ(gu)Q技术的发展日新月异Q尤其在软g斚w。学?fn)一门新的技术,开始时不必面面俱到Q先?/span>hello world写出来再_(d)?#8220;热打铁”Q会(x)的东西,仔细看;不会(x)的东西,着头皮ȝQ实在不行就跌?/span>

 

误区七:(x)不看英文Q只看中?/span>

解决Ҏ(gu)Q很多帮助文Ӟ比如最重要?/span>JDK帮助文g都是英文的,只有?fn)惯看英文才能进步快Q中文的译很多都是文不寚wQ看了还不如不看Q看英文虽然慢,可是q了不久Q你׃(x)发现英文也没那么难懂

 

实践Q实践,q是实践

即书上有代码,也要把它敲出来,敲代码也是有感觉?/span>

看明?/span> Q?/span>= q行出来Q是两个概念

 

希望大家在每ơ学?fn)后都能有质的提高,而不仅仅学会(x)了一些新技术,更要学会(x)E序设计的一般方法,一般思想。也怽工作后未必从?/span>J2EE或?/span>.NET相关的工作,但是掌握了学?fn)的?gu)Q学?fn)Q何其他的技术都不是什么难?/span>

 



RiKeR 2007-10-18 00:48 发表评论
]]>
HTML查缺补漏http://www.tkk7.com/RiKeR/articles/153701.htmlRiKeRRiKeRWed, 17 Oct 2007 14:18:00 GMThttp://www.tkk7.com/RiKeR/articles/153701.htmlhttp://www.tkk7.com/RiKeR/comments/153701.htmlhttp://www.tkk7.com/RiKeR/articles/153701.html#Feedback0http://www.tkk7.com/RiKeR/comments/commentRss/153701.htmlhttp://www.tkk7.com/RiKeR/services/trackbacks/153701.html阅读全文

RiKeR 2007-10-17 22:18 发表评论
]]>
2005q?1月Y件设计师下午试题_析http://www.tkk7.com/RiKeR/archive/2007/10/17/153698.htmlRiKeRRiKeRWed, 17 Oct 2007 14:13:00 GMThttp://www.tkk7.com/RiKeR/archive/2007/10/17/153698.htmlhttp://www.tkk7.com/RiKeR/comments/153698.htmlhttp://www.tkk7.com/RiKeR/archive/2007/10/17/153698.html#Feedback0http://www.tkk7.com/RiKeR/comments/commentRss/153698.htmlhttp://www.tkk7.com/RiKeR/services/trackbacks/153698.html阅读全文

RiKeR 2007-10-17 22:13 发表评论
]]>
2005q?1月Y件设计师上午试题http://www.tkk7.com/RiKeR/archive/2007/10/17/153580.htmlRiKeRRiKeRWed, 17 Oct 2007 07:14:00 GMThttp://www.tkk7.com/RiKeR/archive/2007/10/17/153580.htmlhttp://www.tkk7.com/RiKeR/comments/153580.htmlhttp://www.tkk7.com/RiKeR/archive/2007/10/17/153580.html#Feedback1http://www.tkk7.com/RiKeR/comments/commentRss/153580.htmlhttp://www.tkk7.com/RiKeR/services/trackbacks/153580.html阅读全文

RiKeR 2007-10-17 15:14 发表评论
]]>
2006q?月Y件设计师下午试题_解http://www.tkk7.com/RiKeR/archive/2007/10/16/153395.htmlRiKeRRiKeRTue, 16 Oct 2007 14:45:00 GMThttp://www.tkk7.com/RiKeR/archive/2007/10/16/153395.htmlhttp://www.tkk7.com/RiKeR/comments/153395.htmlhttp://www.tkk7.com/RiKeR/archive/2007/10/16/153395.html#Feedback1http://www.tkk7.com/RiKeR/comments/commentRss/153395.htmlhttp://www.tkk7.com/RiKeR/services/trackbacks/153395.html阅读全文

RiKeR 2007-10-16 22:45 发表评论
]]>
2006q?月Y件设计师上午试题http://www.tkk7.com/RiKeR/archive/2007/10/15/153100.htmlRiKeRRiKeRMon, 15 Oct 2007 13:38:00 GMThttp://www.tkk7.com/RiKeR/archive/2007/10/15/153100.htmlhttp://www.tkk7.com/RiKeR/comments/153100.htmlhttp://www.tkk7.com/RiKeR/archive/2007/10/15/153100.html#Feedback4http://www.tkk7.com/RiKeR/comments/commentRss/153100.htmlhttp://www.tkk7.com/RiKeR/services/trackbacks/153100.html阅读全文

RiKeR 2007-10-15 21:38 发表评论
]]>
2006q?1月Y件设计师下午试题_析http://www.tkk7.com/RiKeR/archive/2007/10/15/152833.htmlRiKeRRiKeRSun, 14 Oct 2007 22:18:00 GMThttp://www.tkk7.com/RiKeR/archive/2007/10/15/152833.htmlhttp://www.tkk7.com/RiKeR/comments/152833.htmlhttp://www.tkk7.com/RiKeR/archive/2007/10/15/152833.html#Feedback0http://www.tkk7.com/RiKeR/comments/commentRss/152833.htmlhttp://www.tkk7.com/RiKeR/services/trackbacks/152833.html阅读全文

RiKeR 2007-10-15 06:18 发表评论
]]>
如何当好班长Q?/title><link>http://www.tkk7.com/RiKeR/archive/2007/10/14/152718.html</link><dc:creator>RiKeR</dc:creator><author>RiKeR</author><pubDate>Sun, 14 Oct 2007 06:37:00 GMT</pubDate><guid>http://www.tkk7.com/RiKeR/archive/2007/10/14/152718.html</guid><wfw:comment>http://www.tkk7.com/RiKeR/comments/152718.html</wfw:comment><comments>http://www.tkk7.com/RiKeR/archive/2007/10/14/152718.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.tkk7.com/RiKeR/comments/commentRss/152718.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/RiKeR/services/trackbacks/152718.html</trackback:ping><description><![CDATA[     摘要: 千万别拿自己当班长看Q把自己的位|放得低一些~~~ <br>1、以w作则,如果q自己都做不好,q怎么当班长?   <a href='http://www.tkk7.com/RiKeR/archive/2007/10/14/152718.html'>阅读全文</a><img src ="http://www.tkk7.com/RiKeR/aggbug/152718.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/RiKeR/" target="_blank">RiKeR</a> 2007-10-14 14:37 <a href="http://www.tkk7.com/RiKeR/archive/2007/10/14/152718.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2006q?1月Y件设计师上午试题http://www.tkk7.com/RiKeR/archive/2007/10/12/152184.htmlRiKeRRiKeRThu, 11 Oct 2007 16:00:00 GMThttp://www.tkk7.com/RiKeR/archive/2007/10/12/152184.htmlhttp://www.tkk7.com/RiKeR/comments/152184.htmlhttp://www.tkk7.com/RiKeR/archive/2007/10/12/152184.html#Feedback2http://www.tkk7.com/RiKeR/comments/commentRss/152184.htmlhttp://www.tkk7.com/RiKeR/services/trackbacks/152184.html阅读全文

RiKeR 2007-10-12 00:00 发表评论
]]>
关于WebWork的认识与思?/title><link>http://www.tkk7.com/RiKeR/articles/webwork.html</link><dc:creator>RiKeR</dc:creator><author>RiKeR</author><pubDate>Tue, 28 Aug 2007 16:39:00 GMT</pubDate><guid>http://www.tkk7.com/RiKeR/articles/webwork.html</guid><wfw:comment>http://www.tkk7.com/RiKeR/comments/140710.html</wfw:comment><comments>http://www.tkk7.com/RiKeR/articles/webwork.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/RiKeR/comments/commentRss/140710.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/RiKeR/services/trackbacks/140710.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">WebWork</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">是一?span lang=EN-US>Java web-application</span>开发框?span lang=EN-US>(development framework). </span>它专注于提高开发者的生效率q简化代?span lang=EN-US>. WebWork</span>构徏?span lang=EN-US>XWork</span>之上<span lang=EN-US>.<o:p></o:p></span></span></p> <p style="TEXT-INDENT: 24pt"><font face=宋体><span lang=EN-US>WebWork</span>是由<span lang=EN-US>OpenSymphony</span>l织开发的Q致力于lg化和代码重用的拉出式<span lang=EN-US>MVC</span>模式<span lang=EN-US>J2EE Web</span>框架?span lang=EN-US>WebWork</span>目前最新版本是<span lang=EN-US>2.2</span>Q现在的<span lang=EN-US>WebWork2.x</span>前n?span lang=EN-US>Rickard Oberg</span>开发的<span lang=EN-US>WebWork</span>Q但现在<span lang=EN-US>WebWork</span>已经被拆分成?span lang=EN-US>Xwork1</span>?span lang=EN-US>WebWork2</span>两个目?span lang=EN-US>Xwork</span>z、灵zd能强大,它是一个标准的<span lang=EN-US>Command</span>模式实现Qƈ且完全从<span lang=EN-US>web</span>层脱d来?span lang=EN-US>Xwork</span>提供了很多核心功能:(x)前端拦截机(<span lang=EN-US>interceptor</span>Q,q行时表单属性验证,cd转换Q强大的表达式语aQ?span lang=EN-US>OGNL – the Object Graph Notation Language</span>Q,<span lang=EN-US>IoC</span>Q?span lang=EN-US>Inversion of Control</span>倒置控制Q容器等?span lang=EN-US> </span></font></p> <p style="TEXT-INDENT: 24pt"><font face=宋体><span lang=EN-US>WebWork2</span>建立?span lang=EN-US>Xwork</span>之上Q处?span lang=EN-US>HTTP</span>的响应和h?span lang=EN-US>WebWork2</span>使用<span lang=EN-US>ServletDispatcher</span>?span lang=EN-US>HTTP</span>h的变?span lang=EN-US>Action(</span>业务?span lang=EN-US>Action</span>c?span lang=EN-US>), session</span>Q会(x)话)<span lang=EN-US>application</span>Q应用程序)范围的映,<span lang=EN-US>request</span>h参数映射?span lang=EN-US>WebWork2</span>支持多视图表C,视图部分可以使用<span lang=EN-US>JSP, Velocity, FreeMarker, JasperReports</span>Q?span lang=EN-US>XML</span>{?/font></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><o:p> </o:p></span></p> <p class=MsoNormal style="BACKGROUND: #eeeeee; MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">1</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id=_x0000_i1025 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape><span style="COLOR: black">XWork</span></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">提供了普通的<span lang=EN-US>(generic)</span>命o(h)模式<span lang=EN-US>(command pattern)</span>框架<span lang=EN-US><br></span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">2</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <span style="COLOR: black"><v:shape id=_x0000_i1026 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">同时也是一个反转控?span lang=EN-US>(Inversion of Control, IoC)</span>容器<span lang=EN-US>.</span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <o:p></o:p></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">除了上述Ҏ(gu)外<span lang=EN-US>, WebWork</span>qؓ(f)其它功能?span lang=EN-US><o:p></o:p></span></span></p> <p class=MsoNormal style="BACKGROUND: #eeeeee; MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">1</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <v:shape id=_x0000_i1027 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">创徏可复用的用户界面模版<span lang=EN-US>(UI template)<br></span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">2</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <span style="COLOR: black"><v:shape id=_x0000_i1028 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">表单<span lang=EN-US>(form)</span>控制<span lang=EN-US><br></span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">3</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <span style="COLOR: black"><v:shape id=_x0000_i1029 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">用户界面主题<span lang=EN-US>(UI theme)<br></span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">4</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <span style="COLOR: black"><v:shape id=_x0000_i1030 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">国际?span lang=EN-US><br></span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">5</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <span style="COLOR: black"><v:shape id=_x0000_i1031 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">表单参数?span lang=EN-US>JavaBean</span>的动态映?span lang=EN-US><br></span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">6</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <span style="COLOR: black"><v:shape id=_x0000_i1032 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">健壮的客L(fng)?qing)服务器端校?span lang=EN-US>(validation)</span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <o:p></o:p></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 12pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-pagination: widow-orphan" align=left><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">提供了强有力的支?span lang=EN-US>. <o:p></o:p></span></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">WebWork 2 : </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">什么是<span lang=EN-US>WebWork <br><br>WebWork</span>是一个强大的Z<span lang=EN-US>Web</span>?strong><span lang=EN-US style="COLOR: blue">MVC</span><span style="COLOR: blue">框架</span></strong><span lang=EN-US>, </span>它构建在一个命令模式框?span lang=EN-US>XWork</span>之上<span lang=EN-US>. WebWork</span>的特性包?span lang=EN-US><o:p></o:p></span></span></p> <p class=MsoNormal style="BACKGROUND: #eeeeee; MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><v:shape id=_x0000_i1033 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape><span style="COLOR: black">1</span> <span style="COLOR: black"> </span></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Q用于处理或代理<span lang=EN-US> </span>h的分发器<span lang=EN-US>(Dispatcher)<br><v:shape id=_x0000_i1034 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape><br><v:shape id=_x0000_i1035 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape>2</span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <span style="COLOR: black"> </span></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Q支持多U视图技?span lang=EN-US>(JSP, Velocity, JasperReports, XML, FreeMarker)</span>的结果类?span lang=EN-US><br><v:shape id=_x0000_i1036 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape><br><v:shape id=_x0000_i1037 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape>3</span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <span style="COLOR: black"> </span></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Q一个小而强大的<span lang=EN-US>JSP</span>标签库和<span lang=EN-US>Velocity</span>宏定?span lang=EN-US><br><v:shape id=_x0000_i1038 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape><br><v:shape id=_x0000_i1039 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape>4</span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <span style="COLOR: black"> </span></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Q分发器调用<span lang=EN-US>XWork</span>zd来访问和操作模型<span lang=EN-US>(Model)</span>qؓ(f)视图昄模型数据提供方便的途径<span lang=EN-US>.</span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <o:p></o:p></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> WebWork</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">真正的优势在于它z和协作能力的根本理?span lang=EN-US>. </span>使用<span lang=EN-US>WebWork</span>有助于<span lang=EN-US><o:p></o:p></span></span></p> <p class=MsoNormal style="BACKGROUND: #eeeeee; MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><v:shape id=_x0000_i1040 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape><span style="COLOR: black">1</span> </span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Q最化代码<span lang=EN-US><br><v:shape id=_x0000_i1041 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape><br><v:shape id=_x0000_i1042 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape>2</span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> </span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Q允许开发h员更多的x业务逻辑<span lang=EN-US>(business logic)</span>和徏?span lang=EN-US>(modeling)<br><v:shape id=_x0000_i1043 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape><br><v:shape id=_x0000_i1044 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape>3</span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> </span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Q不是诸如编?span lang=EN-US>Servlet</span>之类的事?span lang=EN-US>. </span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <o:p></o:p></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">一 Q特?span lang=EN-US> <o:p></o:p></span></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">1 </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Q灵zȝ校验<span lang=EN-US>(validation)</span>框架<span lang=EN-US>, </span>允许使用<span lang=EN-US>XML</span>文g定义校验q过截取?span lang=EN-US>(Interceptor)</span>在运行时自动应用到活动类<span lang=EN-US>(Action class), </span>从而达到校验与zdcM间的完全解藕<span lang=EN-US>(decoupled). </span>新版本还支持客户端校?span lang=EN-US>. <br><br>2 </span>Q类型{?span lang=EN-US>(Type conversion)</span>可以很容易的对象从一个类转换成另一个类型?span lang=EN-US><br> <br>3 </span>Q强大的表达式语a<span lang=EN-US>(Expression Language, EL)</span>建立?span lang=EN-US>OGNL</span>基础之上<span lang=EN-US>, </span><span style="COLOR: black">允许<span lang=EN-US>:</span></span><span lang=EN-US><o:p></o:p></span></span></p> <p class=MsoNormal style="BACKGROUND: #eeeeee; MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">1</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <v:shape id=_x0000_i1045 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">遍历动态对象图<span lang=EN-US><br></span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">2</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <span style="COLOR: black"><v:shape id=_x0000_i1046 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">执行对象Ҏ(gu)<span lang=EN-US><br></span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">3</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <span style="COLOR: black"><v:shape id=_x0000_i1047 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">使用值栈<span lang=EN-US>(ValueStack)</span>实现对多?span lang=EN-US>JavaBean</span>属性的透明讉K<span lang=EN-US><br></span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">4</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <span style="COLOR: black"><v:shape id=_x0000_i1048 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape>Webwork</span></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">也可以?span lang=EN-US>JSTL. </span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <o:p></o:p></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">4 </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Q用反转控?span lang=EN-US>(Inversion of Control, IoC)</span>理<u>lg<span lang=EN-US>(component)</span>生命周期</u>?u>依赖关系</u><span lang=EN-US>, </span>不需要编写注册类创徏lg<span lang=EN-US>, </span>lg客户也不需要主动获取组件实?span lang=EN-US>(instance). <br><br>5 </span>Q?span lang=EN-US>Velocity</span>模版<span lang=EN-US>, </span>使得开发h员可以很Ҏ(gu)的定?span lang=EN-US>Web</span>面的外?span lang=EN-US>(look & feel). <br><br>6 </span>Q截取器<span lang=EN-US>(Interceptors)</span>可以动态截取活?span lang=EN-US>(Action)</span>执行前后的处理过E?span lang=EN-US>, </span>q?span lang=EN-US><o:p></o:p></span></span></p> <p class=MsoNormal style="BACKGROUND: #eeeeee; MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">1</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <v:shape id=_x0000_i1049 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">化了zd的代?span lang=EN-US><br></span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">2</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <span style="COLOR: black"><v:shape id=_x0000_i1050 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">提高了代码复用能?/span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <o:p></o:p></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">7 </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Q支持国际化<span lang=EN-US>(I18n). <br><br>8 </span>Q可以方便的与其他第三方软g集成<span lang=EN-US>, </span>包括<span lang=EN-US>Hibernate, Spring, Pico, Sitemesh. <br><br>9 </span>Q支持多U视图技术如<span lang=EN-US>: <o:p></o:p></span></span></p> <p class=MsoNormal style="BACKGROUND: #eeeeee; MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">1</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <v:shape id=_x0000_i1051 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape><span style="COLOR: black">JSP<br></span><span style="COLOR: teal">2</span> <span style="COLOR: black"><v:shape id=_x0000_i1052 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape>Velocity<br></span><span style="COLOR: teal">3</span> <span style="COLOR: black"><v:shape id=_x0000_i1053 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape>FreeMarker<br></span><span style="COLOR: teal">4</span> <span style="COLOR: black"><v:shape id=_x0000_i1054 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape>JasperReports<br></span><span style="COLOR: teal">5</span> <span style="COLOR: black"><v:shape id=_x0000_i1055 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape>XML</span> <o:p></o:p></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br>10 </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Q?u>使用?/u><span lang=EN-US>(Packages)</span>?u>名空?/u><span lang=EN-US>(Namespaces)</span>理C百计的活?span lang=EN-US>. <br><br><br></span>?Q背景与目的<span lang=EN-US> <br>WebWork</span>是一个开放源代码目<span lang=EN-US>, </span>目标是ؓ(f)在短旉内构建复杂网站提供易于理解和l护的工具及(qing)开发框?span lang=EN-US>. Java</span>是一个^C?qing)基于该q_的语a<span lang=EN-US>, </span>管他支?span lang=EN-US>although it supports many others as the language in which systems are built, such as JavaScript and XML.<o:p></o:p></span></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">WebWork</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">在构架上Z最?jng)_践和那些已被证实有h(hun)值的设计模式<span lang=EN-US>. </span>它还Z一个强烈的动机<span lang=EN-US>: </span>可能的?span lang=EN-US>, </span>q具有维护上的灵zL?span lang=EN-US>(</span>q实际上是一个困隄q<span lang=EN-US>).<br><br></span>它也鼓励用户使用恰当?span lang=EN-US>, </span>W合需要的方式工作<span lang=EN-US>. [It also encourages you, as a user, to do things the way you seem fit for your needs.] <strong><span style="COLOR: blue">WebWork</span></strong></span><strong><span style="COLOR: blue">能以多种方式配置和?/span></strong><span lang=EN-US>, </span>哪种方式更适合于你依赖于用环?span lang=EN-US>. </span>下面是一个例?span lang=EN-US>, WebWork</span>支持多种不同?span lang=EN-US>HTML</span>生成技术如<span lang=EN-US>:<o:p></o:p></span></span></p> <p class=MsoNormal style="BACKGROUND: #eeeeee; MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">1</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <v:shape id=_x0000_i1056 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape><span style="COLOR: black">JSP<br></span><span style="COLOR: teal">2</span> <span style="COLOR: black"><v:shape id=_x0000_i1057 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape>Velocity</span></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">模版引擎<span lang=EN-US><br></span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">3</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <span style="COLOR: black"><v:shape id=_x0000_i1058 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape>XSLT</span> <o:p></o:p></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">它们之间在理念上和技术上都存在很大的差别<span lang=EN-US>, </span>但都能ؓ(f)<span lang=EN-US>WebWork</span>所?span lang=EN-US>, </span>同时<span lang=EN-US>, </span>不同的用L(fng)实需要这些不同的方式<span lang=EN-US>. "</span>你不能那么做<span lang=EN-US>"</span>是我们尽可能避免的一句话<span lang=EN-US>, </span>?span lang=EN-US>"</span>我们不能<span lang=EN-US>"</span>往往是因为有另一个更?span lang=EN-US>, </span>更适合的工?span lang=EN-US>.<o:p></o:p></span></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">?span lang=EN-US> </span>Q?span lang=EN-US>WebWork</span>?span lang=EN-US>MVC Model-1</span>?span lang=EN-US>Model-2</span>的支?span lang=EN-US> <br><br>Web</span>应用开发框架的最重要的一个Q务是支持<span lang=EN-US><o:p></o:p></span></span></p> <p class=MsoNormal style="BACKGROUND: #eeeeee; MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">1</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <v:shape id=_x0000_i1059 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">逻辑<span lang=EN-US><br></span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">2</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <span style="COLOR: black"><v:shape id=_x0000_i1060 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">内容<span lang=EN-US><br></span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">3</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <span style="COLOR: black"><v:shape id=_x0000_i1061 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">表现</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <o:p></o:p></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">相分ȝ理念<span lang=EN-US>. </span>如果没有做到q一?span lang=EN-US>, </span>通常?x)导致维护上的问?span lang=EN-US>, </span>如果开发团队结构复?span lang=EN-US>(</span></span><span style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">因ؓ(f)每一个团队成员通常只负责应用的某一斚w<span lang=EN-US>(aspect)</span></span><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">), </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">q会(x)使应用的开发变得更加困?span lang=EN-US>. </span>辑ֈ分离目的的一般方法是采用<span lang=EN-US>MVC(Model-View-Controller)</span>设计模式<span lang=EN-US>. </span>该模式鼓׃用分ȝ代码来处理:(x)<span lang=EN-US><o:p></o:p></span></span></p> <p class=MsoNormal style="BACKGROUND: #eeeeee; MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">1</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <v:shape id=_x0000_i1062 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">模型<span lang=EN-US>(model, </span>?/span><span style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <span lang=EN-US style="COLOR: black">"</span><span lang=EN-US> </span><span style="COLOR: black">业务逻辑</span> <span lang=EN-US style="COLOR: black">"</span><span lang=EN-US> <span style="COLOR: black">)<br></span><span style="COLOR: teal">2</span> <span style="COLOR: black"><v:shape id=_x0000_i1063 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span></span><span style="COLOR: black">控制?span lang=EN-US>(controller, </span>?/span> <span lang=EN-US style="COLOR: black">"</span><span lang=EN-US> </span><span style="COLOR: black">应用逻辑</span> <span lang=EN-US style="COLOR: black">"</span><span lang=EN-US> <span style="COLOR: black">)<br></span><span style="COLOR: teal">3</span> <span style="COLOR: black"><v:shape id=_x0000_i1064 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span></span><span style="COLOR: black">视图<span lang=EN-US>(view). </span></span><span lang=EN-US> <o:p></o:p></span></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">q样分离之后<span lang=EN-US>, </span>下一个问题是<span lang=EN-US>: <o:p></o:p></span></span></p> <p class=MsoNormal style="BACKGROUND: #eeeeee; MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><v:shape id=_x0000_i1065 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">控制器的代码与表现部分如何交?/span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <o:p></o:p></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">有两U常用的设计模型可以做到q一?span lang=EN-US>, </span>它们分别被称?span lang=EN-US>Model-1</span>?span lang=EN-US>Model-2. </span>q两U模型将在下文描q?span lang=EN-US>.<o:p></o:p></span></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Model-1 </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Q?span lang=EN-US><br>Model-1</span>方式的基本想法是在表C层<span lang=EN-US>(presentation layer)</span>?span lang=EN-US>JSP</span>或模版中调用控制器代?span lang=EN-US>. </span>如果你正在?span lang=EN-US>JSP, </span>q意味着你可以通过两种方式执行你的<span lang=EN-US>WebWork</span>zdQ?span lang=EN-US><o:p></o:p></span></span></p> <p class=MsoNormal style="BACKGROUND: #eeeeee; MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">1</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <v:shape id=_x0000_i1066 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">使用</span><span style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <span lang=EN-US style="COLOR: black">"</span><span lang=EN-US> <span style="COLOR: black">webwork:action</span> <span style="COLOR: black">"</span> </span><span style="COLOR: black">标签调用执行<span lang=EN-US><br></span></span><span lang=EN-US style="COLOR: teal">2</span><span lang=EN-US> <span style="COLOR: black"><v:shape id=_x0000_i1067 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span></span><span style="COLOR: black">使用</span> <span lang=EN-US style="COLOR: black">"</span><span lang=EN-US> <span style="COLOR: black">webwork:bean</span> <span style="COLOR: black">"</span> </span><span style="COLOR: black">标签像调?span lang=EN-US>JavaBeans</span>一h行活?span lang=EN-US>.</span></span><span lang=EN-US> <span style="COLOR: black"><v:shape id=_x0000_i1068 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span><o:p></o:p></span></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Model-2 </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Q?span lang=EN-US><br></span>?span lang=EN-US>Model-2</span>方式?span lang=EN-US><o:p></o:p></span></span></p> <p class=MsoNormal style="BACKGROUND: #eeeeee; MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">1</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <v:shape id=_x0000_i1069 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">哪些代码调用控制?span lang=EN-US><br></span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">2</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <span style="COLOR: black"><v:shape id=_x0000_i1070 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">哪些视图q行展示</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <o:p></o:p></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">q三方军_<span lang=EN-US>, </span>通常是一?span lang=EN-US>servlet</span>分发?span lang=EN-US>. </span>分发器解?strong><span lang=EN-US style="COLOR: blue">HTTP</span><span style="COLOR: blue">h中的<span lang=EN-US>URL</span></span></strong><span lang=EN-US>, </span>然后军_执行哪些代码<span lang=EN-US>. </span>一个包含控制器代码?span lang=EN-US>Java</span>对象被获取ƈ执行<span lang=EN-US>, </span>从而完成对某个应用逻辑和业务逻辑的处?span lang=EN-US>. </span>当执行结束后<span lang=EN-US>, </span>分发器将h转交<span lang=EN-US>(forward)</span>l一个视囑֤理器<span lang=EN-US>(</span>如一?span lang=EN-US>JSP), </span>它用前一个处理的数据l制l果视图<span lang=EN-US>.<o:p></o:p></span></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">?span lang=EN-US> </span>Q如何选择使用<span lang=EN-US>?<br></span>׃<span lang=EN-US><o:p></o:p></span></span></p> <p class=MsoNormal style="BACKGROUND: #eeeeee; MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">1</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <v:shape id=_x0000_i1071 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">控制器逻辑<span lang=EN-US><br></span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; COLOR: teal; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">2</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <span style="COLOR: black"><v:shape id=_x0000_i1072 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">表现生成</span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <o:p></o:p></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">完全解藕<span lang=EN-US>, </span>使得Ҏ(gu)执行情况来显CZ同结果页面成为可?span lang=EN-US>. </span>例如<span lang=EN-US>, </span>如果处理出现错误可以显CZ个错误页面而不昄正常的结果页?span lang=EN-US>.<o:p></o:p></span></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Model-1</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">方式的优点如?span lang=EN-US>.<o:p></o:p></span></span></p> <p class=MsoNormal style="BACKGROUND: #eeeeee; MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><v:shape id=_x0000_i1073 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape><span style="COLOR: black">1</span> </span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Q不需要徏立代码与表示之间的映关p?span lang=EN-US>. <br><v:shape id=_x0000_i1074 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape>2</span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> </span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Q易于察?span lang=EN-US>JSP</span>或模版中执行了哪些代?span lang=EN-US>. <br><v:shape id=_x0000_i1075 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape>3</span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> </span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Q如果页面中的一部分要求某个处理q程只允许成?span lang=EN-US>(</span>否则pȝq<span lang=EN-US>), <br>          </span>那么q些代码调用和表现部分的代码<span lang=EN-US>(</span>?span lang=EN-US>JSP</span>标签库和<span lang=EN-US>HTML)</span>不必分离到新的活动和<span lang=EN-US>JSP</span>面中处理过E?span lang=EN-US>. </span>q样可以提高性能和可L?span lang=EN-US>. </span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <o:p></o:p></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Model-2</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">方式的优点如?span lang=EN-US>.<o:p></o:p></span></span></p> <p class=MsoNormal style="BACKGROUND: #eeeeee; MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><v:shape id=_x0000_i1076 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape><span style="COLOR: black">1</span> </span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Q代码和表现d分离<span lang=EN-US>. </span>同一个表现页面可以被多个不同的活动复?span lang=EN-US>, <br><v:shape id=_x0000_i1077 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape>      </span>q些zd可以讉K不同的数据但使用相同的方式展C?span lang=EN-US>. <br><v:shape id=_x0000_i1078 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape><br><v:shape id=_x0000_i1079 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape>2</span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> </span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Q如果一个活动可能导致多U状?span lang=EN-US>, </span>?/span><span style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <span lang=EN-US style="COLOR: black">"</span><span lang=EN-US> </span><span style="COLOR: black">成功</span> <span lang=EN-US style="COLOR: black">"</span><span lang=EN-US> <span style="COLOR: black">, </span> <span style="COLOR: black">"</span> </span><span style="COLOR: black">需要重新输?/span> <span lang=EN-US style="COLOR: black">"</span><span lang=EN-US> <span style="COLOR: black">, </span></span><span style="COLOR: black">?/span> <span lang=EN-US style="COLOR: black">"</span><span lang=EN-US> </span><span style="COLOR: black">出现错误</span> <span lang=EN-US style="COLOR: black">"</span><span lang=EN-US> <span style="COLOR: black">, <br><v:shape id=_x0000_i1080 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape>      </span></span><span style="COLOR: black">那么使用<span lang=EN-US>Model</span></span><span lang=EN-US> <span style="COLOR: black">-</span> <span style="COLOR: black">2</span></span><span style="COLOR: black">方式可以很容易的这些状态映到不同的页?span lang=EN-US>. </span></span><span lang=EN-US> <o:p></o:p></span></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <o:p></o:p></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">选择使用的首要原则是<span lang=EN-US>: <o:p></o:p></span></span></p> <p class=MsoNormal style="BACKGROUND: #eeeeee; MARGIN: 0cm 0cm 0pt; WORD-BREAK: break-all; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><v:shape id=_x0000_i1081 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">当代码仅仅是获取q显C数?span lang=EN-US>(</span>q被UCؓ(f)<span lang=EN-US>read</span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <span style="COLOR: black">-</span> <span style="COLOR: black">type code)</span></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">时?span lang=EN-US>Model</span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <span style="COLOR: black">-</span> <span style="COLOR: black">1</span> <span style="COLOR: black"><br><v:shape id=_x0000_i1082 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape><br><v:shape id=_x0000_i1083 style="WIDTH: 24pt; HEIGHT: 24pt" alt="" type="#_x0000_t75"></v:shape></span></span><span style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">只要当模型是由活动或一个处理流E所改变时就应当使用<span lang=EN-US>Model</span></span><span lang=EN-US style="FONT-SIZE: 7.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"> <span style="COLOR: black">-</span> <span style="COLOR: black">2</span> <span style="COLOR: black">. </span> <o:p></o:p></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><o:p> </o:p></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-pagination: widow-orphan" align=left><span lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><br>OGNL</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">?span lang=EN-US>WebWork,XWork</span>中的底层支持lg<span lang=EN-US>.</span>非常强大的函数库<span lang=EN-US>.<o:p></o:p></span></span></p> <p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p> </o:p></span></p> <img src ="http://www.tkk7.com/RiKeR/aggbug/140710.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/RiKeR/" target="_blank">RiKeR</a> 2007-08-29 00:39 <a href="http://www.tkk7.com/RiKeR/articles/webwork.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我做的第二个MVC目的小l(完结)http://www.tkk7.com/RiKeR/articles/140625.htmlRiKeRRiKeRTue, 28 Aug 2007 10:37:00 GMThttp://www.tkk7.com/RiKeR/articles/140625.htmlhttp://www.tkk7.com/RiKeR/comments/140625.htmlhttp://www.tkk7.com/RiKeR/articles/140625.html#Feedback0http://www.tkk7.com/RiKeR/comments/commentRss/140625.htmlhttp://www.tkk7.com/RiKeR/services/trackbacks/140625.html       1?/span>list.jsp==>新徏一?/span>ServletQ?/span>DeleteServlet.javaQ此时仍?/span>doPostҎ(gu)接收Q点?yn)L钮)

package org.riker.news.control;

 

import java.io.IOException;

import java.io.PrintWriter;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import org.riker.news.data.NewsDataBean;

import org.riker.news.logic.NewsLogicBean;

 

public class DetailServlet extends HttpServlet {

 

       /**

        * Constructor of the object.

        */

       public DetailServlet() {

              super();

       }

 

       /**

        * Destruction of the servlet. <br>

        */

       public void destroy() {

              super.destroy(); // Just puts "destroy" string in log

              // Put your code here

       }

 

       /**

        * The doPost method of the servlet. <br>

        *

        * This method is called when a form has its tag value method equals to post.

        *

        * @param request the request send by the client to the server

        * @param response the response send by the server to the client

        * @throws ServletException if an error occurred

        * @throws IOException if an error occurred

        */

       public void doPost(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

 

              String newsid = request.getParameter("newsid");

              NewsDataBean bean = new NewsLogicBean().detail(newsid);

              if(bean!=null) {

                     request.setAttribute("bean",bean);

                     request.getRequestDispatcher("main/detail.jsp").forward(request, response);

              } else {

                     request.getRequestDispatcher("main/error.jsp").forward(request, response);

              }

             

       }

 

       /**

        * Initialization of the servlet. <br>

        *

        * @throws ServletException if an error occure

        */

       public void init() throws ServletException {

              // Put your code here

       }

 

}

 

2?/span>NewsLogicBean.javaQ写公共的,修改relevantQ写deleteNews()Ҏ(gu)

package org.riker.news.logic;

 

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.ArrayList;

import java.util.List;

 

import org.riker.news.comm.DataSource;

import org.riker.news.data.NewsDataBean;

 

public class NewsLogicBean {

       private int allRows;

       private int curPage = 1;

       private int rowPerPage = 5;

       private int allPages;

 

       public List findAll() {

              List list = new ArrayList();

              Statement st = null;

              ResultSet rs = null;

              try {

                     st = DataSource.getConnection().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

                     rs = st.executeQuery("select newsid, newstitle, newscontent, newscount, newsdate from news order by newsdate desc");

                     rs.last();

                     this.allRows = rs.getRow();

                     if(this.allRows%this.rowPerPage==0) {

                            this.allPages = this.allRows/this.rowPerPage;

                     } else {

                            this.allPages = this.allRows/this.rowPerPage + 1;

                     }

                     if(this.curPage == 1) {

                            rs.beforeFirst();

                     } else {

                            rs.absolute((this.curPage - 1) * this.rowPerPage);

                     }

                     int i = 0;

                     while(rs.next() && i < this.rowPerPage) {

                            NewsDataBean bean = new NewsDataBean();

                            bean.setNewsid(rs.getString(1));

                            bean.setNewstitle(rs.getString(2));

                            bean.setNewscontent(rs.getString(3));

                            bean.setNewscount(rs.getString(4));

                            bean.setNewsdate(rs.getString(5));

                            list.add(bean);

                            i++;

                     }

              } catch (SQLException e) {

                     e.printStackTrace();

              }

              return list;

       }

      

       public int insertNews(String newsTitle, String newsContent) {

             

              return modify("insert into news(newstitle, newscontent, newscount, newsdate) values ('"+newsTitle+"', '"+newsContent+"', 0, now()");

 

       }

      

       public int modify(String sql) {

              int result = 0;

              Statement st = null;

              try {

                     st = DataSource.getConnection().createStatement();

                     result = st

                                   .executeUpdate(sql);

 

              } catch (Exception e) {

                     // TODO: handle exception

              } finally {

                     try {

                            st.close();

                     } catch (SQLException e) {

                            // TODO Auto-generated catch block

                            e.printStackTrace();

                     }

              }

             

              return result;

       }

      

       public int deleteId(String newsid) {

              return modify("delete from news where newsid="+newsid);

       }

      

       public int updateNews(String newsid, String newsTitle, String newsContent) {

              return modify("update news set newstitle='"+newsTitle+"', newscontent='"+newsContent+"' where newsid="+newsid);

       }

      

       public NewsDataBean findById(String newsid) {

              NewsDataBean bean = new NewsDataBean();

              Statement st = null;

              ResultSet rs = null;

              try {

                     st = DataSource.getConnection().createStatement();

                     rs = st.executeQuery("select newsid, newstitle, newscontent, newscount, newsdate from news where newsid=" + newsid);

                     rs.last();

                    

                     if(rs.next() ) {

                            bean.setNewsid(rs.getString(1));

                            bean.setNewstitle(rs.getString(2));

                            bean.setNewscontent(rs.getString(3));

                            bean.setNewscount(rs.getString(4));

                            bean.setNewsdate(rs.getString(5));

                     }

              } catch (SQLException e) {

                     e.printStackTrace();

              }

              return bean;

       }

      

       public NewsDataBean detail(String newsid) {

              NewsDataBean bean = new NewsDataBean();

              Statement st = null;

              ResultSet rs = null;

              try {

                     st = DataSource.getConnection().createStatement();

                     st.executeUpdate("update news set newscount=newscount+1 where newsid="+newsid);

                     rs = st.executeQuery("select newsid, newstitle, newscontent, newscount, newsdate from news where newsid=" + newsid);

                     rs.last();

                    

                     if(rs.next() ) {

                            bean.setNewsid(rs.getString(1));

                            bean.setNewstitle(rs.getString(2));

                            bean.setNewscontent(rs.getString(3));

                            bean.setNewscount(rs.getString(4));

                            bean.setNewsdate(rs.getString(5));

                     }

              } catch (SQLException e) {

                     e.printStackTrace();

              }

              return bean;

       }

      

       public static void main(String[] args) {

              List list = new NewsLogicBean().findAll();

              System.out.println(list.size());

       }

 

       public int getCurPage() {

              return curPage;

       }

 

       public void setCurPage(int curPage) {

              this.curPage = curPage;

       }

 

       public int getAllPages() {

              return allPages;

       }

 

       public int getAllRows() {

              return allRows;

       }

 

       public int getRowPerPage() {

              return rowPerPage;

       }

 

}

 

       3?/span>DeleteServlet.javaQ去COPYq来跌{的语

 

句?/span>==>查看新闻详细Q中_(d)新徏DetailServlet.javaQ注意此时ؓ(f)doGetQ?/span>

 

地址栏的提交Q?/span>==>NewsLogicBean.java?/span>COPY上面Insert?/span>public

 

NewsDataBean detail(String newsid) {}==>DetailServlet.java?/span>COPYq来

 

FindByIdServlet.java?/span>NewsDataBean bean = new NewsLogicBean

 

().findById(newsid)Q?/span>modified it==>

package org.riker.news.control;

 

import java.io.IOException;

import java.io.PrintWriter;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import org.riker.news.data.NewsDataBean;

import org.riker.news.logic.NewsLogicBean;

 

public class DetailServlet extends HttpServlet {

 

       /**

        * Constructor of the object.

        */

       public DetailServlet() {

              super();

       }

 

       /**

        * Destruction of the servlet. <br>

        */

       public void destroy() {

              super.destroy(); // Just puts "destroy" string in log

              // Put your code here

       }

 

       /**

        * The doPost method of the servlet. <br>

        *

        * This method is called when a form has its tag value method equals to post.

        *

        * @param request the request send by the client to the server

        * @param response the response send by the server to the client

        * @throws ServletException if an error occurred

        * @throws IOException if an error occurred

        */

       public void doPost(HttpServletRequest request, HttpServletResponse response)

                     throws ServletException, IOException {

 

              String newsid = request.getParameter("newsid");

              NewsDataBean bean = new NewsLogicBean().detail(newsid);

              if(bean!=null) {

                     request.setAttribute("bean",bean);

                     request.getRequestDispatcher("main/detail.jsp").forward(request, response);

              } else {

                     request.getRequestDispatcher("main/error.jsp").forward(request, response);

              }

             

       }

 

       /**

        * Initialization of the servlet. <br>

        *

        * @throws ServletException if an error occure

        */

       public void init() throws ServletException {

              // Put your code here

       }

 

}

 

       4、用insert.jsp复制新徏detail.jspQ引

 

?/span>NewsDataBean PackageQ写标签 <jsp:useBean id="news"

 

class="org.riker.news.logic.NewsLogicBean"/>Q这么做没必要!Q?/span>WHYQ?/span>

因ؓ(f)DetailServlet.java?/span>request.setAttribute("bean",bean);已经攑օ

 

bean了,所以直?/span>NewsDataBean bean = (NewsDataBean)

 

request.getAttribute("bean");注意request.getAttribute("bean")Q然后格

 

式化Q更观些,?/span>JavaScriptq回Q?/span><a href="javascript:history.back

 

()">q回</a>?/span>

 

<%@ page contentType="text/html;charset=GBK" import="org.riker.news.data.*"%>

 

<html>

 <head>

   

    <title></title>

   

 </head>

 <body>

 <%

  NewsDataBean bean = (NewsDataBean)request.getAttribute("bean");

 %>

  <h2 align="center">

  <%=bean.getNewstitle()%>               发布旉Q?/span><%=bean.getNewsdate()%>

  </h2>

  <%=bean.getNewscontent()%>点击的次敎ͼ(x)<%=bean.getNewscount()%>

 <hr>

 

    <a href="javascript:history.back()">q回</a>

 

 

 </div>

 </body>

</html>

 



RiKeR 2007-08-28 18:37 发表评论
]]>
MyEclipse/Eclipse的内存优化与内存不的解军_?/title><link>http://www.tkk7.com/RiKeR/articles/memory.html</link><dc:creator>RiKeR</dc:creator><author>RiKeR</author><pubDate>Sun, 26 Aug 2007 20:40:00 GMT</pubDate><guid>http://www.tkk7.com/RiKeR/articles/memory.html</guid><wfw:comment>http://www.tkk7.com/RiKeR/comments/139678.html</wfw:comment><comments>http://www.tkk7.com/RiKeR/articles/memory.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.tkk7.com/RiKeR/comments/commentRss/139678.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/RiKeR/services/trackbacks/139678.html</trackback:ping><description><![CDATA[     摘要: 使用Eclipse/MyEclipseq行开发的兄弟q来看看Q优化我们进行Y件开发时的内存,亦可解决内存不的问题!  <a href='http://www.tkk7.com/RiKeR/articles/memory.html'>阅读全文</a><img src ="http://www.tkk7.com/RiKeR/aggbug/139678.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/RiKeR/" target="_blank">RiKeR</a> 2007-08-27 04:40 <a href="http://www.tkk7.com/RiKeR/articles/memory.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实战Q做MVC目的小l(l)http://www.tkk7.com/RiKeR/articles/mvc2_2.htmlRiKeRRiKeRSun, 26 Aug 2007 05:57:00 GMThttp://www.tkk7.com/RiKeR/articles/mvc2_2.htmlhttp://www.tkk7.com/RiKeR/comments/139466.htmlhttp://www.tkk7.com/RiKeR/articles/mvc2_2.html#Feedback6http://www.tkk7.com/RiKeR/comments/commentRss/139466.htmlhttp://www.tkk7.com/RiKeR/services/trackbacks/139466.html阅读全文

RiKeR 2007-08-26 13:57 发表评论
]]>
MyEclipse4.0GA+MySQL5.0+JDK5.0+Tomcat4.0+PowerDesigner12.0开发MVC目http://www.tkk7.com/RiKeR/articles/mvc2_1.htmlRiKeRRiKeRSat, 25 Aug 2007 23:08:00 GMThttp://www.tkk7.com/RiKeR/articles/mvc2_1.htmlhttp://www.tkk7.com/RiKeR/comments/139358.htmlhttp://www.tkk7.com/RiKeR/articles/mvc2_1.html#Feedback0http://www.tkk7.com/RiKeR/comments/commentRss/139358.htmlhttp://www.tkk7.com/RiKeR/services/trackbacks/139358.html阅读全文

RiKeR 2007-08-26 07:08 发表评论
]]>
从JAVA到C++快速进?2nd)http://www.tkk7.com/RiKeR/articles/139355.htmlRiKeRRiKeRSat, 25 Aug 2007 19:20:00 GMThttp://www.tkk7.com/RiKeR/articles/139355.htmlhttp://www.tkk7.com/RiKeR/comments/139355.htmlhttp://www.tkk7.com/RiKeR/articles/139355.html#Feedback0http://www.tkk7.com/RiKeR/comments/commentRss/139355.htmlhttp://www.tkk7.com/RiKeR/services/trackbacks/139355.html"In Java, you do not need to declare a method as virtual. Dynamic binding is the default behavior. If you do not want a method to be virtual, you tag it as final"--from <core java2 :volum I>.

java中没昄的和c++中的指针,但是他有地址的概늚.而且所有我们申明的"对象"其实是地址(或叫句柄),l他赋值就是把他指向一个内存单?span lang=EN-US>.当然也可以改变他的指?span lang=EN-US>.其实我们"对象"的赋值操作全是地址在变?span lang=EN-US>,对象q是没有变的.那也许有Z(x)说那L(fng)话不是会(x)产生很多没有"对象"(句柄)的内存区?span lang=EN-US>.是的是会(x)产生,但是java的垃圾收集机制会(x)l我们回收这L(fng)内存"泄漏".所以我们只兛_我们操作的对象就?span lang=EN-US>,其他的我们不用的对象的后事垃圾收集会(x)l我们干.?/span>

明白了在java中的"对象"而非我们c++中理解的对象.而实际上是指?span lang=EN-US>(句柄)那多态当然可以实?span lang=EN-US>.

下面举个"对象"赋?span lang=EN-US>(引用)的例子说?span lang=EN-US>,全是地址在变,而非真的内存单元.

public class Number {
   private int number;

   public Number( int number ) {
      this.number = number;
   }

   public int getNumber() {
      return this.number;
   }

   public void setNumber( int number ) {
      this.number = number;
   }

   public static void main( String[] args ) {
      Number one = new Number( 1 );
      Number two = new Number( 2 );
      System.out.println( "Beginning: " );
      System.out.println( "One = " + one.getNumber() );
      System.out.println( "Two = " + two.getNumber() );

      // Assign two to one
      two = one;//
在这?/span>twoq个句柄的?/span>(x个对象的地址)Ҏ(gu)oneq个句柄的g.从?/span>two?/span>one指同?/span>//?/span>one以前指向的那个内存单?/span>(对象).?/span>two 以前指向的那个对象现在ؓ(f)没有句柄q接的对象了.可能要被垃圾攉
      System.out.println( "\nAfter assigning two to one: " );
      System.out.println( "One = " + one.getNumber() );
      System.out.println( "Two = " + two.getNumber() );

      // Change the value of two
      two.setNumber( 3 );//two
?/span>one指向同一个单?/span>,所以他Ҏ(gu)单元的改?/span>,one能感?/span>.
      System.out.println( "\nAfter modifying two: " );
      System.out.println( "One = " + one.getNumber() );
      System.out.println( "Two = " + two.getNumber() );
   }
}

q行l果:

Beginning:
One = 1
Two = 2

After assigning two to one:
One = 1
Two = 1

After modifying two:
One = 3
Two = 3

下面q行概括ȝ..

1
Q指?span lang=EN-US>

JAVA
语言让编E者无法找到指针来直接讉K内存无指针,q且增添了自动的内存理功能Q从而有效地防止?span lang=EN-US>cQ?span lang=EN-US>c++语言中指针操作失误,如野指针所造成的系l崩溃。但也不是说JAVA没有指针Q虚拟机内部q是使用了指针,只是外h不得使用而已。这有利?span lang=EN-US>JavaE序的安全?span lang=EN-US>

2Q多重?span lang=EN-US>

c++支持多重l承Q这?span lang=EN-US>c++的一个特征,它允许多父类z一个类。尽多重承功能很强,但用复杂,而且?x)引赯多麻烦,~译E序实现它也很不Ҏ(gu)?span lang=EN-US>Java不支持多重承,但允怸个类l承多个接口(extends+implement)Q实Cc++多重l承的功能,又避免了c++中的多重l承实现方式带来的诸多不ѝ?span lang=EN-US>

3Q数据类型及(qing)c?span lang=EN-US>

Java是完全面向对象的语言Q所有函数和变量部必Lcȝ一部分。除了基本数据类型之外,其余的都作ؓ(f)cd象,包括数组。对象将数据和方法结合v来,把它们封装在cMQ这h个对象都可实现自q特点和行为。?span lang=EN-US>c++允许函数和变量定义为全局的。此外,Java中取消了cQ?span lang=EN-US>c++中的l构和联合,消除了不必要的麻烦?span lang=EN-US>

4Q自动内存管?span lang=EN-US>

JavaE序中所有的对象都是?span lang=EN-US>new操作W徏立在内存堆栈上,q个操作W类gc++?span lang=EN-US>new操作W。下面的语句׃个徏立了一个类Read的对象,然后调用该对象的workҎ(gu)Q?span lang=EN-US>

Read rQ?span lang=EN-US>new Read()Q?span lang=EN-US>

r.work()Q?span lang=EN-US>



语句Read rQ?span lang=EN-US>new Read()Q在堆栈l构上徏立了一?span lang=EN-US>Read的实例?span lang=EN-US>Java自动q行无用内存回收操作Q不需要程序员q行删除。?span lang=EN-US>c十十中必ȝE序贝释攑ֆ存资源,增加了程序设计者的负扔?span lang=EN-US>Java中当一个对象不被再用到Ӟ无用内存回收器将l它加上标签以示删除?span lang=EN-US>JAVA里无用内存回收程序是以线E方式在后台q行的,利用I闲旉工作?span lang=EN-US>

5Q操作符重蝲

Java
不支持操作符重蝲。操作符重蝲被认为是c十十的突出特征,?span lang=EN-US>Java中虽然类大体上可以实现这L(fng)功能Q但操作W重载的方便性仍然丢׃不少?span lang=EN-US>Java语言不支持操作符重蝲是ؓ(f)了保?span lang=EN-US>Java语言可能简单?span lang=EN-US>

6Q预处理功能

Java
不支持预处理功能?span lang=EN-US>cQ?span lang=EN-US>c十十在编译过E中都有一个预~泽阶段Q即众所周知的预处理器。预处理器ؓ(f)开发h员提供了方便Q但增加丁编译的复杂性?span lang=EN-US>JAVA虚拟机没有预处理器,但它提供的引入语?span lang=EN-US>(import)?span lang=EN-US>c十十预处理器的功能类伹{?span lang=EN-US>

7. Java不支持缺省函数参敎ͼ?span lang=EN-US>c十十支持

?span lang=EN-US>c中,代码l织在函CQ函数可以访问程序的全局变量?span lang=EN-US>c十十增加了类Q提供了cȝ法,该算法是与类相连的函敎ͼc十十cL法与JavacL法十分相|然而,׃c十十仍然支持cQ所以不能阻?span lang=EN-US>c十十开发h员用函敎ͼl果函数和方法؜合用得程序比较؜乱?span lang=EN-US>

Java没有函数Q作Z个比c十十更纯的面向对象的语言Q?span lang=EN-US>Java开发h员把所有例行程序包括在cMQ事实上Q用Ҏ(gu)实现例行E序可激励开发h员更好地l织~码?span lang=EN-US>

8 字符?span lang=EN-US>

c?span lang=EN-US>c十十不支持字W串变量Q在c?span lang=EN-US>c十十E序中?span lang=EN-US>Nulll止W代表字W串的结束,?span lang=EN-US>Java中字W串是用cd?span lang=EN-US>(strinR?span lang=EN-US>stringBuffer)来实现的Q这些类对象?span lang=EN-US>Java语言的核心,用类对象实现字符串有以下几个优点Q?span lang=EN-US>

(1)在整个系l中建立字符串和讉K字符串元素的Ҏ(gu)是一致的Q?span lang=EN-US>

(2)J3阛_W串cL作ؓ(f)Java语言的一部分定义的,而不是作为外加的延部分Q?span lang=EN-US>

(3)Java字符串执行运行时I,可帮助排除一些运行时发生的错误;

(4)
可对字符串用?span lang=EN-US>”q行q接操作?span lang=EN-US>

9“goto语句

可?span lang=EN-US>”?span lang=EN-US>goto语句?span lang=EN-US>c?span lang=EN-US>c++?span lang=EN-US>“遗物Q它是该语言技术上的合法部分,引用goto语句引v了程序结构的混ؕQ不易理解,goto语句子要用于无条件{UdE序和多l构分支技术。鉴于以q理由,Java不提?span lang=EN-US>goto语句Q它虽然指定goto作ؓ(f)关键字,但不支持它的使用QɽE序z易诅R?span lang=EN-US>

l0Q类型{?span lang=EN-US>

?span lang=EN-US>c?span lang=EN-US>c十十中有时出现数据类型的隐含转换Q这涉?qing)了自动强制cd转换问题。例如,?span lang=EN-US>c十十中可一点D予整型变量,q去掉其数?span lang=EN-US>Java不支?span lang=EN-US>c十十中的自动强制cd转换Q如果需要,必须q序显式进行强制类型{换?span lang=EN-US>

11.异常

JAVA
中的异常机制用于捕获例外事gQ增强系l容错能?span lang=EN-US>

try{Q/可能产生例外的代?span lang=EN-US>

}catch(exceptionType name){

//处理

}

其中exceptionType表示异常cd。?span lang=EN-US>C++则没有如此方便的机制?span lang=EN-US>

 

 



RiKeR 2007-08-26 03:20 发表评论
]]>
从JAVA到C++的区?/title><link>http://www.tkk7.com/RiKeR/articles/139269.html</link><dc:creator>RiKeR</dc:creator><author>RiKeR</author><pubDate>Sat, 25 Aug 2007 07:49:00 GMT</pubDate><guid>http://www.tkk7.com/RiKeR/articles/139269.html</guid><wfw:comment>http://www.tkk7.com/RiKeR/comments/139269.html</wfw:comment><comments>http://www.tkk7.com/RiKeR/articles/139269.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/RiKeR/comments/commentRss/139269.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/RiKeR/services/trackbacks/139269.html</trackback:ping><description><![CDATA[  <p align=left><span>一个完整的<span>C++</span>E序包括头文?span>(.h)</span>和文本文?span>(.cpp).</span>当然两者都不是必须存在?span>.</span>只要有其中之一可?span>.<br><br>1.C++</span>使用<span>#include</span>预处理器指示W来头文g引入而成为我们程序的一部分<span>.</span>它将d指定文g的内?span>,</span>有两U格?span><br>#include <some_file.h><br>#include "my_file.h"<br></span>我们可以把用<span>"<"</span>?span>">"</span>引入的头文g理解成是一个工E或者标准头文g<span>(</span>pȝ提供?span>).</span>查找q程?x)检查预定义的目?span>.<br></span>而用引号括v来则表明该文件是用户提供的头文g<span>.</span>查找从当前文g目录开?span>.<br></span>q个<span>include</span><span>我觉得类g<span>JAVA</span>?span>import</span></span><span><br><br>2.</span>注释Ҏ(gu)一?span><br><br>3.</span>cL件的定义<span>.</span>严格来说q没有类文g的说?span>.</span>我是Z和普通的<span>cpp</span>文g区分开来才q么说的<span>.<span>C++</span></span><span>中类的声明写在头文g?/span><span><br></span><span>声明一个类<span>:</span></span></span></p> <p align=left><span>class test{<br>public:void test1();<br>private:void test2();<br>};</span></p> <p align=left><span><br><br></span><span>注意q里的写?span>.</span>最后那个大括号后面必须要跟一个分L(fng)<span>.JAVA</span>则不?span>.</span>我一开始及(qing)其不适应<span>.<br></span>然后?span>cpp</span>文g中来定义</span></p> <p align=left><span>void test::test1(){<br>cout << "aaa";<br>}<br>void test::test2(){<br>cout << "bb";<br>}</span></p> <p align=left><span><br></span><span>注意<span>:</span>q里大括号后面有没有带分号都没关p?span>.<br><br>4.C++</span>中对函数的调用方法也灉|<span>.</span></span></p> <p align=left><span>test t;<br>t.test2();<br>----------------<br>test* t = new test();<br>t->test2();</span></p> <p align=left><span><br></span><span>其实我还是喜?span>test t = new test();t.test2() <br><br>5.</span>~译器的解析<span>.</span>如果没有引入头文件的话你必须?span>main()</span>函数攑ֈ文g的最下面<span>.</span></span></p> <p align=left><span>void main(){<br>test();<br>}<br>void test(){<br>cout << "aa";<br>} </span></p> <p align=left><span><br><br></span><span>q样写编译器?x)报找不?span>test()</span>Ҏ(gu)?span>.</span>q个?span>C</span>遗留下的问题<span>.</span>解决Ҏ(gu)是引入头文?span>,</span>或者把<span>main</span>写到最?span>.</span>或者在<span>main</span>前面声明一?span>:</span></span></p> <p align=left><span>void test();<br>void main(){<br>test();<br>}<br>void test(){<br>cout << "aa";<br>} </span></p> <p align=left><span><br></span><span>q种做法和引入头文件差不多?span>.<br><br>6.</span><span>析构函数<span>.</span>q个Ҏ(gu)很有用<span>,</span>在类消失的最后一刻自动调用这个种cd的函数来做一些清除操?/span><span><br><br>7.</span>争议比较大的声明指针cd<span>.<br>int* pt=0;<br>int *pt=0;<br></span>q个星号是紧跟着cd呢还是紧跟着变量名呢<span>.</span>׃<span>C++</span>的灵zd太高<span>.</span>q两U写法都没错?span>.</span>但按理来说紧跟着cd应该?x)好一?span>.</span>因ؓ(f)我们是在声明一个指针类型的变量<span>.</span>但如果按下面的写?span>:<br><span>int* pt,pt1;</span><br></span>你说<span>pt1</span>是指针类型吗<span>,</span>{案是不?span>.</span>遇到q种情况p?span>*</span>L(fng)跟着变量名了<span><br><span>int *pt,*pt1;<br><br>耐心点,接下来的是精?br><br>  </p> <p align=left><strong><u><span>main </span></u></strong><strong><u><span>函数<span><br></span></span></u></strong><strong><span>C++</span></strong><span><br>//</span><span>自由动</span><span>的函?span><br>int main( int argc, char* argv[])<br>{<br>    printf( "Hello, world" );<br>}<br><strong>Java</strong><br>// </span>每个函数<span>(</span>Ҏ(gu)<span>)</span>都必L一个类的一部分<span>;</span>?span>java <class></span>q行是一个特定类的主函数?x)被调?span><br>// (</span>因此你可以让每个c都有一?span>main</span>函数Q这在写<span>单元试</span>是很有用<span>)<br>class HelloWorld<br>{<br>    public static void main(String args[])<br>    {<br>        System.out.println( "Hello, World" );<br>    }<br>}</span></span></p> <p align=left> </p> <p align=left><strong><span>cȝ声明</span></strong><span><br></span><span>除了<span> Java </span>不要求用分号外几乎是相同的?span> <br><strong>C++</strong><br>    class Bar {}<span>;</span><br>    <br><strong>Java</strong><br>    class Bar {}<br>    </span></span></p> <p align=left><strong><span>Ҏ(gu)声明</span></strong><span><br>   </span><span>都相同的<span>, </span>除了?span>Java,</span>Ҏ(gu)必须L某个cȝ一部分q且可能<span>public/private/protected </span>作ؓ(f)修饰</span></p> <p align=left><span><br></span><strong><span>构造函数和<span>析构函数</span><span><br></span></span></strong><span>构造函数都是相同的<span> (</span>即类的名?span>), Java</span>没有准确意义上的的析构函?span> </span></span></p> <p align=left><strong><span>静态成员函数和变量</span></strong><span><br></span><span>Ҏ(gu)声明是相同的<span>, </span>?span> Java </span>提供静态初始化块来来初始化静态变?span> (</span>不需?span>在源文g中声?/span><span>): <br>class Foo <br>{<br>    static private int x;<br>    // </span><span>静态初始化?/span><span><br>    { x = 5; }<br>}</span></span></p> <p align=left><strong><span>对象的声?/span></strong><span><br><strong>C++</strong><br>    <span>// </span></span><span>在栈?span><br>    myClass x;</span></span><span><br> <br>    <span>//</span></span><span>或者在堆中<span><br>    myClass *x = new myClass;</span></span><span><br>    <br><strong>Java<br></strong>   // </span><span>L在对堆中声明</span><span><br>    myClass x = new myClass();<br>    </span></p> <p align=left> </p> <p align=left><strong><span>l?span>   </span>?/span></strong><span><br><strong>C++<br></strong>    <span>class Foo : public Bar</span><br>    { ... };<br>    <br><strong>Java<br></strong>    class Foo extends Bar<br>    { ... }<br>    </span></p> <p align=left><strong><span>讉KU别<span> (abstraction barriers)<br>C++</span></span></strong><span><br>   <span>public:<br>        void foo();<br>        void bar();</span><br>    <br><strong>Java<br></strong>    public void foo();<br>    public void bar();<br>    </span></p> <p align=left><strong><span>虚函?/span></strong><span><br><strong>C++</strong><br>    virtual int foo(); // </span><span>或者非虚函数写?span> int foo();<br>    <br><strong>Java</strong><br>    // </span>函数默认的就是虚函数<span>; </span>?span>final</span>关键字防止重?span><br>    int foo(); // </span>或?span>, final int foo();</span></span></p> <p align=left> </p> <p align=left><strong><span>内存理<span><br></span></span></strong><span>大体上是相同?span>--new </span>来分配, 但是<span> Java</span>没有<span> delete</span>Q因为它有垃圑֛收器?span> </span></span></p> <p align=left><strong><span>NULL vs null</span></strong><span><br><strong>C++</strong><br>    // </span><span>初始化一个指针ؓ(f)<span> NULL<br>    <span>int *x = NULL;</span><br>    <br><strong>Java</strong><br>   // </span>~译器将捕获使用未初始化的引?span><br>   //</span>但是如果你因需要初始化一个引用而赋一?span>null</span>Q那么这是无效的<span><br>    myClass x = null;<br>    </span></span></p> <p align=left><strong><span>布尔?/span></strong><span><br>Java</span><span>有一点罗?span>: </span>你必d<span> boolean</span>而不止是<span> bool. <br><strong>C++</strong><br><strong>   bool foo;<br>Java</strong><br>     boolean foo;</span></span></p> <p align=left><strong><span>?span>   </span>?/span></strong><span><br><strong>C++</strong><br>    <strong>const int x = 7;</strong><br>    <br><strong>Java</strong><br>    final int x = 7;<br>    </span></p> <p align=left><strong><span>抛异?/span></strong><span><br></span><span>首先Q?span>Java</span>在编译器强制抛异?span>?/span>如果你的Ҏ(gu)可能?x)抛异常你必需明确报告<span> <br><strong>C++</strong><br>     <span>int foo() throw (IOException)</span><br><strong>Java</strong><br>     int foo() throws IOException</span></span></p> <p align=left><strong><span>?span>     </span>l?/span></strong><span><br><strong>C++</strong><br>    int x[10];<br>    // </span><span>?span><br>    <span>int *x = new x[10];</span><br>    // </span>使用<span> x,</span>然后归还内存<span><br>    <span>delete[] x;</span><br>    <br><strong>Java<br></strong>    int[] x = new int[10];<br>    // </span>使用<span> x, </span>内存有垃圑֛收器回收?span><br>    //</span>或在E序生命周期头归还l系l?span><br>    </span></span></p> <p align=left><strong><span>集合和P代器<span><br>C++</span></span></strong><span><br></span><span>q代器是cȝ成员。范围的开始是<span><</span>容器<span>>.begin(), </span>l束?span> <</span>容器<span>>.end()</span>??span>++ </span>操作W递增<span>,  </span>?span> *</span>操作W访?span> <br>    <span>vector myVec;<br>    for ( vector<int>::iterator itr = myVec.begin();<br>          itr != myVec.end();<br>          ++itr )<br>    {<br>        cout << *itr;<br>    }</span><br>    <br><strong>Java</strong><br></span>q代器只是一个接口?范围的开始是<span> <</span>集合<span>>.iterator</span>Q你必须?span>itr.hasNext()</span>来查看是否到N合尾?使用<span>itr.next()(</span>是在<span>C++</span>中用操作符<span>++ </span>?span>*</span>操作的结?span>)</span>来获得下一个元素?span> <br>    ArrayList myArrayList = new ArrayList();<br>    Iterator itr = myArrayList.iterator();<br>    while ( itr.hasNext() )<br>    {<br>        System.out.println( itr.next() );<br>    }<br> <br>    // </span>?span>, </span>?span>Java 5</span>?span><br>    ArrayList myArrayList = new ArrayList();<br>    for( Object o : myArrayList ) {<br>        System.out.println( o );<br>    }<br>    <br> </span></span></p> <p align=left><span>    <br></span><strong><span>抽象c?/span></strong><span><br><strong>C++<br></strong>    // </span><span>只需要包含一个纯虚函?span><br>    class Bar { public: virtual void foo() = 0; };<br>    <br><strong>Java</strong><br>    // </span>语法上允许显C的声明<span>!<br>    abstract class Bar { public abstract void foo(); }<br> <br>    // </span>或者你也可以声明一个接?span><br>    interface Bar { public void foo(); }<br> <br>    // </span>然后让一个类l承q个接口<span>:<br>    class Chocolate implements Bar<br>    {<br>        public void foo() { /* do something */ }<br>    }<br>    <br></span><strong>引用<span> vs  </span>指针</strong><span><br><strong>C++</strong><br>    //</span>引用不可改变<span>,</span>通过使用指针来获得更多的灉|?span><br>    int bar = 7, qux = 6;<br>    int& foo = bar;<br>    <br><strong>Java</strong><br>    // </span>引用是可变的Q仅存储对象地址<span>; <br>    //</span>没有指针cd<span><br>    myClass x;<br>    x.foo(); // error, x is a null “pointer”<br> <br>    // </span>注意你要L?span> . </span>来访问域<span><br>    <br></span><strong>~?nbsp;?/strong><span><br><strong>C++</strong><br>    // </span>~译<span><br>    <span>g++ foo.cc -o outfile</span><br>    // </span>q行<span><br>    <span>./outfile</span><br>    <br><strong>Java<br></strong>   // </span>~译<span>foo.java</span>文g中的cL<span><classname>.class    javac foo.java <br>    // </span>通过调用<span><classname></span>中的静?span>main</span>Ҏ(gu)来运?span><br>    java <classname><br>    <br></span><strong>?span>   </span>?/strong><span><br></span>两种语言是一L(fng)<span> (// </span>?span> /* */ </span>可以?span>)</span></span></span></span></span></p> <img src ="http://www.tkk7.com/RiKeR/aggbug/139269.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/RiKeR/" target="_blank">RiKeR</a> 2007-08-25 15:49 <a href="http://www.tkk7.com/RiKeR/articles/139269.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL5.0密码忘记的解x?/title><link>http://www.tkk7.com/RiKeR/articles/139199.html</link><dc:creator>RiKeR</dc:creator><author>RiKeR</author><pubDate>Fri, 24 Aug 2007 15:50:00 GMT</pubDate><guid>http://www.tkk7.com/RiKeR/articles/139199.html</guid><wfw:comment>http://www.tkk7.com/RiKeR/comments/139199.html</wfw:comment><comments>http://www.tkk7.com/RiKeR/articles/139199.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/RiKeR/comments/commentRss/139199.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/RiKeR/services/trackbacks/139199.html</trackback:ping><description><![CDATA[     摘要: 在windows下:(x) <br>打开命o(h)行窗口,停止mysql服务Q? Net stop mysql <br>启动mysqlQ一般到mysql的安装\径,扑ֈ mysqld-nt.exe <br>执行Qmysqld-nt --skip-grant-tables <br>另外打开一个命令行H口Q进入相应目录下Q执行mysql <br>>use mysql <br>>update user set password=password("new_pass") where user="root"; <br>>flush privileges; <br>>exit <br>用Ctrl+Alt+DelQ找到mysqld-nt的进E杀掉它Q在重新启动mysql-nt服务Q就可以用新密码d?<br>  <a href='http://www.tkk7.com/RiKeR/articles/139199.html'>阅读全文</a><img src ="http://www.tkk7.com/RiKeR/aggbug/139199.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/RiKeR/" target="_blank">RiKeR</a> 2007-08-24 23:50 <a href="http://www.tkk7.com/RiKeR/articles/139199.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习(fn)~程学习(fn)、Y件开发的指导原则http://www.tkk7.com/RiKeR/articles/principle.htmlRiKeRRiKeRFri, 10 Aug 2007 17:15:00 GMThttp://www.tkk7.com/RiKeR/articles/principle.htmlhttp://www.tkk7.com/RiKeR/comments/135960.htmlhttp://www.tkk7.com/RiKeR/articles/principle.html#Feedback0http://www.tkk7.com/RiKeR/comments/commentRss/135960.htmlhttp://www.tkk7.com/RiKeR/services/trackbacks/135960.html     

       培养兴趣Q兴是最好的老师Q可以参考一些IT史话以及(qing)一些Y件发展历史etc

       慎重选取E序设计语言Q一旦选了Q就心无旁骛地坚持学到底Q创Z些企业的应用程?/strong>

       要脚t实圎ͼ快餐式的学习(fn)不可取,q点非常重要Q时M证质量第一Q引用小学班MQ的话“一步一个脚?#8221;Q遵循发展的规律来学Q@序渐q地d?fn),千万Q绝对!Q不能想三两下马上搞定一门语aQ激情固然总要Q但前述更ؓ(f)大大地重要。工PIDEQ固焉要,Java语言本n才是本质的问?/strong>

       多动手实践,不要夸夸其谈Q动手是最好最快的消化方式Q发现相关的l节的问题,发现一些只有当我们动手L击键盘时才会(x)遇到的种U问?/strong>

       多参考程序代码,汲取营养Q吸收编E思想Q包括设计、架构的思想Q考虑别h是怎么发现问题、分析问题、解决问题的Q思\程Q思想非常非常地重要,q点再怎么都不q分Q这点也是学?fn)编E的一?#8220;捷径”

       加强英文阅读能力Q习(fn)惯成自然Q作?#8220;p高手”的我在这斚w也不能麻痹大意,不能疏忽Q不能放松自己,也要老老实实地掌握一些专业词?/strong>

       求h不如求己Q万不得已才h别hQ或者利用搜索)Q又涉及(qing)到老生常谈的一个问题了“躁”Q读了这么多书,?#8220;智慧”的我非常的不应该在这里犯qL(fng)了!Q碰到问题,自己试独立解决Q认真的好好L考,用尽各种办法Q各U途径Q这个解决问题的q程其实是提高自己能力Q提高自己实力的q程Q我们应该感谢这L(fng)q程

       多读好书Q读一的书,做一的人;何ؓ(f)“好书”Q其实就是适合自己的书Q当然我本h喜欢同一斚w的书多读几本Q这h有掌控感。LSY学长好像说过“适合自己的才是最好的”q话现在是最好的应用?/strong>

       使用合适的工具Q工具和某项新技术、新观念的诞生便是ؓ(f)了世界的更美好一?br>
        以上Z人愚见,q请各位兄弟指教Q?/strong>



RiKeR 2007-08-11 01:15 发表评论
]]>
MW记_1http://www.tkk7.com/RiKeR/articles/135865.htmlRiKeRRiKeRFri, 10 Aug 2007 08:43:00 GMThttp://www.tkk7.com/RiKeR/articles/135865.htmlhttp://www.tkk7.com/RiKeR/comments/135865.htmlhttp://www.tkk7.com/RiKeR/articles/135865.html#Feedback0http://www.tkk7.com/RiKeR/comments/commentRss/135865.htmlhttp://www.tkk7.com/RiKeR/services/trackbacks/135865.html不知不觉自己?/span>JAVA也有1q多了了,q?/span>1q多里我感觉像是过了三q?/span>,大家不要误会(x),我不是说q?/span>1q特别难q?/span>,而是指这1q所学的知识的种cd(qing)数量可以说是我在d学时三年的总量,有h?/span>JAVA隑֭,在我认ؓ(f)JAVAq不难而难在于一直持l的学习(fn)q些如烟v的技?/span>,如果说没有破釜沉舟的军_,我徏议你攑ּ,否则你定然会(x)被这多如牛毛的技术所Ҏ(gu)!

----joahon学长

 

--》关键字Q持l学?fn),破釜沉?/span>

 

·面向对象的特征有哪些斚w

       ·抽象Q过E、数据的抽象?/span>

       ·装Q现实的世界是一个封装的世界Q通过一个受保护的借口来访问,cM圎ͼ装了过E和数据?/span>

       ·l承Q?#8220;一U联l类的层ơ模型,允许和鼓q的重?#8221;Q子cM父类l承Ҏ(gu)和(实例Q变量,q可以根据需要增加方法和变量?/span>

       ·多态:(x)“允许不同cȝ对象对同一事g做出响应”Q参数化、包含多态性?/span>

 

·final?/span>finally?/span>finalize的区?/span>

       ·finalQ?/span>1、修饰类Ӟ表示此类不能被承,也不?x)从其他cȝ承;用了final׃能出?/span>abstractQ否则矛盾;2、修饰方法和变量Ӟ修饰变量时只能初始化一ơ,且不能再修改Q方法的话不能被重蝲?/span>

       ·finallyQ?/span>try{..}catch(..){..}中用来执行Q何的清除操作?/span>

       ·finalizeQ?/span>Garbage Collector在收集垃圾之前,?/span>finalizeҎ(gu)来整理系l资源或者执行相x理操作?/span>finalize?/span>java.lang包中Objectcd义的Ҏ(gu)Q因此被所有的cȝѝ?/span>

 

System.gc() ;

Runtime.getRuntime().gc() ;



RiKeR 2007-08-10 16:43 发表评论
]]>
վ֩ģ壺 ޶߹ۿ| þþþ޹| þƵƷ| þþƷۺ| avһԿ| ޳AVƬ߹ۿ| ҹ뾫Ʒѿ| A޾Ʒ| վ߹ۿ| þþƷۺ| 18ŮˮѸëƬ| þþƷAV͵ | ¼Ƶѿ| ԴƵ| 97| һ岻| Ƭ߹ۿ| ˵avһ2| һaƬþëƬ| ëƬ| պɬɬҹ˽ӰԺ| պƵѲ| ޾Ʒ߳ˮ| re99þ6Ʒ| Ƶ߹ۿվ| 69ʽƵ| ۺһպ| ƷĻƵ| ؼһëƬѿ| þþþ޾Ʒþþþþþ| ִˬƵ | 99ƷƵ| ձƵѸһ18| ްɫɫùۿ| ˻ҳվѹۿȫ| ղþǿѵĿ| | ѹۿƵ| ޶ۺϾþ| ݺ޺ݺŷ2019| 99Ʒѹۿ|