??xml version="1.0" encoding="utf-8" standalone="yes"?>狠狠久久伊人,国产黄色免费在线观看,狠狠色狠色综合曰曰http://www.aygfsteel.com/Bug/记录...zh-cnWed, 18 Jun 2025 18:10:41 GMTWed, 18 Jun 2025 18:10:41 GMT60DDL,DML,DCL,TCLhttp://www.aygfsteel.com/Bug/archive/2009/11/23/303356.htmlseanchangseanchangMon, 23 Nov 2009 08:35:00 GMThttp://www.aygfsteel.com/Bug/archive/2009/11/23/303356.htmlhttp://www.aygfsteel.com/Bug/comments/303356.htmlhttp://www.aygfsteel.com/Bug/archive/2009/11/23/303356.html#Feedback0http://www.aygfsteel.com/Bug/comments/commentRss/303356.htmlhttp://www.aygfsteel.com/Bug/services/trackbacks/303356.html
1.DDL QData Definition Language Q数据库定义语言 statements are used to define the database structure or schema.
DDL不需要commit.
CREATE
ALTER
DROP
TRUNCATE
COMMENT
RENAME

2.DML QData Manipulation LanguageQ数据操U语a statements are used for managing data within schema objects.
需要commit.
SELECT
INSERT
UPDATE
DELETE
MERGE
CALL
EXPLAIN PLAN
LOCK TABLE

3.DCLQData Control LanguageQ数据库控制语言  授权Q角色控制等
GRANT 授权
REVOKE 取消授权

4.TCLQTransaction Control LanguageQ事务控制语a
SAVEPOINT 讄保存?
ROLLBACK  回滚
SET TRANSACTION

seanchang 2009-11-23 16:35 发表评论
]]>
Spring原理http://www.aygfsteel.com/Bug/archive/2009/11/20/303068.htmlseanchangseanchangFri, 20 Nov 2009 08:24:00 GMThttp://www.aygfsteel.com/Bug/archive/2009/11/20/303068.htmlhttp://www.aygfsteel.com/Bug/comments/303068.htmlhttp://www.aygfsteel.com/Bug/archive/2009/11/20/303068.html#Feedback0http://www.aygfsteel.com/Bug/comments/commentRss/303068.htmlhttp://www.aygfsteel.com/Bug/services/trackbacks/303068.htmlspring的最大作用ioc/di,类与类的依赖关pd在配|文件中Q?br /> E序在运行时Ҏ配置文g动态加载依赖的c,
降低的类与类之间的藕合度?br /> 它的原理是在applicationContext.xml加入bean标签Q?br /> 在bean标签中通过class属性说明具体类名,
通过property标签说明该类的属性名Q?br /> 通过constructor-args说明构造子的参数?br /> 其一切都是返,当通过applicationContext.getBean("id名称")得到一个类实例Ӟ
是以bean标签的类名、属性名、构造子的参Cؓ准,
通过反射实例对象Q唤起对象的setҎ讄属性|
通过构造子的newInstance实例化得到对象?br /> 正因为spring一切都是反,反射比直接调用的处理速度慢,
所以这也是spring的一个问题?/p>

springW二大作用就是aopQ其机理来自于代理模式,
代理模式有三个角色分别是通用接口、代理、真实对象代理?br /> 真实对象实现的是同一接口Q将真实对象作ؓ代理的一个属性,
向客L公开的是代理Q当客户端调用代理的ҎӞ
代理扑ֈ真实对象Q调用真实对象方法,
在调用之前之后提供相关的服务Q如事务、安全、日志?br /> 其名U分别是代理、真实对象、装备、关切点、连接点?


