Struts控制器组件

[size=xx-large]Struts控制器组件[/size]


[size=x-large]Struts控制器组件主要包括:[/size]
ActionServlet组件:充当Struts框架的中央控制器。
RequestProcessor组件:充当每个子应用模块的请求处理器。
Action组件:负责处理一项具体的业务。

[size=x-large]Struts控制器组件主要完成以下任务:[/size]
接受用户请求,根据用户请求调用何时得模型组件来执行相应的业务逻辑,获取业务逻辑执行结果,根据当前状态以及业务逻辑执行结果选择合适的视图组件返回给用户。


[size=x-large]ActionServlet类[/size]
ActionServlet类是Struts框架的核心控制器组件,所有的用户请求都先由它来处理,然后把请求转发给其他组件。只允许有一个ActionServlet类,仅创建一个实例。

Struts框架初始化过程:
加载ActionServlet类,执行init()方法。(时序图见p97)。


[size=x-large]RequestProcessor类[/size]
对于多应用模块的Struts应用,每个子模块都有各自的RequestProcessor实例。
在ActionServlet的process()方法中一旦确定了正确的子应用模块,就会调用子应用模块的RequestProcessor实例的process()方法来处理。


[size=x-large]Action类[/size]
Action类是用户起请求和业务逻辑之间的桥梁,每个类充当客户的一项业务代理。在RequestProcessor类预处理请求时,创建Action实例后,就调用自身的processActionPerform()方法,该方法再调用Action的execute()方法。

Action类的execute()方法会返回一个ActionForward对象,他代表Web资源的逻辑抽象。
返回方法:return mapping.findForward("Success");

Action类的局部变量是每个线程独立的,而实例变量时被所有线程共享的。


[size=x-large]使用内置的Struts Action类[/size]
[size=x-large]1.ForwardAction类[/size]
负责请求转发,配置文件如下
<action
path="/viewsignin"
parameter="/security/signin.jsp"
type="org.apache.struts.actions.ForwardAction"
scope="request"
name"loginForm"
validate="false"
input="/index.jsp">
</action>

[size=x-large]2.IncludeAction类[/size]
包含另一个Web组件,配置如下:
<action
path="/sample"
parameter="sampleInclude.jsp"
type="org.apache.struts.actions.IncludeAction"
scope="request"
name"sampleForm"
input="/sample.jsp">
</action>
parameter属性指定要包含的组件。

[size=x-large]3.DispatchAction类[/size]
继承DispatchAction类,可以在Action中写多个方法,配置如下
<action path="/car"
type="netstore.order.ShoppingCartActions"
scope="request"
input="/order/shoppingcart.jsp"
validate="false"
parameter="method">
<forward name="success" path="/order/shoppingcart.jsp" redirect="true"/>

method请求:
http://localhost:8080/netstore/action/cart?method=addItem&id=2
将调用addItem()方法。

[size=x-large]4.LookupDispatchAction类[/size]
LookupDispatchAction是DispatchAction的子类,通常主要应用在一个表单中有多个提交按钮,而这些按钮又有一个共同的名字的场合。例子:
jsp片段:
//俩个按钮
<html:submit property="action">
<bean:message key="button.saveorer">
</html:submit>
<html:submit property="action">
<bean:message key="button.checkout">
</html:submit>
实现getKeyMethodMap()方法
protected Map getKeyMethodMap(){
Map map = new HashMap();
map.put("button.saveorder","saveorder");
map.put("button.checkout","checkout");
}
Action中写俩种方法。
Struts配置:
<action path="/processcheckout"
type="netstore.order.ProcessCheckoutAction"
scope="request"
input="/order/shipping.jsp"
name="checkoutForm"
validate="true"
parameter="action">
<forward name="Success" path="/order/payment.jsp"/>
</action>

[size=x-large]利用Token解决重复提交[/size]
流程:
1.提交前请求转发给PrepareInsertAction调用saveToken(request)方法。创建令牌。
2.在jsp中form标签处理判断session范围是否存在Token。
3.提交表单后,InsertAction处理,首先调用isTokenValid(request)方法判断。
步骤:
1.创建PrepareInsertAction。execute()方法就一个saveToken(request);
2.修改InsertAction,在execute()方法开头添加判断。
3.Struts配置文件
<forward name="insert" path="/prepareinsert.do">
<action path="/prepareinsert"
type=".....ParpareInsertAction">
<forward name="success" path="insert.jsp">
</action>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值