若天明 发表于 2015-1-18 11:39:27

JAVA网页设计Struts HOW-TO 系列 之 数据库会见

由于这些智能化家电的市场需求没有预期的高,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供应的大众毗连池完成,它能够和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。

小女巫 发表于 2015-1-21 12:23:36

是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言

蒙在股里 发表于 2015-1-28 12:55:27

多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。

莫相离 发表于 2015-2-1 19:51:39

是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能

愤怒的大鸟 发表于 2015-2-7 14:42:22

Java是一种计算机编程语言,拥有跨平台、面向对java

飘飘悠悠 发表于 2015-2-9 07:48:21

是一种将安全性(Security)列为第一优先考虑的语言

第二个灵魂 发表于 2015-2-10 12:15:13

象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。

因胸联盟 发表于 2015-2-11 07:48:45

不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。

老尸 发表于 2015-3-1 23:40:05

《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。

飘灵儿 发表于 2015-3-11 01:02:45

有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)

深爱那片海 发表于 2015-3-17 17:10:44

是一种使用者不需花费很多时间学习的语言

小妖女 发表于 2015-3-24 13:05:54

所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。

兰色精灵 发表于 2015-3-27 19:32:36

所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。

再现理想 发表于 2015-3-30 14:46:01

接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。

山那边是海 发表于 2015-4-11 12:16:36

是一种语言,用以产生「小应用程序(Applet(s))

谁可相欹 发表于 2015-4-11 20:29:00

是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言

柔情似水 发表于 2015-4-19 14:00:29

一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从

冷月葬花魂 发表于 2015-4-23 22:14:26

Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)

admin 发表于 2015-5-5 17:40:39

所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。

精灵巫婆 发表于 2015-6-9 16:06:31

是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
页: [1]
查看完整版本: JAVA网页设计Struts HOW-TO 系列 之 数据库会见