Struts框架的工作原理
在J2EE企业级系统开发中,Struts框架占据了很重要的地位,熟练使用Struts框架可以大大地缩短开发周期,提高开发效率。本文将通过具体的代码实例和流程图对Struts框架的工作原理进行论述。
关键词:J2EE,Struts,系统开发框架
在J2EE企业级系统开发中,Struts框架占据了很重要的地位,熟练使用Struts框架可以大大地缩短开发周期,提高开发效率。本文将通过具体的代码实例和流程图对Struts框架的工作原理进行论述。
关键词
J2EE Struts 系统开发框架
引言
学习Struts框架普遍会遇到的问题是搞不清它的具体工作原理。整个Struts应用是一个分工明确的有机整体,各个组件各司其职,在控制中心的统一指挥下,按部就班地完成各个部门的处理工作。
1.接收HTTP请求转到Struts控制器
图1 :Struts工作原理流程
在如图1所示的工作原理流程中描述了客户端浏览器从发出请求到获得响应的整个处理过程:
从图1中可以看出,服务器首先对接受到的客户端请求进行过滤:属于Struts处理范围的请求被自动提交给Struts控制器处理,否则将按照传统的方式作出响应。具体说来,在Web应用程序中,凡是“*.do”格式的页面请求URI(Uniform Resource Indicator,统一资源指示符)均属于Struts处理范围,将由一个名为ActionServlet的Servlet负责处理,Struts实现这一控制逻辑并没有引入新的机制,来看Web应用下web.xml的一段代码:
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
上述代码片段中使用标准格式配置了名为action的控制器Servlet,并在<servlet-mapping>元素中将所有“.do”结尾的页面请求URI映射到该Servlet。类型org.apache.struts.action.ActionServlet是Struts API 中定义的最重要组件类之一,该类继承了javax.servlet.http.HHttpServlet,因此其对象可以被作为 Servlet使用。
2.FormBean分发请求
控制器Servlet开始工作,它先使用一个制定的JavaBean来自动接收客户端请求中包含的表单数据,这在Struts配置文件struts-config.xml中可以找到,声明该JavaBean的代码为:
<form-beans>
<form-bean name=”loginForm” type="com.struts.from.UserForm" />
</form-beans>
为了实现属性的自动填充功能,该JavaBean必须是org.apache.struts.action.
ActionForm类型(实际上是其子类)的对象。 论文格式 。指定使用该Bean的代码同样位于文件struts-config.xml中:
<action-mappings>
<action input="/login.jsp" name="loginForm"path="/login" scope="request" type="com.struts.action.LoginAction">
</action>
<action path=”/regist” forvard=”/regist.jsp”>
</action-mapping>
上述代码片段的作用是,使用<action-mapping>元素的子元素<action>来事先约定控制器(ActionServlet对象)分发HTTP请求的规则:
(1)如果请求的页面URI是login.do,则使用先前说明过的loginForm来自动接收请求表单中的数据,并将该请求分发给一个LoginAction类型的实例来处理。该实例起到类似于java程序中事件监听器的作用,要求其所属类型必须是org.apache.struts.action.Action的子类。
同样地,控制器Servlet对象有时也被称为“AectionServlet对象”。和使用JavaBean的情形类似,如果找不到该Action对象(第一次用到时),则系统会自动实例化一个。
(2)如果请求的页面URI是reqist.do,则直接转向到“/regist.jsp”页面做出响应。此时对应的是图2-9中的一条“短路”流程“1->7->9”。论文格式。
显然,如果需要还可以在<action-mapping>中定义更多的<action>子元素,来实现多分支效果。
3.执行execute()方法
Action对象接收到分发来的请求和先前由ActionServlet对象填充过的表单Bean(以及一些其他相关信息)后,会调用其execute()方法进行处理,execute()方法返回一个封装了下一目标页面信息的AoctionForvard对象给控制器ActionServlet。此时,mapping对象调用findForward()方法查找的是配置文件中<forward>元素所包含的映射信息:
<global-forwards>
<forwardname="failed" path="/error.jsp"/>
<forwardname="successed" path="/right.jsp"/>
</global-forwards>
最终的效果是,身份验证通过则由ActionServlet将原客户端HTTP请求再次转发至/error.jsp页面,否则转发至right.jsp页面。论文格式。
4.归纳Struts应用程序的基本原理
(1)ActionServlet接收客户端HTTP请求,使用ActionForm自动接收请求表单信息,然后将请求分发给相应的Action对象。
(2)Action对象调用execute()方法处理请求,然后返回ActionForward对象给ActionServlet
(3)根据AoctionForward对象封装的信息,ActionForward将HTTP请求再次转发给其它页面,最终发送响应回客户端。
参考文献
1. 《Struts Kick Start》 作者: (美)比德尔 (美)特纳
译者: 孙勇 电子工业出版社
2.《精通Struts:基于MVC的Java Web设计与开发》
Struts框架的工作原理相关推荐
- python scrapy框架原理_Scrapy框架的工作原理是什么?
Scrapy框架的工作原理是什么? Scrapy架构 学习Scrapy框架,从理解它的架构开始.图1所示是Scrapy的架构图. 从图1可知,Scrapy框架主要包含以下组件: (1)Scrapy E ...
- php ci 框架 扩展缓存类,PHP CodeIgniter框架的工作原理研究
这篇文章主要介绍了PHP CodeIgniter框架的工作原理研究,本文首先分析了它的工作流程,然后总结了它的工作原理,需要的朋友可以参考下 CodeIgniter(以下简称CI,官网以及中国站)是一 ...
- Spring框架的工作原理
Spring框架是一个开源的Java平台,它为容易而快速的开发出耐用的Java应用程序提供了全面的基础设施.完成基础阶段的学习后,就会开始接触框架的知识,接下来就给大家简单讲解Spring框架的工作原 ...
- 浅析Struts 体系结构与工作原理(图)
Struts 体系结构是目前基于java的 web系统设计中广泛使用的mvc构架. 基本概念 Struts是Apache 基金会Jakarta 项目组的一个Open Source 项目,它采用模 ...
- Struts 体系结构与工作原理(图)
Struts 体系结构是目前基于java的 web系统设计中广泛使用的mvc构架. 基本概念 Struts是Apache 基金会Jakarta 项目组的一个Open Source 项目,它采用模 ...
- Struts 体系结构与工作原理 图
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Stru ...
- java ssh实现原理_SSH三大框架的工作原理及流程
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Hibernate工作原理及为什么要用? 原理 通过Configuration().configure();读取并解析hibernate.cfg.xml配 ...
- SSH框架笔记_SSH三大框架的工作原理及流程
Hibernate工作原理及为什么要用? 原理: 1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件 2.由hibernate.cfg ...
- MVC框架基本工作原理
MVC工作原理 MVC要实现的目标是将软件用户界面和业务逻辑分离以使代码可扩展性.可复用性.可维护性.灵活性加强. Model 模型层,一般对数据的处理,业务逻辑都会放在model进行处理 View ...
- Bootstrap框架网格系统工作原理
Bootstrap 框架的网格系统工作原理如下: 1 .数据行 (.row) 必须包含在容器( .container )中,以便为其赋予合适的对齐方式和内距 (padding) . 如: &l ...
最新文章
- swift实现ios类似微信输入框跟随键盘弹出的效果
- 反码求和校验: 一个数加上自己取反得到的数正是时钟轮盘上最大那个数
- smarty课程---最最最简单的smarty例子
- magic number
- boost::mpl模块实现multiset相关的测试程序
- 你有没有靠谱的基因?一个人靠不靠谱,其实就看这三点:“凡事有交代,件件有着落,事事有回音。”...
- python3 tkinter电子书_Python3 Tkinter-Text
- java 用ajax更新表单,ajax刷新表格,该如何处理
- vue watch 修改滚动条_只需要这几个vue快捷开发技巧,看完技术提升30%!!!!...
- MySql表名的大小写问题
- K210系列开发板介绍
- vant ui 官方文档_转载:微信小程序UI组件库合集
- 2010中国十大杰出IT博客大赛—唯有行动才能改造命运
- FireMonkey 界面的玩法
- 将图片url转为base64的方法
- AVS2 有点令人不敢相信
- 2017.10.16队内互测——胡策
- c 获取本地计算机ip,C++获取本机IP地址
- UI设计实用经验分享
- 【论文研读】-用于约束多目标优化的新型双阶段双种群进化算法
热门文章
- C语言实现顺序表(数据结构)
- matlab如何预测数据,matlab预测数据
- java开发简历编写_编写Java开发人员简历的完整指南
- python 条件语句且_python 条件语句
- 罗技g402鼠标宏设置教程
- 快进来,详解MySQL游标
- heidisql与 MySQL区别,heidisql怎么使用 MySQL可视化工具heidisql安装使用教程
- 威纶通触摸屏可以解密吗_【实例】西门子PLC变频器和触摸屏综合应用
- Linux 制作系统镜像
- 计算机组成原理白中英知识点总结,计算机组成原理重点整理(白中英版)