• 微软原版系统

  • 一键重装系统

  • 纯净系统

  • 在线技术客服

魔法猪系统重装大师 一键在线制作启动 U 盘 PE 系统 用一键重装的魔法拯救失去灵魂的系统
当前位置:首页 > 教程 > 电脑教程

使用Action类别

时间:2015年04月02日 15:41:27    来源:魔法猪系统重装大师官网    人气:7328
在Struts中,ActionServlet担任分配工作的控制器角色,实际上的工作是交给 Action物件来进行,ActionServlet由ActionMapping得知所使用的Action物件,将工作交给它,并在最後由Action 物件得到一个ActionForward物件,ActionServlet使用这个ActionForward来知道下一个forward的对象。

 对於Struts,一个ActionMapping只会生成一个Action物件,当请求到达时,会检查所需的Action物件是否存在,如果不存在则生成一个,之後一直使用它,由於Action物件会一直存在,所以使用Action物件必须注意到执行绪安全问题。

 我们透过继承Action类别来使用它,在Struts 1.1中,我们会重新定义execute()方法,在Struts 1.0中的perform()方法已经不建议使用;execute()方法有两个接收不同参数的版本:

public ActionForward execute(ActionMapping mapping,
ActionForm form,
ServletRequest request,
ServletResponse response)
throws Exception;
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception; 由於Action通常处理HTTP相关请求,所以我们通常会使用第二个,execute()方法最後要传回ActionForward物件给ActionServlet。

 在MVC/Model 2中,理想上所有的请求都经由ActionServlet来协调转发,客户端不会直接指定真正的位址来请求资源,我们下面直接来看个例子,使用Action物件处理这个功能,首先撰写一个Action类别:

GetAction.java
package onlyfun.caterpillar;

import javax.servlet.http.*;
import org.apache.struts.action.*;

public class GetAction extends Action {
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
String resource = request.getParameter("resource");
if(resource != null && resource.length() != 0) {
request.setAttribute("resource", resource);
return mapping.findForward("resource");
// return new ActionForward("resource");
}

return mapping.findForward("welcome");
}
} 在这个类别中,如果客户端的请求中包括了请求参数resource,则直接返回一个ActionForward,对象为请求参数的内容,原本我们应该是return new ActionForward("resource"),不过为了说明方便,我们将查找struts-config.xml中的forward对象,如果客户端没有包括resource对象,则直接查找"welcome"的forward对象。

 这个类别编译过後,应该位於WEB-INF下并包括package阶层,接著我们要在struts-config.xml中加以定义:

struts-config.xml


name="welcome"
path="/Welcome.do"/>



path="/Welcome"
type="org.apache.struts.actions.ForwardAction"
parameter="/pages/Welcome.jsp"/>

path="/GetAction"
type="onlyfun.caterpillar.GetAction">
name="resource"
path="/pages/showres.jsp"/>




 在定义中,如果是/GetAction开头的URI请求,都会交给GetAction物件来处理,其中标签定义了如果查找"resource"的forward对象,实际该forward的路径, showres.jsp的内容如下,只是简单的显示请求资源的路径而已:

showres.jsp
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@page contentType="text/html; charset=Big5"%>


<bean:message key="welcome.title"/>




请求资源 ${ resource }




 启动Servlet容器,并使用http://localhost:8080/HelloStruts/GetAction.do?resource=/images/struts.jpg来浏览,您会得到以下的内容:



哈罗!Struts!



请求资源 /images/struts.jpg



 Action物件是执行工作的物件,它主要的工作通常有:
*验证使用者的进程状态
*进一步验证表单物件的资讯
*更新应用程式中物件的状态
*处理客户端的请求
*返回ActionForward给ActionServlet

 为了要能够重用Action物件,通常建议不要在Action中加入过多的逻辑,普遍认为Action物件也应属於控制器角色,除了以上必要的工作之外,建议将与业务相关的工作交给辅助类别,减少Action物件中的逻辑,以使得Action物件容易理解它的职责。

 基本上不只有Action物件应保持职责清晰,就Struts而言,它的工作是辅助建议MVC/Model 2架构,每个相关的组件除了这个目的之外,没有其它的目的,Struts建立起来的架构也鼓励重用,应当将业务相关的逻辑交由其它的物件来处理,而不是交给Struts组件。
使用,Action,类别,在,Struts,中,Action
栏目:电脑教程 阅读:1000 2023/12/27
Win7教程 更多>>
U盘教程 更多>>
Win10教程 更多>>
魔法猪学院 更多>>

Copyright © 2015-2023 魔法猪 魔法猪系统重装大师

本站发布的系统仅为个人学习测试使用,请在下载后24小时内删除,不得用于任何商业用途,否则后果自负,请支持购买微软正版软件。

在线客服 查看微信 返回顶部