jsp+sql鏅鸿兘閬撹矾浜ら氫俊鎭鐞嗙郴缁?鏂囩尞缈昏瘧 - 鐧惧害鏂囧簱 联系客服

发布时间 : 星期四 文章jsp+sql鏅鸿兘閬撹矾浜ら氫俊鎭鐞嗙郴缁?鏂囩尞缈昏瘧 - 鐧惧害鏂囧簱更新完毕开始阅读31c9e445ff00bed5b9f31d74

jdbc:mysql://localhost/test org.gjt.mm.mysql.Driver <%-- insert a row into the database --%> insert counters(page,hitCount) values('<%=request.getRequestURI()%>', 0) <%-- the insert may fail, but the page will continue --%> <%-- update the hit counter --%> update counters set hitCount = hitCount + 1 where page like '<%=request.getRequestURI()%>' <%-- execute the query --%>

This page has been hit <%-- query the hit counter --%> select hitCount from counters where page like '<%=request.getRequestURI()%>' <%-- process only the first row of the query --%> times. The page counter is implemented using the Jakarta Project's DBTags tag library, calling JDBC indirectly.

<%-- close a database connection --%> 我不了解你,但我有一点失望。那看起来比上面那个scriplet例子好要不清晰,并且我不知道是否有HTML设计者会因它而高兴,等等。那里出错了呢?毕竟,我们遵守了人们的建议:我们除去了scriplet,代替为定制标签。

他们没有告诉你关于标签库的是:标签设计是语言设 计。大多数标签库都是在约定的时间内,由程序员写给程序员的;这些标签的语义连接给其它的程序员。此外,还记得模型和描述的分离吗?DBTags并不是很好的支持这种分离。Sql:getColumn标签和jsp:getProperty事件很相似。它将DBTags结果直接发到输出流中。这使得很难在描述想要的表的输出流时不用DBTags。最后,注意在Listing 3和Listing 4的例子中的逻辑的不同。DBTags执行来自JDBC的更新语句的标签表示形式。只有查询才可以被找回。这意味着我们知道有多少行被更新语

发展定制标签库是相当直接的,但是它确实要耗费一些时间和精力。我经常推介标签作者首先用scriptlets建立标签行为的圆型,接下来才把这些scriptlets转换为标签。一个可选的方法是用Allaire的JRun Server Tags(JST),它能使每个你的原始标签库作为一个JSP页面。JST可以在运行时可以转换这些页面为标签,因此,JST技术很明显地 服务于客户端页面。尽管Allaire警告说“建立JST的目的是可移植技术,以便所有J2EE社团的成员都能平衡他们的利益”,但JST现在仅仅在JRun中可用。时间将会证明JST是否会成为开发标记更通用的工具。与此同时,我们发现scriptlet为开发标记的业务逻辑奠定了良好的基础;逻辑经调试后,我们把它迁移成为标记处理程序类。 句所更新。因此,我们转换Update和insert语句;我们常常尝试插入一个新的记录,强迫它忽略任何错误,并在接下来执行更新。

公平地看待DBTags标签库,他并不是一个对程序员有害的标签库。除开对更新量的不足,这代码提供了一个相当优秀的JDBC计划。潜藏的问题人仍然存在;

标签提供的功能少于直接转换JDBC包。不同于隐藏某些异常处理,标签库不真的提供任何从scriptlets的提取。他确实不帮助从功能中分离描述。

因此,真正的问题不在于是使用scriptlet还是使用标记;这种问题不是分离功能和表示的问题的原因,而是结果。解决方案是要以适当的说明级别上为表示页面的作者提供更高级别的功能。认为标记优于scriptlet的原因在于:根据定义,scriptlet 是编程,而标记可以表示高级概念。

2.5 对表示页面隐藏JDBC

将JDBC同JSP技术集成时,我们希望对表示作者尽可能多的隐藏该集成。在我们显现数据库概念的地方,我们希望在恰当的抽象级别上显现这些概念。这一方法引出了我们的下一个示例。

在清单5中的示例中,我们对表示页面隐藏了JDBC集成。(这个页面的 实际版本位于JavaServer Pages Developers Guide Web站点) 清单5 隐藏了JDBC的JSP页面 JDBC hidden example

This page has been hit 被包含的hitCounter.jsp文件负责设置环境。内容可以是scriptlet、标记或只是一个taglib伪指令;只要是为表示页面建立预期环境的都可以作为内容。如果您愿意,您可以把getProperty操作替换成定制标记;例如:

This page has been hit times. 如前所述,这些点击计数器示例纯粹用作说明;每个页面都执行这样的数据库操作将会是不必要的开销。上面这个示例说明事实上您希望以何种方式显现点击计数器。通过把它隐藏在定制标记里,我们就把该实现彻底隐藏了起来。现在我们可以聚集点击计数运行时信息,并周期性的更新数据库(比如,在每次会话结束时)。甚至连存储方式(数据库或是别的)也对表示页面作者隐藏了。这正是我们在DevTech实现点击计数器的方式:我们利用bean类实现点击计数器模式行为。标记把该行为结合到了我们的页面里。

2.6 集成JavaBean组件

到目前为止,示例一直都相当简单,但大多数数据库操作都比这些简单的查询和更新要复杂。因此,既然我们已经讨论了把JDBC用于JSP页面的一些基本原则,就让我们用一个略微复杂些但肯定更加通用的一类应用来结束这篇文章。

这一部分的示例(下面清单9)将指出一种方法以支持Web站点上访问者提供的内容。换句话说,我们希望允许访问者读取与某一URI关联的数据库内容并撰写额外的内容。这样的内容在现在的Web站点上相当常见。同样的基本部分可用于构造:

? ? ? ?

评论页面,例如在Amazon.com找到的那些页面 链接页面 公告牌 Wikiweb

通过由不同技术背景的设计人员编写,本例中JSP组件稍微再精细些的版本就可以实现看上去截然不同的Web页面。这些页面看上去的唯一的相同之处就是用于访问者撰写内容。

我们的annotation(注释)示例使用HTML表单。HTML表单用于JSP时,使用属性映射到表单域的bean变得方便了。这使setProperty标记可以变戏法: 清单6 映射到表单的Bean实例 <%-- setup a bean instance that matches our form --%>