发信人: cybercell()
整理人: zjxyz(2002-09-10 10:29:05), 站内信件
|
很少来这个论坛,来了也不会回答问题。只是在这里告诉大家。可以在
www.theserverside.com上有一本书,介绍了struts的使用,书还没有写完,主要围绕一个电子商务的例子构建,很多代码写的很好。另外又推出了一本JMX的书,java的出版物现在真是直追ms的,不知道国内是否有人来翻译。
struts的介绍:
Struts,由jakarta小组开发的一个应用于Web开发的MVC2框架,使用它可以完美的将数据,业务逻辑和表示层分开来。本文介绍了Struts的结构、开发方法,并给出一个简单的例子。
Struts简介
Struts是使用JAVA Servlet 和JavaServerPages技术的一种Model-View-Controller(以下简称MVC)实现。它将MVC设计模式的概念映射到WEB应用程序的组件和概念中,用图形如下所示(此图来源于Struts的users_guide文档):
Struts的运作流程
因为Struts也是MVC的一种实现,所以复杂性和分层也同样存在。但是它跟传统的MVC模式比起来已经变得简单地多了,因为在传统MVC中的很多功能已经在Struts组件中实现了。让我们具体来看看Struts是怎样工作的:
首先由浏览器发出一个HTTP请求,Struts的控制器接收到这个请求并决定将这个请求发到何处。这个控制器是一个Servlet,即org.apache.struts.action.ActionServlet类,这个Servlet不需要我们自己实现,对于我们来说它是不可见的,只需在web.xml文件中注册该Servlet即可。在WEB-INF目录有个struts-config.xml的文件,这个Servlet就是根据这个XML文件的配置将请求转发到相应的org.apache.struts.action.Action类。如果你在你的ActionMapping配置文件中定义了相应的ActionForm Bean,Servlet将在调用Action类前调用这个ActionForm Bean。如果在用户session中没有这个ActionForm Bean,则Servlet会自动建立一个新的Bean添加到session中。ActionForm是一个实现了序列化的抽象类,我们应该为每个页面的表单建立一个ActionForm类的子类。Servlet类在调用了ActionForm Bean之后就把表单中的数据放到这个ActionForm Bean中了。这样我们就没有那些讨厌的request. getParameter()方法了。
Action类对程序员来说是整个Struts框架的核心,它只有一个方法即perform()方法。我们应该建立它的子类实现相应的功能。Action在接到请求后,会从ActionForm类中取得相应的提交参数(通常是一些表单数据),然后将参数传给相应的业务逻辑进行处理,然后根据业务逻辑返回的处理结果在ActionMapping中找到相应的View组件通过ActionForward类发往浏览器。
整个Struts的流程就是这样简单,但刚开始接触Struts的程序员可能还是一头雾水,关键是他还没有明白Struts中各个部分的功能作用等,下面就以模仿计算机世界开发者俱乐部(http://www.dev-club.com)的用户注册、资料修改、登录为例分别详细介绍Struts的每个部分。
计算机世界开发者俱乐部(以下简称Dev-Club)用户功能的Struts框架实现
Dev-Club的用户功能包括用户注册、资料修改、用户登录、用户管理等,由于时间有限,我没有实现用户管理的功能,大家可以根据我的例子自己用Struts来实现。
Dev-Club的用户注册分为四个步骤:
a、 服务条款的确认和接纳(register.jsp)
b、 输入用户名(register1.jsp)
c、 填写注册信息(register2.jsp)
d、 注册完成(register3.jsp)
register.jsp我没有采用Struts框架,这里略过不作讨论。
由于register1.jsp和register2.jsp除了表单里的表单对象不同外,其它的都很类似,所以我只建立了一个RegisterForm的类与它们对应,我将它的包命名为org.devclub.struts,我的例子都是在这个包里。
RegisterForm类是org.apache.struts.action.ActionForm类的子类,它的属性与register1.jsp和register2.jsp中表单的表单对象是对应的。这里因为我用一个ActionForm类对应两个页面中的表单,所以我将这两个表单中的所有表单对象都在RegisterForm里定义了属性。请注意表单对象的名字与RegisterForm中属性的名字是一致的。并且这个类一定要按照JavaBean的规范来写即这个类每个属性都要有get和set方法。如表单中有名为username的文本框,在RegisterForm里就一定要有名为username的成员变量和getUsername()及setUsername()方法。再为RegisterForm类添加一个校验表单数据的validate()方法:
|
|