Struts 如何工作的

作者:东海之心 2003-11-28,来源:Struts How To: http://jakarta.apache.org/struts/faqs/works.html
Java Servlets 被设计用于操控(handle)Web浏览器的请求。Java ServerPage被设计用于创建哪些可发布宣传站点到在线应用系统中的动态Web页面。Struts使用一个特殊的Servlet作为“交换机”,将来自Web浏览器的请求转到相应的ServerPage。这使Web应用更加容易设计、创建和维护。
以下是有关Struts的机制和依存关系的更加详细说明:
l 你开发的web应用有一个必须要写的部署描述文件(WEB-INF/web.xml)。这个文件描述了你的web应用的配置,包括欢迎页面(welcome pages)(当请求没有指定时,出现在目录下的文件)、servlet(路径或者扩展名)和那些servlets的参数的映射。
在这个文件中,你配置Struts ActionServlet作为一个操控所有指定映射(通常以.do为扩展名)请求的servlet。这就是前面提到的“交换机”。
也在这个文件中,你配置ActionServlet使用一个或者多个用于Struts本身的配置文件。
在本教程中,假定我们将web应用安装在服务器的/myapp下,并且使用最简单的可能配置。
如果你需要了解有关部署描述符方面更加详细的情况,请阅读Servlet 规范,这个可以在Sun的Java站点获得。
l 在Struts配置文件中,你将路径和你应用程序的控制组件相关联,像Action类(例如:“login”=>LoginAction类)。这告诉Struts的ActionServlet,当来一个 http://myhost/myapp/login.do请求时,应该调用你的控制组件LoginAction。
注意在这个URL中的后缀.do。这个后缀导致你的容器(例如Tomcat)去调用ActionServlet,它将单词“login”看做你要做的一件事。当这个配置被引用后,你的LoginAction也配执行。
l 对于每个Action,你也可以用结果页面(resulting page)的名字配置Struts,这些结果页面可以显示作为动作的结果。动作的结果可以有不止一种的视图(通常的,它至少有两种:一个是成功,一个是失败)。你的Action(你写的控制组件)依赖于这些“逻辑”结果的映射名。它使用一些诸如“success”“、failur”、“ok”、“UserInIncompetent”等词向ActionServlet回报。Struts系统(通过你写的配置文件)知道如何转向到合适的指定页面。这就是通过简单的编写Struts XMl配置文件为视图层进行重新配置所带来的额外好处。
从这点来看,Struts知道如何委派你的控制组件,知道你的控制器处理结果要显示什么。应用程序的模型(model)部分完全取决于你,它从你的控制组件内被调用。
l 你也许要在Struts配置文件中将一个Java Bean和一个action(或者一组action)相关联。Java Bean被当做form或者显示数据的仓库(repository),它可以在view和controller层通信。
这些Beans对你的控制组件(像LoginAction)和任何与控制器(controller)相关联的显示页面都将自动可见。
在Struts系统的帮助下,这些Beans将被核准用于帮助确认用户在表单中输入正确的数据。它们可以被一个session携带,允许表单(form)跨越多个视图页面,而Actions在控制器中。
注意:为了使显示层看到这些数据,你必须使用一些服务端技术(JSP、Velcity、XSLT)(静态的HTML不起作用)。
Struts工作在服务端,因此客户的视图必须在那里编写。客户端通过一般的表单提交(POST/GET)方法反馈数据,Struts系统在调用你的控制组件之前更新Bean里面的数据。
l 在你的web应用中,将会有一些页面,这些页面用于表现你的用户将看到的视图。这些可以是JSP页面,Velocity模板,XSLT页面等等。一组JSP标签和Struts发行包绑定,这样,你可以立刻使用,但不是说任何标准的表示技术(presentation technology)都可以在Struts中使用。
当然,静态HTML文件可以在你的Struts应用中使用,但是它们将不能获得充分获得动态特点的好处。
在Struts JSP taglibs的例子中,提供了一些其他包,使这个framework更加容易使用你的一些喜好的表现技术。对于Velocity 模板,有用于Struts的Velocity的ViewTools。如果你要使用XSLT在你的应用中,你可以在stxx和StrutsCX之间选择。
这些包使标准的Struts框架元素看起来像是原来表现技术的不可分割的一部分。Struts也使它变得容易混合和搭配。如果需要,你可以在同一个应用中使用JSP、velocity模板和XSLT!
由于Struts依赖于标准的Servlet技术,所有你应该可以在Struts中使用任何Java表现技术。
l 虽然Struts框架的焦点在控制器(controller),但是表现层是任何一个应用的有机部分。Struts JSP标签库包括一些普通的和Struts特有的标签,用于帮助在你的视图中使用动态数据。
客户定制JSP标签占Struts基础代码的很大一部分。一个有教育意义的是,在1.1b3版本中,有关Struts的核心Java代码是大约28,000行,而标签库(包括tiles)的Java代码是将近41,000行。
这些标签有助于你将你的视图层和控制层粘合而不需要插入很多Java代码在JSP中。这使页面看起来像一个XML文件,比起一个寻常的JSP文件,这使web设计者更加容易处理。这也有助于减少控制和视图的耦合性。
客户定制标签用于创建表单(非显示的和前面提到的Bean相关),逻辑上指向其他页面,然后激活web应用中的其他action。
还有一些标签是帮助你进行国际化、错误消息处理等等。所有这些功能都依靠你在应用于Struts中的配置文件的一些方法。
你需要记住的重要一点是,这里所说的机制仅仅在ActionServlet操控请求时才有效。
既然这只发生当你的请求被提交然后致使容器调用ActionServlet的情况下,所以你必须确保任何依赖于Struts的页面的请求是映射到ActionServelt的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值