|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak,会见|数据|数据库[会见一个数据库]
在一个其于Struts的使用体系的计划过程当中,最好能在web/暗示层(presentationlayer)和你的商务逻辑类(包括一切数据会见操纵的层)的两头,界说一个Action类,作为小型的适配器(thinadapter)。
以是,你能够先界说一些商务API(businessAPI),这些API就是复杂的Java类。你能够传送一些参数给这些对象,并从这些对象前往一个JavaBean大概JavaBean的汇合。这个Action类卖力挪用这些对象,并把它们前往的值传送给web/暗示层。
一般,你能够为每个你必要挪用的商务办法/商务类API创立一个Action类。幻想情形下,一切的数据库会见代码都被封装进了这些商务API类里,以是Struts其实不晓得你正在利用的耐久层(persistentlayer)(乃至都不晓得你利用了耐久层)。它只必要传送一个主键(Key)大概一个查询参数,然后处置前往的了局bean大概bean汇合。如许,你就能够在其他的使用情况里复用这些商务API类,你还能够对这些自力于Struts或HTTP情况的商务API举行单体测试。
入手下手的时分,最复杂的办法就是计划一个1:1的计划,为你的每个商务API出口(entry-point)界说一个Action类。当你的履历丰厚了今后,你也能够利用DispatchAction组合这些Action类。你乃至能够界说一个复杂的"框架"Action,用来挪用一切的这些商务类。你能够在contrib目次里找到Scaffold计划的ProcessAction,这是一个"框架"Action的完全完成。利用这类计划可使用更少的Action类,但你必需对Struts和MVC框架的底层完成有较深的了解。不关键怕在入手下手的时分界说过量的Action,Struts的设置计划能够赐与你充实的自在在今后重构你的计划,由于你能够天真的改动你的Action类,而不会对使用程序形成影响。
在幻想情形下,商务逻辑层(businesslogiclayer)应当封装一切的数据会见细节,包含数据库毗连的取得。可是,一些使用程序的计划请求挪用者能够从一个DataSource对象来取得数据库毗连。碰到这类情形时,StrutsDataSource办理器可使你在必要的时分设置这些DataSource资本。
StrutsDataSource办理器在Struts设置文件(Struts-config.xml)里界说。这个办理器能够用来分发和设置任何完成了javax.sql.DataSource接口的数据库毗连池(connectionpool)。假如你的DBMS大概容器内置了切合这些请求的毗连池,你能够优先选用它。
[Jakarta的大众毗连池完成-BasicDataSource]
假如你的手头没有毗连池的当地(native)完成,你可使用Jakarta供应的大众毗连池完成[org.apache.commons.dbcp.BasicDataSource],它能够和DataSource办理器"互助"的很好。别的,Struts还在它的util包里包括了一个GenericDataSource类,这也是一个毗连池完成。可是这只是一个十分复杂的完成计划,不保举利用,由于它大概在Struts的今后版本中被BasicDataSource或别的的数据源完成交换失落。
上面是一段Struts-config.xml设置文件中的数据源设置(利用GenericDataSource数据源完成),你能够变动响应的设置以合适你本人的体系。
<!--configurationforGenericDataSourcewrapper-->
<data-sources>
<data-source>
<set-property
property="autoCommit"
value="false"/>
<set-property
property="description"
value="ExampleDataSourceConfiguration"/>
<set-property
property="driverClass"
value="org.postgresql.Driver"/>
<set-property
property="maxCount"
value="4"/>
<set-property
property="minCount"
value="2"/>
<set-property
property="password"
value="mypassword"/>
<set-property
property="url"
value="jdbc:postgresql://localhost/mydatabase"/>
<set-property
property="user"
value="myusername"/>
</data-source>
</data-sources>
利用BasicDataSource数据源完成的设置计划以下:
<data-sources>
<!--configurationforcommonsBasicDataSource-->
<data-sourcetype="org.apache.commons.dbcp.BasicDataSource">
<set-property
property="driverClassName"
value="org.postgresql.Driver"/>
<set-property
property="url"
value="jdbc:postgresql://localhost/mydatabase"/>
<set-property
property="username"
value="me"/>
<set-property
property="password"
value="test"/>
<set-property
property="maxActive"
value="10"/>
<set-property
property="maxWait"
value="5000"/>
<set-property
property="defaultAutoCommit"
value="false"/>
<set-property
property="defaultReadOnly"
value="false"/>
<set-property
property="validationQuery"
value="SELECTCOUNT(*)FROMmarket"/>
</data-source>
</data-sources>
注重,你能够在你的使用体系中界说不止一个数据源,你能够依据必要界说多个数据源,并为它们分离起一个逻辑名(logicalname)。如许做能够给你的使用体系供应更好的平安性和可丈量性(scalability),你还能够界说一个公用于测试的数据源。
设置好DataSource今后,你就能够在你的使用体系中利用这些数据源了。上面这段代码演示了如何在Action类的execute办法中经由过程这些数据源来天生数据库毗连。
publicActionForwardexecute(
ActionMappingmapping,
ActionFormform,
HttpServletRequestrequest,
HttpServletResponseresponse)
throwsException
{
DataSourcedataSource;
Connectioncnn;
try
{
dataSource=getDataSource(request);
cnn=dataSource.getConnection();
//数据毗连已创建了,你能够做你想做的事变了
}
catch(SQLExceptione)
{
getServlet().log("处置数据库毗连",e);
}
finally
{
//在finally块里包括这些代码
//用以包管毗连最初会被封闭
try
{
cnn.close();
}
catch(SQLExceptione)
{
getServlet().log("封闭数据库毗连",e);
}
}
}
注重:假如你利用大众的BasicDataSource,你供应给pingQuery属性的查询语句(假如你设置了话)必需最少要能前往一行纪录。
例子:SELECTCOUNT(*)FROMVALIDTABLE
你能够把VALIDTABLE交换成你的数据库中包括的任何无效的表。
[利用多个数据源]
假如你必要在模块(Module)中利用多于一个的数据源,你能够在设置文件的<data-source>元素里包括一个key属性。
<data-source>
<data-sourcekey="A"type="org.apache.commons.dbcp.BasicDataSource">
…属性设置略,同上…
</data-source>
<data-sourcekey="B"type="org.apache.commons.dbcp.BasicDataSource">
…属性设置略,同上…
</data-source>
</data-source>
你代码里,你能够经由过程这些key取得分歧的数据源。代码以下:
…
try
{
dataSourceA=getDataSource(request,"A");
dataSourceB=getDataSource(request,"B");
…
你能够依据必要为每个模块设置多个数据源。但统一模块里每一个数据源的key属性必需独一,由于Struts模块体系是以每个模块为单元办理定名空间的。
[更多的内容请参考:]
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg24621.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg24709.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg24626.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg24331.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg24102.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg23501.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg23455.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg23375.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg23321.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg23098.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg22713.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg21974.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg21026.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg19338.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg18323.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg14975.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg14914.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg14435.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg01562.html
转换/数据传送(Transformation/DataTransfer)
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg24480.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg23623.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg10195.html
http://www.mail-archive.com/Struts-user@jakarta.apache.org/msg10205.html
[供应静态了局集(dynamicresultset)]
年夜多半的数据库查询了局城市跟你的已利用的ActionForms逐一对应,你只必要把你的查询了局汇合提交给响应的ActionForm就能够了。但偶然候,了局集(ResultSet)里有些字段并非ActionForm的属性,大概更糟。
侥幸的是,Struts的自界说标签集其实不体贴你传送给他们的bean范例。你乃至能够间接输入了局集。可是因为了局会议一向坚持着与数据库的毗连,而且因为它们把一切的数据都间接传送给了JSP,使得页面变得庞杂不胜。那末我们该怎样做呢?
从Struts1.1入手下手,你可使用新增添的ResultSetDynaClass来把你的了局集转换成一个DynaBeans的ArrayList。Struts自界说标签集能够像一样平常的JavaBean一样利用DynaBean的属性。(关于DynaActionForm类更具体的信息,请参考Struts用户手册)。
ResultSetDynaClass类已包括在于BeanUtils.jar包中,以是你如今所要做的,只必要拿出这个工具,完成本人的传送计划吧…………
在性能方面,在windows平台下,.net可能是占强项,要是把.net放在sun开发的操作系统上去运行呢?根本就运行不了,.net对其它操作系统的支持也很弱,性能也可能比不上java。 |
|