主要是可扩展性。如果现在你的客戯得访问效率太低,E序不用hibernate了,
要用jdbcQ比?UserDaoHibernateImpl(原来),现在修改为UserDaoJdbcImpl.
q个时候你要怎么办?直接MҎ代码Q你原来不用接口q行引用Q肯定是new 了一?
UserDaoHibernateImpl出来Q如果多个地斚w用到Q你不但要去修改源代码,q要修改很多地方Q?
而是用spring的依赖注入呢Q你只需要修改下配置Q把bean的class属性给修改下,换下配置什么的
可以了Q降低后期维护成?br />
因ؓweb应用大了QservletClass多了Q所以用到struts来减L们的负担Q得模块更清晰Q和更利于复用和理?
因ؓweb应用大了Q表、字D多了,写sql语句会写MhQ且比较Ҏ出错Q所以用到hibernate来获得它l我们的面向对象操作数据库的服务Q省M写n多sql的烦心事Q且使我们的E序更加面向对象
因ؓ逻辑和组件模块多了,因ؓ层多了,于是我们考虑整一个springQ一来包装hibernateQ提供更便的服务接口及更易于理的事务服务,二来代理了我们的服务层和dao层,使得q两层与实际的控制单元的关系变成ioc框架来管理,M一方的修改都不会牵扯到双方都要修改的问题。Mspring是把杂qdao、service、actionl串了v来,变成了一个个可在E序外控制的模块Q其可以自ql合在一P卛_获得惌的服务也不用烦他们之间的关系?br />
CopyRight@BUG

seanchang 2009-11-20 16:24 发表评论
]]>
Struts framework的工作原理和lghttp://www.aygfsteel.com/Bug/archive/2009/11/19/302992.htmlseanchangseanchangThu, 19 Nov 2009 14:59:00 GMThttp://www.aygfsteel.com/Bug/archive/2009/11/19/302992.htmlhttp://www.aygfsteel.com/Bug/comments/302992.htmlhttp://www.aygfsteel.com/Bug/archive/2009/11/19/302992.html#Feedback0http://www.aygfsteel.com/Bug/comments/commentRss/302992.htmlhttp://www.aygfsteel.com/Bug/services/trackbacks/302992.htmlStruts framework的工作原理和lg

 

对于Struts 如何控制、处理客戯求,让我们通过对struts的四个核心组件介l来具体说明。这几个lg是QActionServlet。Action ClassesQAction MappingQ此处包括ActionForwardQ,ActionFrom Bean?/p>

 

Struts ActionServlet控制器对?/p>

 

       ActionServletl承自javax.servlet.http.HttpServletc,其在Struts framework中扮演的角色是中心控制器。它提供一个中心位|来处理全部的终端请求。控制器ActionServlet主要负责HTTP的客戯求信息组装后Q根据配|文件的指定描述Q{发到适当的处理器?/p>

 

       按照Servelt的标准,所有得Servlet必须在web配置文gQweb.xmlQ声明。同PActoinServlet必须在Web Application配置文gQweb.xmlQ中描述Q有关配|信息如下?/p>

 

 

<servlet>

<servlet-name>action</servlet-name>

<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

</servlet>

 

全部的请求URI?.do的模式存在ƈ映射到这个servletQ其配置如下Q?/p>

 

 1<servlet-mapping>
 2
 3 
 4
 5<servlet-name>action</servlet-name>
 6
 7 
 8
 9<url-pattern>*.do</url-pattern>
10
11 
12
13</servlet-mapping>
14
15

 

一个该模式的请求URIW合如下格式Q?

 

              http://www.my_site_name.com/mycontext/actionName.do

 
中心控制器ؓ所有的表示层请求提供了一个集中的讉K炏V这个控制器提供的抽象概念减M开发者徏立公共应用系l服务的困难Q如理视图、会话及表单数据。它也提供一个通用机制如错误及异常处理Q导航,国际化,数据验证Q数据{换等?/p>


当用户向服务器端提交h的时候,实际上信息是首先发送到控制器ActionServletQ一旦控制器获得了请求,其就会将h信息传交l一些辅助类Qhelp classesQ处理。这些辅助类知道如何d理与h信息所对应的业务操作。在Struts中,q个辅助cd是org.apache.struts.action.Action。通常开发者需要自q承Acitonc,从而实现自qAction实例?/p>

 

Struts Action Classes

 

       ActionServlet把全部提交的h都被控制器委托到RequestProcessor对象。RequestProcessor使用struts-config.xml文g查请求URI扑ֈ动作Action标示W?/p>

 

一个Action cȝ角色Q就像客戯求动作和业务逻辑处理之间的一个适配器(AdaptorQ,其功能就是将h与业务逻辑分开。这L分离Q得客戯求和ActioncM间可以有多个点对点的映射。而且Actionc通常q提供了其它的辅助功能,比如Q认证(authorizationQ、日志(loggingQ和数据验证QvalidationQ?/p>

 

1public ActionForward execute(ActionMapping mapping,ActionFormform,javax.servlet.ServletRequestrequest,javax.servlet.ServletResponse response)throwsjava.io.IOException,javax.servlet.ServletException
2
3

 
       Action最为常用的是executeQ)Ҏ。(注意Q以前的performҎ在struts1.1中已l不再支持)Q还有一个executeQ)ҎQ请参考apidocQ在此不在说明?/p>

 

       当Controller收到客户的请求的时候,在将h转移C个Action实例Ӟ如果q个实例不存在,控制器会首先创徏Q然后会调用q个Action实例的executeQ)Ҏ。Struts Framework为应用系l中的每一个Actioncd创徏一个实例。因为所有的用户都用这一个实例,所以你必须定你的Action c运行在一个多U程的环境中。下图显CZ一个executeQ)Ҏ如何被访问:


Action实例的execute()Ҏ

 

注意Q客戯q承的Action子类Q必重写executeQ)ҎQ因为Actioncd默认情况下是q回null的?/p>

 

