`
convertto
  • 浏览: 122229 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

Struts控制器

阅读更多

ActionServlet组件
RequestProcessor组件
Action组件
ActionForward组件
内置的Action组件
利用ToKen解决重复提交

Struts控制器概述

Struts控制器组件负责接收用户请求、更新模型,以及选择合适的视图组件返回给用户。控制器组件有助于将视图层和模型层分离,有了这种分离,就可以在同一个模型的基础上得心应手地开发多种类型的视图。Struts控制器组件主要包括:
ActionServlet组件
Struts框架的中央控制器。
RequestProcessor组件
每个子应用模块的请求处理器。
Action组件
负责处理一项具体的业务。
Struts框架采用ActionServlet和RequestProcessor组件进行集中控制,并采用Action组件来处理单项业务。

ActionServlet组件

org.apache.struts.action.ActionServlet类是Struts框架的核心控制器组件,所有的用户请求都先由ActionServlet来处理,然后再由ActionServlet把请求转发给其他组件。Struts框架只允许在一个应用中配置一个ActionServlet类,在应用的生命周期中,仅创建ActionServlet类的一个实例,这个ActionServlet实例可以同时响应多个用户请求。
具体完成的功能:
1.ActionServlet将一个来自客户端的URI映射到一个相应的Action类,如果这个Action类是第一次被调用,那么实例化一个Action类并将其放入至缓存中。
2.如果在配置文件(struts-config.xml)中指定了相应的ActionForm,那么从Request中抓取数据填充FormBean。
3.调用Action类的execute ()方法,传入ActionMapping的一个引用、对应的ActionForm、以及由容器传给ActionServlet的HttpServletRequest、HttpServletResponse对象。
4.execute()方法返回一个ActionForword对象,通过此对象即可连接到相应的JSP页面。

RequestProcessor组件

对于多应用模块的Struts应用,每个子应用模块都有各自的RequestProcessor实例。在ActionServlet的process()方法中,一旦选择了正确的子应用模块,就会调用子应用模块的RequestProcessor实例的process()方法来处理请求。在ActionServlet调用这个方法时,会把当前的request和response对象传给它。

Struts框架只允许应用中存在一个ActionServlet类,但是可以存在多个客户化的RequestProcessor类,每个子应用模块都可以拥有单独的RequestProcessor类。如果想修改RequestProcessor类的一些默认功能,可以覆盖RequestProcessor基类中的相关方法。

Action组件

Action类是用户请求和业务逻辑之间的桥梁。在实际项目发开中,我们会根据需求扩展不同的Action组件。也就是创建一个继承自Action的子类,然后重写它的execute()方法。

常用方法    说明
execute()    Action接收到正确的请求时,则自动调用
getLocale()    获得请求相关联的区域
setLocale()    设置请求相关联的区域
getResources()    获得消息资源
isCancelled()    检查用户是否点击了表单上的”取消”键
addMessages()    存储提示信息
addErrors()    存储错误信息

ActionForward组件

Action类的execute()方法返回一个ActionForward对象。ActionForward对象代表了Web资源的逻辑抽象,这里的Web资源可以是JSP、Servlet或Action。
从execute()方法中返回ActionForward对象有两种方法:
1.return new ActionForward(“yes”,”yes.jsp”,false);
2.return mapping.findForward(“yes”);

内置的Action组件
ForwardAction
IncludeAction
DispatchAction
LookupDispatchAction
SwitchAction

ForwardAction
对于用户自定义的Action类,既可以负责请求转发,还可以充当客户端的业务代理。如果仅仅需要Action类提供请求转发功能,则可以使用ForwardAction类。ForwardAction类专门用于转发请求,不执行任何其他业务操作。
IncludeAction
在JSP网页中,尽管可以直接通过<include>指令包含另一个Web组件,但是Struts框架提倡先把请求转发给控制器,再由控制器来负责包含其他Web组件。IncludeAction类提供了包含其他Web组件的功能。与ForwardAction一样,Web组件通过IncludeAction类来包含另一个Web组件,可以充分利用Struts控制器的预处理功能。
DispatchAction
通常,在一个Action类中只能完成一种业务操作,如果希望在同一个Action类中完成一组相关的业务操作,可以使用DispatchAction类。
LookupDispatchAction
LookupDispatchAction类是DispatchAction类的子类,在LookupDispatchAction类中也可以定义多个业务方法。通常LookupDispactchAction主要应用于在一个表单中有多个提交按钮,而这些按钮又有一个共同的名字的场合,这些按钮的名字和具体的ActionMapping的parameter属性值相对应。
SwitchAction
SwitchAction类用于子应用模块之间的切换。
对于请求访问SwitchAction的URL,需要提供两个参数:
prefix:指定子应用模块的前缀,以“/”开头,默认子应用模块的前缀为空字符串“”
page:指定被请求Web组件的URI,只需指定相对于被切换后的子应用模块的相对路径

利用Token解决重复提交

在某些情况下,如果用户对同一个HTML表单多次提交,Web应用必须能够判断用户的重复提交行为,以做出相应的处理。
我们可以利用同步令牌[Token]机制来解决Web应用中重复提交的问题,Struts也给出了一个参考实现。在Action类中提供了一系列和Token相关的方法:
1.protected void saveToken(HttpServletRequest request)创建一个新的令牌,并把它保存在当前session范围内
2.protected boolean isTokenValid(HttpServletRequest request)判断存储在当前用户session中的令牌值和请求参数中的令牌值是否匹配
3.protected void resetToken(HttpServletRequest request)从当前session范围内删除令牌属性

分享到:
评论

相关推荐

    JSP教程Struts控制器

    Struts控制器有关于Action

    struts控制器核心代码及解释.rar

    struts控制器核心源代码及解释,对希望彻底掌握struts MVC模式工作流程及原理的朋友有帮助。

    Struts控制器示例

    Struts的控制器主要包括: ActionServlet :核心控制器 RequestProcessor :子应用模块的处理器 Action :处理单项业务

    Struts的中央控制器

    Struts的中央控制器 对Struts的中央控制器的处理进行简单介绍 及其流程

    Java Struts教程,Struts学习

    struts 框架中struts 控制器 struts控制器

    Struts 通俗易懂

    next3: struts控制器根据name="HelloForm"找中对应的 next4: 调用指定的type类 关联: 如果validate是"true"那么调用type类的validate(); next5: struts控制器在HelloForm bean处理结束会根据的type调用指定的...

    struts2控制器源码讲解

    struts2控制器源代码讲解,详细讲解struts2控制器

    java反射之模拟struts中央控制器

    关于struts中央控制器的简单模拟

    Struts2拦截器实现权限控制demo

    Struts2拦截器实现权限控制demo,我感觉对初学者还是有一定帮助的

    华为外包java面试题,等你来挑战,come on!

    然后,Struts控制器通过配置文件得到业务逻辑处理Action,并调用Action的处理用户请求;接着,Action处理业务逻辑,可能查找数据库或调用别的系统,处理完成后,填充相关的Model对象,并把控制权返回控制器;最后,...

    Struts1 控制器组件和动态表单详解

    详细讲解Struts1控制器组件和动态表单问题

    JAVA SSH青协志愿服务管理系统源码

    Struts 控制器(负责接收据+处理数据+响应结果(重定向+转)) Spring 工厂类 Hibernate 持久性访问层 *.hbm.xml(类—-表,属性–字段) 2注解 项目包 1,action 控制器 2,dao 操作数据库— 3,model 实体类模型 4...

    JAVA SSH青协志愿服务管理系统源码.rar

    Struts 控制器(负责接收据+处理数据+响应结果(重定向+转)) Spring 工厂类 Hibernate 持久性访问层 *.hbm.xml(类—-表,属性–字段) 2注解 项目包 1,action 控制器 2,dao 操作数据库— 3,model 实体类模型 4...

    Struts2权限控制

    使用Struts2拦截器制作的一些关于权限控制的代码,给同行朋友们参考、学习下。

    Struts2基本原理

    Struts 2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。 核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。...

    struts2拦截器

    该项目主要用到的是struts2的拦截器技术,使用struts2拦截器技术,实现分限制游客浏览和会员浏览的功能。

    Struts_WORD教程.rar

    Struts_1_Struts与JavaWeb应用介绍.doc ...Struts_4_Struts控制器组件.doc Struts_5_Struts视图组件.doc Struts_6_StrutsHTML标签库.doc Struts_7_StrutsBean标签库.doc Struts_8_StrutsLogic标签库.doc

    Struts in Action中文版

    2.2.3. Struts控制器组件................................................................................................39 2.2.4. 用 Struts 开发Web 应用...................................................

    struts2JAR包

    Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的...

    Java Struts 实现拦截器

    Struts2的处理流程: • 客户端产生一个HttpServletRequest的请求,该请求被提交到一系列的标准过滤器(Filter)组建链中(如ActionContextCleanUp...FilterDispatcher是控制器的核心,也是MVC中控制层的核心组建)。

Global site tag (gtag.js) - Google Analytics