Struts与Java-Web应用简介

引言
程序员有两个通病:要么成天张口便是一堆似懂非懂高深玄乎的专用名词;亦或就是只顾埋头于漫无边际的代码中,这为程序员的两大忌。故我将陆续写一些类似本文既不追捧时髦名词也不局限代码的基础性文章。

1.Struts 介绍
Jakarta-Struts是Apache软件组织提供的一项开放源代码项目。它为Java Web应用提供了模型-视图-控制器(MVC)框架,尤其适用于开发大型可扩展的J2EE Web应用。Struts为Web应用提供了一个通用的框架,使得开发人员可以把精力集中在如何解决实际业务问题上。此外,Struts框架提供了许多可扩展和定制的地方,使得应用程序可以方便的扩展框架,来更好的适应用户的实际需求。但值得注意的是现在的大型软件项目均并非纯粹的Struts应用,而是集成了多个开源项目的复杂平台。(比如:Struts、Webwork、Spring、iBatis、Log4j、Hibernate等等)

1.1.Struts实现的MVC机制Struts实质上就是在JSP Model2的基础上实现的一个MVC框架。在Struts框架中,模型由实现业务逻辑的JavaBean或EJB组件构成,控制器由ActionServlet和Action类来实现,视图由一组JSP文件和ActionFormBean组成。

1.2.Struts的工作流程
1.2.1.检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效信息。1.2.2.如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。
1.2.3.根据配置信息决定是否需要表单验证。如果需要验证就调用ActionForm的validate()方法。1.2.4.ActionServlet根据ActionMapping实例包含的映射信息决定将请求转发给哪个Action,并调用它的execute()方法。

2.Java Web应用概述
Java Web应用的核心技术是Java Server Page和Servlet。

2.1.Servlet组件
Servlet在Web应用中担任主要角色。Servlet运行于Servlet容器中,可以被Servlet容器动态加载,来扩展服务器的功能,并提供特定的服务。Servlet按照请求/响应的方式工作。在Struts框架中控制器组件就是由Servlet来构成的。当用户请求访问某个Servlet时,Servlet容器将创建一个ServletRequest对象和一个ServletResponse对象。在ServletRequest对象中封装了用户请求信息,然后Servlet容器把ServletRequest对象和ServletResponse对象传递给用户Servlet,Servlet把响应结果写到ServletResponse中,然后由Servlet容器把响应结果传递给用户。在Java Servlet API中,有一下几个比较主要的类:
2.1.1.HttpServletRequestServlet容器把HTTP请求信息保存在HttpServletRequest对象中,Servlet组件从Request对象中读取这些信息。此外,HttpServletRequest还可以存放request范围内的共享数据。
2.1.2.HttpServletResponse用于生成并返回HTTP响应结果。2.1.3.HttpSessionServlet容器为每个HTTP会话创建一个HttpSession实例,HttpSession可以存放Session范围内的共享数据。2.1.4.ServletContextServlet容器为每一个Web应用创建一个ServletContext实例,ServletContext可以存放Application范围的共享数据。

2.2.JSP组件
在传统的HTML文件中加入Java程序片断和JSP标签,就构成了JSP网页(组件)。当JSP容器接收到Web用户的一个JSP文件请求时,她会对JSP文件进行语法分析并生成Java Servlet源文件,然后对其编译。一般情况下,Servlet源文件的生成和编译仅在初次调用JSP文件时发生。尽管JSP在本质上就是Servlet,但这两者的创建方式不一样。Servlet完全由Java程序代码构成,擅长于流程控制和事务处理;JSP有HTML代码和Java程序片断以及JSP标签构成,可以方便的编写动态网页。在Struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层。

2.3.共享数据在Web应用中的范围
在Web运用中如果某种数据需要被多个Web组件共享,可以把这些共享数据存放在特定的范围内。共享数据有四种存在范围:
2.3.1.Page共享数据的有效范围是用户请求访问的当前JSP网页。
2.3.2.Request共享数据的有效范围为“用户请求访问的当前Web组件,以及和当前Web组件共享同一个用户请求的其他Web组件”。如果拥护请求访问的是JSP网页,那么该JSP网页的<%@include>指令以及 标记包含的其他JSP文件也能访问共享数据。
2.3.3.Session共享数据存在于整个HTTP会话的生命周期内。
2.3.4.Application共享数据存在于整个Web运用的生命周期,Web应用中的所有Web组件都能共享它。共享数据实际上存放在ServletContext对象中。

2.4.Web组件的三种关联关系Web应用的一大特征就是他们能彼此链接和聚合信息资源。Web组件之间存在着三种关联关系:请求转发、URL重定向、包含。
2.4.1.请求转发请求转发允许把请求转发给同一应用程序中的其他Web组件。这种技术通常应用于Web应用控制层的Servlet流程控制器,他检查HTTP请求数据,并将请求转发到合适的目标组件,目标组件执行具体的请求处理操作,并生成响应结果。Servlet类使用javax.servlet.RequestDispatcher.forward()方法来转发所收到的HTTP请求。对于请求转发,转发的源组件和目标组件共享request范围内的共享数据。
2.4.2.请求重定向请求重定向类似于请求转发,但也有一些主要区别:
2.4.2.1.Web组件可以将请求重定向到任一URL,而不仅仅是同一应用中的URL.
2.4.2.2.重定向的源组件和目标组件之间不共用同一个HttpServletRequest对象,因此不能共享request范围内的共享数据。
2.4.3.包含包含行关系允许一个Web组件聚集来自同一个应用中其他Web组件的输出数据,并使用被聚集的数据来创建结果。之中技术通常被用于模板处理器,他可以控制网页的布局。

3.MVC设计模式
MVC是Model-View-Controller的简称,即模型-视图-控制器。
3.1.视图视图是用户看到并与之交互的界面。视图向用户显示并接收相关的数据,但它并不参与任何的实际业务处理。
3.2.模型模型是应用程序的主体部分。模型表示业务数据和业务逻辑,一个模型能为多个视图提供数据,大大提高了组件的可重用性。
3.3.控制器控制器接受用户的输入并调用模型和视图去完成用户的需求。当Web用户提交HTML表单时,控制器接收请求并调用相应的模型组件去处理请求,然后调用相应的视图来现实模板返回的数据。
3.4.MVC处理过程总结一下:首先,控制器接受用户的请求,并决定应该调用哪个模型来处理;然后模型根据业务逻辑进行相应的处理,并返回数据;最后控制器调用相应的视图来格式化模型返回的数据,并通过视图呈现给用户。
3.5.MVC的优点
3.5.1.多个视图能够共享一个模型。
3.5.2.模型是自包含的,与控制器和视图保持相对独立,所以可以方便的改变应用程序的数据层和业务规则。
3.5.3.控制器提高了应用程序的灵活性和可配置性。

4.结束语
在基于J2EE的MVC设计模式真可谓是百花齐放,不断涌现出许多开源项目。Struts实属一个MVC的经典实现,而且Struts后面有许多的资源,讨论组,成功的经典项目等,因此在我们的项目中使用Struts框架除了能够实现MVC以外还可以有效降低项目风险和开发成本。

 

你可能感兴趣的:(Struts与Java-Web应用简介)