快速业务通道

Struts框架之构建Model组件 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
Action类都扩展org.apache.struts.action.Action类,并且覆盖类中定义的某一个perform()方法。有两个perform()方法:

处理非HTTP(一般的)请求:

public ActionForward perform(ActionMapping action,AcionForm form,ServletRequest request,

ServletResponse response)

throws IOException,ServletException

处理HTTP请求:

public ActionForward perform(ActionMapping action,AcionForm form,HttpServletRequest request,

HttpServletResponse response)

throws IOException,ServletException

Action类必须以"线程安全"的方式进行编程,因为控制器会令多个同时发生的请求共享同一个实例,相应的,在设计Action类时就需要注意以下几点:

不能使用实例或静态变量存储特定请求的状态信息,它们会在同一个操作中共享跨越请求的全局资源

如果要访问的资源(如JavaBean和会话变量)在并行访问时需要进行保护,那么访问就要进行同步

Struts框架之构建Model组件(4)

时间:2011-01-16

Action类的方法

除了perform()方法外,还有以下方法:

可以获得或设置与请求相关联的区域:

public Locale getLocale(HttpServletRequest request)

public void setLocale(HttpServletRequest request,Locale locale)

为应用程序获得消息资源:

public MessageResources getResources()

检查用户是否点击表单上的"取消"键,如果是,将返回true:

public Boolean isCancelled(HttpServletRequest request)

当应用程序发生错误时,Action类能够使用下面方法存储错误信息:

public void saveErrors(HttpServletRequest request,ActionErrors errors)

ActionError实例被用来存储错误信息,这个方法在错误关键字下的请求属性列表中存储ActionError对象。

5、访问关系数据库

很多web应用程序利用一个关系数据库(通过一个JDBC driver访问)来保存应用程序相关的永久数据。 其它应用程序则使用Entity EJBs来实现这个目的,他们委派EJBs自己来决定怎样维护永久状态。如果我们是使用EJBs来实现这个目的,遵照EJB规范中描述的客户端设计模式。

对于基于直接数据库访问的web应用程序,一个普通的设计问题是当需要访问低层数据库时怎样产生一个适当的JDBC连接对象。解决这个问题有方法如下:

创建或得到一个允许一组数据库连接被多个用户共享的ConnectionPool类。Struts(当前)没有包括这样的一个类,但是有很多这样的类可以得到。

当应用程序初始化时,在应用程序展开(deployment)描述符中定义一个有一个"启动时加载"值的servlet。我们将把这个servlet叫做 启动 servlet。在大多数情况下,这个servlet不需要处理任何的请求,所以没有一个<servlet-mapping> 会指向它。

在启动servlet的 init() 方法中,配置并初始化一个ConnectionPool类的实例,将其保存为一个servlet context属性(从JSP的观点看等同于一个application范围的bean)。通常基于传递给启动servlet初始化参数来配置联接缓冲池是很方便的。

在启动servlet的 destroy() 方法中,包含了释放联接缓冲池所打开的联接的逻辑。这个方法将在servlet容器结束这个应用程序的时候被调用。

当 Action 类需要调用一个需要数据库联接的商业逻辑bean中的方法(例如"insert a new customer")时,将执行下面的步骤:

1=为这个web应用程序从servelt context属性中得到一个联接缓冲池对象。

2=调用联接缓冲池对象的 open() 方法来得到一个在 Action 类调用中使用的联接。

3=调用商业逻辑bean中合适的方法,将数据库联接对象作为一个参数传递给它。

4=调用分配的联接中的 close() 方法,这将引起这个联接为了以后其它请求的重用被返回到缓冲池中。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号