Struts在Tomcat中的安装配置及工作流程
1.准备工作
安装JDK及Tomcat,并分别设置环境变量:JAVA_HOME、CLASSPATH、COMCAT_HOME,并确保Tomcat已正常工作。本文以jdk1.5和Tomcat5.5.12为环境介绍Struts在Tomcat中的安装及工作流程。
2.安装Struts(通过二进制发布包安装)
2.1下载Struts二进制发布包(http://struts.apache.org/downloads.html)
2.2解压下载的二进制发布包,并将解压目录下lib目录中的所有.jar文档复制到TOMCAT_HOME\web应用\WEB_INF\lib目录下,即只有些Web应用使用Struts构架。
另:如果多个应该要同时使用Struts构架,则应该将解压目录下lib目录中的所有.jar文档复制到TOMCAT_HOME\common\lib目录下。
2.3将对应lib目录下的struts.jar文件路径添加到CLASSPATH环境变量中。
通过以上配置Web应用就可以使用Struts构架进行项目开发了。
另外还可以通过Struts源码进行安装。
3.Struts构架的构成
整个Struts应用是一个分工明确的有机整体,在控制器的统一指挥下,各个组件各负其责,协调工作,是MVC设计模式的具体实现。MVC模式分为:模型(Model)、视图(View)、控制器(Controller)三部分。
3.1模型(Model):业务逻辑层,用于实现具体的业务逻辑。此部分一般由JavaBean或EJB(企业级JavaBean)组成。Struts中的模型主要分为两个部分:
1.系统的内部状态
2.可以改变状态的操作(事务逻辑)
内部状态通常由一组ActinForm JavaBean表示。根据设计或应用程序复杂度的不同,这些Bean可以是自包含的并具有持续的状态,或只在需要时才获得数据(从某个数据库)。
大型应用程序通常在方法内部封装事务逻辑(操作),这些方法可以被拥有状态信息的bean调用。比如购物车bean,它拥有用户购买商品的信息,可能还有checkOut()方法用来检查用户的信用卡,并向仓库发定货信息。
小型程序中,操作可能会被内嵌在Action类,它是struts框架中控制器角色的一部分。当逻辑简单时这个方法很适合。
注:建议用户将事务逻辑(要做什么)与Action类所扮演的角色(决定做什么)分开。
3.2视图(View):表示层,与用户直接交互的视图。此部分一般通过JSP页面来实现,另外Struts还提供了丰富的自定义标识库,它与模型部分有效交互。
3.3控制器(Controller):控制层,是整个应用的控制中心,用于控制整个业务流程(Flow Control),使用Model与View协同工作。控制器通过专门的Servlet来实现的,该Servlet是一个Struts API中提供的ActionServlet类型的实例。
3.4 Struts框架的组成部分
Struts-config.xml Struts配置文件
ActionServlet 控制器
Action Class 包含事务逻辑
ActionForm 显示模块数据
ActionMapping 帮助控制器将请求映射到操作
ActionForward 用来指示操作转移的对象
ActionError 用来存储和回收错误
Struts标记库 可以减轻开发显示层的工作
3.5主要的配置文件
web.xml(TOMCAT_HOME/Web应用/WEB_INF),Web.xml是web应用的通过配置文件,主要完成ActionServlet的配置、配置首页的设置等。
Struts-config.xml(TOMCAT_HOME/Web应用/WEB_INF),struts-config.xml是整个Struts构架的核心,用来组装各个组件,是一个控制中心。
4.Struts构架的工作流程(如图所示)
初学Struts时,可能难以理解其工作流程,最简单的理解可以把Struts看作是一个“页面导航”构架,在struts_config.xml来规化应该程序的各个部分,Struts通过读取该配置文件来组织应用程序。
5.流程说明
首先,服务器接收到客户浏览器请求后,对请求进行过滤,若属于Struts的处理范围则自动提交给Struts控制器进行处理,否则按传统方式作出响应。
注:过滤标准依据web.xml中Servlet的配置信息:
<servlet>
<servlet-name>actionServlet</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>actionServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
以上信息配置了名为actionServlet的控制器Servlet,并说明凡是以.do(也可约定为其它)结尾的页面请求都由此Servlet来处理,实现此Servlet的类是org.apache.struts.action.ActionServlet.(Struts API中定义的组件类)
其次,控制器servlet开始工作,读取struts_config.xml中的配置信息
注:Struts_config.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<struts-config>
<form-beans>
<form-bean name="formBeanName" type=" package.ClassNameForm "/>
</form-beans>
<global-forwards>
<forward name="failed" path="/error.jsp"/>
<forward name="successed" path="/right.jsp"/>
</global-forwards>
<action-mappings>
<action path="/login" type ="classmate.LoginAction" name ="formBeanName" scope="request" input ="/login.jsp"/>
<action path="/regist" forward="/regist.jsp"/>
</action-mappings>
</struts-config>
1. 使用指定的JavaBean来自动接收来自客户提交的表单数据,声明该JavaBean的代码对应于struts_config.xml中的:
<form-beans>
<form-bean name="formBeanName" type="package.ClassNameForm"/>
</form-beans>
Name:该bean的名字
Type:实现该bean的类
为实现自动填充功能,该Bean(package.ClassNameForm类)必须是org.apache.struts.action.ActionForm类(即其子类)的对象。
2. Servlet控制器读取Http分发规则(即Http请求与处理此请求的类的对应关系)
<action-mappings>
<action path="/login" type ="package.LoginAction" name =" formBeanName " scope="request" input ="/login.jsp"/>
<action path="/regist" forward="/regist.jsp"/>
</action-mappings>
说明:
path:和本Action对应的请求页面的相对路径(不包括后.do)。
type:处理请求的Action Bean类(完整路径)。
name:用到的ActionForm Bean的名字(<form-bean>元素中声明的)
scope:ActionForm Bean的作用域(默认为session)。
input:表单验证出错时的处理页面。
forward:指定目标响应页面(与<forward>元素不同,只有当没有指定type属性时本属性才生效)。
另:还可以在<action>中配置<forward>元素,即此Action处理后反回的目标页面
以上代码使用<action-mapping>元素的子元素<action>来约定控制器(ActionSevlet对象)分发HTTP请求的规则:
1. 若页面URI是login.do,则使用formBeanName来自动接收来自客户请求表单中的数据(该formBeanName中属性要与用户提交表单中的属性名称对应该,否则将无法接收),并将该请求分给一个package.LoginAction类型的实例来处理。该实例起到事件监听器的作用,类型必须是org.apache.struts.action.Action的子类。
注:控制器(ActionServlet)对象与JavaBean的情形类似,第一次运行时会自动实例化一个对象。
2. 若页面URI是regist.do,则直接转向/regist.jsp页面作出响应。
3. Action对象的功能
Action对象接收到发送来的Http请求和由ActionServlet对象已填充过的表单对象,然后调用其execute()方法进行处理,此方法有四个参数:
ActionMapping mapping:映射到struts_config.xml中的相关配置信息。
ActionForm form:ActionServlet对象填充过的表单(ActionForm Bean)的一个引用,可以从对象中获取表单数据。
HttpServletRequest request:来自客户端的Http请求信息。
HttpServletResponse response:响应客户端的Http信息。
执行完成后,返回给控制器ActionServlet对象一个封装了目标页面的ActionForward对象,此时,mapping对象调用findForward()方法 到struts_config.xml中的查找<forward>元素中映射信息,<forward>元素的定义如下:
<global-forwards>
<forward name="name1" path="/page1.jsp"/>
<forward name="name2" path="/page2.jsp"/>
</global-forwards>
Execute方法中的findForward()方法中的参数对应forward元素中的name属性,找到后将导航到相应的页面。
注:<forward>可以在struts_config.xml中两个地方定义:一个是<global-forwards>元素中,此时在整个应用中都有关效,可理解为编程语言中的全局变量;另一个是<action>元素中,此时作用域为本Action。 findForward()方法查找顺序为<action>?<global_forwards>
6.Struts构架工作流程总结
ActionSerlvet接收客户Http请求,使用ActionForm Bean自动填充客户送来的表单数据到ActionForm Bean对象中?根据配置信息(struts_config.xml)将请求分发给相应的Action对象?Action对象调用execute()方法处理请求(根据JavaBean和ActionForm取得业务逻辑和表单数据),并反回ActionForward对象给ActionSerlvet对象?根据ActionForward对象的信息(目标页面),ActionServlet再次将Http请求导航到目标页面,并发送到客户端。
以上是struts在Tomcat中的安装与基本配置,在以后的系列文章中将详细介绍其核心组件及运行机制。
分享到:
相关推荐
NULL 博文链接:https://tgwall.iteye.com/blog/1701637
虽然Struts2号称是一个全新的框架,但这仅仅是相对Struts 1而言。Struts 2 与Struts 1相比,确实有很多革命性的改进,但它并不是新发布的新框架,而是在另一个赫赫有名的框架:WebWork基础上发展起来的。从某种程度...
struts1的工作流程,初学者不错的资源
Struts2的工作流程及struts2配置文件中各属性的含义
struts2工作流程struts2工作流程struts2工作流程struts2工作流程struts2工作流程struts2工作流程struts2工作流程struts2工作流程struts2工作流程
Struts工作流程
这是一个详细的Struts工作流程图,里面包含JSP、java(Action、ActionForm等)类
Struts的工作流程 DOC
1. 客户端发送一个请求,如果.do结尾的url请求,提交给struts框架的ActionServlet来处理。 2. ActionSevlet首先调用struts配置文件(struts-config.xml),如果有表单提交,需要自动填充ActionForm Bean(找struts配置...
jsp项目开发实录 jsp项目开发实录 Struts 实现 程序完整 Struts 实现 程序完整 Struts 实现 程序完整 Struts 实现 程序完整Struts 实现 程序完整Struts 实现 程序完整Struts 实现 程序完整Struts 实现 程序完整...
花了3个小时才搭建出来的struts2小程序
Struts的工作流程.txt
struts和hibernate的工作流程详细
Struts2的工作流程及配置文件
Struts简介 什么是Struts Struts基本运作流程 ActionMapping类 Action类 ActionForm类 ActionError与ActionMessage 协同开发 模块化程序 Struts异常处理 Struts国际化支持 PlugIn接口 等等
Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2是WebWork的升级版本。Struts 2框架按照模块来划分,可以分为Servlet Filters、Struts核心模块、拦截器和用户实现部分。
struts2工作原理、请求响应流程。。。。。。。。。。。。。。。