Struts Action Mapping

 

上面讲到了一个客戯求是如何被控制器转发和处理的Q但是,控制器如何知道什么样的信息{发到什么样的ActioncdQ这需要一些与动作和请求信息相对应的映配|说明。在struts 中,q些配置映射信息是存储在特定的XML文gQ比如struts-config.xmlQ?nbsp;

 

q些配置信息在系l启动的时候被d内存Q供struts framework在运行期间用。在内存中,每一?lt;action>元素都与org.apache.struts.action.ActionMappingcȝ一个实例对应。下表就昄了一个登陆的配置映射?/p>

 

 1<action-mappings>
 2
 3 
 4
 5  <action  path="/logonAction"
 6
 7 
 8
 9           type="com.test.LogonAction"
10
11 
12
13           name="LogonForm"
14
15 
16
17           scope="request"
18
19 
20
21           input="logoncheck.jsp"
22
23 
24
25validate="false">
26
27 
28
29<forward name="welcome" path="/welcome.jsp"/>
30
31 
32
33<forward name="failure" path="/logon_failure.jsp "/>
34
35 
36
37</action>
38
39 
40
41</action-mappings>
42
43 
44
45
46 
47
48 
49
50 
51
52
53<form-beans>
54
55 
56
57  <form-bean  name="LoginForm"
58
59 
60
61type="com.test.LoginForm"/>
62
63 
64
65</form-beans>
66
67

 

上面的配|表C:当可以通过/logonAction.doQ此处假N|的控制器映ؓ*.doQ提交请求信息的时候,控制器将信息委托com.test.LogonAction处理。调用LogonAction实例的execute()Ҏ。同时将Mapping实例和所对应的LogonForm Bean信息传入。其中name=LogonFormQ用的form-bean元素所声明的ActionForm Bean。有关form-bean的申明如下显C?/p>

使用ActionForwardD

元素<forward>则表CZ当Action实例的execute()Ҏq行完毕或,控制器根据Mapping可将响应信息转到适当的地斏V如上面现实Q如果客L陆成功,则调用welcome forwardQ将成功信息q回?welcome.jsp面。在你的execute()Ҏ的结֏以用下面的实例代码而返回welcome forward。当然你的welcome forward必须在action元素属性中定义Q正如上面所声明的那栗?/p>

 

return (mapping.findForward("welcome"));


       ActionForward对象是配|对象。这些配|对象拥有独一无二的标识以允许它们按照有意义的名称?#8220;success”Q?#8220;failure”{来索。ActionForward对象装了向前进的URL路径且被h处理器用于识别目标视图。ActionForward对象建立?lt;forward>元素位于struts-config.xml。下面是一个Struts?lt;forward>元素例子Q属?lt;action>元素范围?/p>

 

 1<action path="/editCustomerProfile"
 2
 3type="packageName.EditCustomerProfileAction"
 4
 5name="customerProfileForm" scope="request">
 6
 7<forward name="success" path="/MainMenu.jsp"/>
 8
 9<forward name="failure" path="/CustomerService.jsp"/>
10
11</action>
12
13

 

 

       Z执行h处理器的execute(…)Ҏ的结果,当传递一个值匹配指定于<forward>元素中name属性的值的时候,下一个视囑֏以在execute(…)Ҏ中被开发者用方便的方法org.apache.struts.action.ActionMapping.findForward(…)选择。ActionMapping.findForward(…)Ҏ既从它的本地范围又从全局范围提供一个ActionForward对象Q该对象q回至RequestProcessor以RequestDispatcher.forward(…)或response.sendRedirect(…)调用下一个视图。当<forward>元素有redirect=“false”属性或redirect属性不存在的时候,RequestDispatcher.forward(…)被执行;当redirect=“true”是,调用sendRedirect(…)Ҏ。下例D例说明了redirect属性的用法Q?/p>

 

        

1<forward name="success" path="/Catalog.jsp" redirect="true"/>

 

 

如果redirect=true, URL建立?contextPath/path因ؓHttpServletResponse.sendRedirect(…)中解释URL采用”/”开头相对于servlet容器根目录?/p>

 

如果redirect=false, URI建立?path因ؓServletContext.getRequestDisptacher(…)采用虚拟目录相关URL?/p>

 


 


在此E稍说一下有关global-forwards的概c其在配|文件中描述了整个应用系l可以用的ActionForwardQ而不是仅仅是一个特定的Action?/p>

 

1<global-forwards>
2
3    <forward name="logout" path="/logout.do"/>
4
5<forward name="error"  path="/error.jsp"/>
6
7  </global-forwards>

 


Struts ActionForm Bean捕获表单数据

 

在上面讲解ActionServletQAction Classes和Action Mapping的时候,我们都提CActionForm Bean的概c一个应用系l的消息转移Q或者说状态{U)的非持久性数据存储,是由ActionForm Bean的负责保持的?/p>

 

       ActionFormz的对象用于保存请求对象的参数Q因此它们和用户紧密联系?/p>

 

       一个ActionFormc被RequestProcessor建立。这是发生在已完成向前进C个URLQ该URL为映到控制器servlet而不是JSP和相应的动作映射指定的表单属性的。在q个情况下,如果没有在指定的zd范围内找刎ͼRequestProcessor尝试寻扑֏能导致创Z个新ActionForm对象的表单bean。该ActionForm对象在指定的zd范围内被?lt;action>元素的name属性找刎ͼ

 

RequestProcessor随后重新安排表单属性,用请求时参数填充表单Q随卌用表单对象的validate(…)Ҏ以行服务器端用戯入验证。仅当ActionMapping对象中validate属性被设ؓtrueӞvalidate(…)Ҏ被调用;q就是默认的行ؓ。request.getParameterValues(parameterName)被用于得C个String[]对象Q它用来表单填充Q验证的l果应该是一个ActionErrors对象Q用org.apache.struts.taglib.html.ErrorsTag来显C验证错误给用户。ActionForm也可以被用于为当前用户保存即被一个视囑ּ用的中间模型状态?br />

当一个表单对象被RequestProcessor扑ֈQ它被传递到h处理器的execute(…)Ҏ。一个ActionForm对象也可以被h处理器徏立。表单对象徏立目的是提供中间模型状态给使用h范围JSPQ这确保对象不会在有效性过期后仍然存在。默认的Q所有的表单都被保存Z话范围。会话中表单对象q有效性的存在可能D费内存Q同LQ请求处理器必须跟踪保存在会话中的表单对象的生命周期。一个好的捕莯单数据的实践是ؓ横跨多用户交互的相关表单用一个单独的表单bean。表单bean也可以在反馈的时候用来储存能够被自定义标{改变的中间模型状态。在视图中标{法避免结合Java代码Q因此要成一个好的Q务划分,web生l主要处理标志,而应用开发组主要处理Java代码。标{֛素退问中间模型状态的逻辑Q当讉K嵌套的对象或当通过聚集列D时这个逻辑可能很复杂?/p>

 

注意Q在struts1.1中,ActionForm的校验功能,逐渐被剥d来(当然依然可以使用Q。用了validator frameworkҎ个应用系l的表单数据验证q行l一理。相信信息请参考:http://home.earthlink.net/~dwinterfeldt

 

在ActionForm的用中QStruts提倡用到值对象(Value ObjectQ。这样将客户或开发h员,Ҏ据状态与对象状态能够更加清晰的理解和用?/p>

对于每一个客戯求,Struts framework在处理ActionForm的时候,一般需要经历如下几个步骤:

       Q1Q检查Action的映,定Action中已l配|了对ActionForm的映?/p>

       Q2Q根据name属性,查找form bean的配|信?/p>

       Q3Q检查Action的formbean的用范_定在此范围下,是否已经有此form bean的实例?/p>

       Q4Q假如当前范围下Q已l存在了此form bean的实例,而是对当前请求来_是同一U类型的话,那么重用?/p>

       Q5Q否则,重新构Z个form bean的实?/p>

       Q6Qform bean的reset()Ҏ备调?/p>

       Q7Q调用对应的setterҎQ对状态属性赋?/p>

       Q8Q如果validatede的属性北讄为trueQ那么就调用form bean的validate()Ҏ?/p>

        Q?Q如果validateQ)Ҏ没有q回M错误Q控制器ActionForm作ؓ参数Q传lAction实例的executeQ)Ҏq执行?/p>


注意Q直接从ActionFromcȝ承的reset()和validate()ҎQƈ不能实现什么处理功能,所以有必要自己重新覆盖?/p>

Struts的其他组?/p>

       Struts framework本n提供了很多可扩展的组件或sub frameworkQ方便的开发h员在其构架上构徏web层的应用pȝ。比如upload,collections ,logging{等。让我们来看看两个比较重要的lgQvalidationg framework和struts taglib。有兛_他组件请参考Struts用户手册Q?a >http://jakarta.apache.org/struts/userGuideQ?/p>

Validation Framework for Struts

在struts1.1中,新增了validation framework。增加了对form数据提交的验证。将原本需要在ActionFrom Bean的validateQ)q行的验证通过配置文g的描q进行验证?/p>

有关其详l信息,请参考http://home.earthlink.net/~dwinterfeldt 。个人徏议对于小型应用系l可以采用这U配|方式,但是对于应用pȝ中有大量web层表单应用的pȝQƈ且业务需求变动比较大的,使用validation framework 可能会加重开发难度、系l维护难度。可以借鉴validation framework的Javascript Validator Tag?

 
Struts TagLib

       struts提供了一l可扩展的自定义标签库(TagLibQ,可以化创建用L面的q程。目前包括:Bean TagsQHTML TagsQLogic TagsQNested TagsQTemplate Tags q几个Taglib。有关Struts Taglib的结构和使用Q可以参考前面有关Cutomer Tag Lib的介l,有关赯l资料,请参?/p>

BeanUtils

       q个lg的全U是Bean Introspection Utilites。是属于Jakarta Commons目l的。主要是帮助构徏javabean的属性操作的Qgetter,setterQ,已经提供一U动态定义和讉Kbean的属性。有兌l信息,请参考?/p>

http://jakarta.apache.org/commons/beanutils.html

       如果各位对这斚w有很兴趣Q可以参考一些有关java反射QReflectioQ方面的资料?/p>

Collections

       q个lg主要是提供了一些集合或列表对象Q在原有的java collections framework的基上进行了扩展。详l资料请参考:

http://jakarta.apache.org/commons/collections.html 以及

http://cvs.apache.org/viewcvs/~checkout~/jakarta-commons/collections/STATUS.html?rev=1.13

 Digester

       q个lg译成中文的意思是“汇编”。其主要功能是根据xml配置文gQ初始化pȝ的一些javacd象。Digester帮助你指定XML与java对象之间映射模型Q而且允许客户话定制映规则(rulesQ。详l资料请参?

本文来自CSDN博客Q{载请标明出处Qhttp://blog.csdn.net/fasttalk/archive/2005/03/19/323752.aspx



seanchang 2009-11-19 22:59 发表评论
]]>
վ֩ģ壺 | ˮ| ɽ| | | | | | Դ| | | | | Ϫ| | | ͩ| | | | ʡ| | ɽ| Զ| ʯɽ| | տ| ̨| Ȫ| | | | | | Ϫ| | ϼ| | ֺ| | Ϸ|