`

ActionServlet

 
阅读更多

ActionServlet继承自javax.servlet.http.HttpServlet类,其在Struts framework中扮演的角色是中心控制器。它提供一个中心位置来处理全部的终端请求。控制器ActionServlet主要负责将HTTP的客户请求信息组装后,根据配置文件的指定描述,转发到适当的处理器。
按照Servelt的标准,所有得Servlet必须在web配置文件(web.xml)声明。同样,ActoinServlet必须在Web Application配置文件(web.xml)中描述,有关配置信息如下。
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
</servlet>
全部的请求URI以*.do的模式存在并映射到这个servlet,其配置如下:
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
一个该模式的请求URI符合如下格式:

http://www.my_site_name.com/mycontext/actionName.do

中心控制器为所有的表示层请求提供了一个集中的访问点。这个控制器提供的抽象概念减轻了开发者建立公共应用系统服务的困难,如管理视图、会话及表单数据。它也提供一个通用机制如错误及异常处理,导航,国际化,数据验证,数据转换等。
当用户向服务器端提交请求的时候,实际上信息是首先发送到控制器ActionServlet,一旦控制器获得了请求,其就会将请求信息传交给一些辅助类(help classes)处理。这些辅助类知道如何去处理与请求信息所对应的业务操作。在Struts中,这个辅助类就是org.apache.struts.action.Action。通常开发者需要自己继承Aciton类,从而实现自己的Action实例。

 

 

 -------------------------------------------------------------------------------------------------------------------

这是struts中ActionServlet中程序,下面程序中//**********//之间的那段程序是什么意思,初学java,最好每句都详细的解释解释,求各位高手帮帮忙

public void service(ServletRequest arg0, ServletResponse arg1)
   throws ServletException, IOException {
  // TODO Auto-generated method stub
  HttpServletRequest request = (HttpServletRequest)arg0;
  HttpServletResponse response = (HttpServletResponse)arg1;
  ConfigModal modal = ConfigLoader.mvc_config.get(this.getPath(request.getRequestURI()));
  ActionForm form = modal.getFormtype();
  Field far[] = form.getClass().getDeclaredFields();
  for(Field f:far)
  {
   f.setAccessible(true);
   try {
    f.set(form, request.getParameter(f.getName()));
   } catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IllegalAccessException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   f.setAccessible(false);
  }
  Error error = new Error();//****************************//
  if(modal.getValidate().equals("true"))
  {
   error = form.validate();
  }
 
  if(error.iserror())
  {
   response.getWriter().println(modal.getInput());
  }else
  {
   String method = "execute";
   if(modal.getParameter()!=null&&request.getParameter(modal.getParameter())!=null)
   {
    method = request.getParameter(modal.getParameter());
   }
   Action action = modal.getAction();
   try {
    Method m = action.getClass().getDeclaredMethod(method, new Class[]{ActionForm.class,ActionMapping.class,HttpServletRequest.class,HttpServletResponse.class});
    String message = (String) m.invoke(action, new Object[]{form,modal.getActionMapping(),request,response});
    response.getWriter().println(message);
   } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }//****************************************//
 
 }
 
 private String getPath(String path)
 {
  return path.substring(path.lastIndexOf("/")+1,path.lastIndexOf("."));
 }
 
 public void destroy()
 {
  ServletContext context = this.getServletContext();
  List<PlugIn> plugin = ConfigLoader.plugin;
  for(PlugIn p:plugin)
  {
   p.plugIndestroy(new ActionContext(context));
  }
 }

}

 

 

 

 

不知道你对struts框架了解得怎么样,要是都熟悉这个框架的设计的话,还得懂得反射,xml文档知识。打标号之间的程序主要是根据页面的请求获得需要执行此次请求的方法逻辑,然后把执行结果返回给前台:
请求数据封装在from模型中
Error error = new Error();//****************************//
if(modal.getValidate().equals("true"))
{
error = form.validate();
}
通过上面对form中的数据进行验证。
if(error.iserror())
{
response.getWriter().println(modal.getInput());
}
上面是验证失败返回modal.getInput()这个页面。
String method = "execute";
if(modal.getParameter()!=null&&request.getParameter(modal.getParameter())!=null)
{
method = request.getParameter(modal.getParameter());
}
上面程序是根据xml中action的配置文件找到需要处理此次请求的方法名字--method。

Action action = modal.getAction();
try {
Method m = action.getClass().getDeclaredMethod(method, new Class[]{ActionForm.class,ActionMapping.class,HttpServletRequest.class,HttpServletResponse.class});
String message = (String) m.invoke(action, new Object[]{form,modal.getActionMapping(),request,response});
response.getWriter().println(message);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
找到方法名后,在找到具体执行者action用反射执行找到的方法,结果返回前台

 

 

验证某个值,如果值错误,那么返回输入的那个页面getInput即输入的地方,如果正确,那么执行execute方法,如果是带parameter参数的话,那么获取parameter参数,然后赋值给method变量

 

 ----------------------------------------------------------------------------------------------------------

 

http://blog.sina.com.cn/s/blog_6d3fcc7e01017wh4.html

 

 

由于最近见到的关于strutshibernate等的基础问题很少受新人关注,所以,写了这些东西,还是希望能打好底子,以后会陆续的写些其他的各方面开发中会用到的东西。好,入正题。

ActionServlet简介
ActionServlet
Struts中最核心的部分,我们从这里开始。它相当于中央控制器,我们来看看他是怎么样实现核心Control的。它是通过org.apache.struts.action.ActionServlet来实现的,所有的请求通过它进行中转。

ActionServlet的工作原理
ActionServlet
它负责接受所有的request,并且产生相对应的response到请求的页面。但是它怎么知道对应呢?这里就存在一个map文件(我习惯这么叫它)Struts-config.xml,它包括了resource文件、如何到达下一个页面、下面一个页面是什么、页面的校验规则、怎么样显示错误信息(如ActionMessage的使用)的定义。

一般来说,它(ActionServlet)通常是处于待命状态,一旦容器(j2ee的容器,入tomcatjboss,glassfish等等)接受到请求,它对应的dogetdopost将会处理对应的getpost请求,这里需要注意的是,外部的浏览器不能直接调用这些do××××请求,只能是由容器控制。

ActionServlet收到请求之后,它将会调用RequestProccessor对象来处理httprequest请求的消息。如checkerrors等。下一步,它根据浏览器的请求路径、struts-config.xml文件中对应的请求路径和Action Bean的对应关系来调用对应的Action Beanexcute方法,action bean处理完成之后,调用业务模型,调用完成之后,将含有返回下一个页面返回信息的ActionForward对象传给ActionServlet,然后由actionservlet转换到下一个页面返回给浏览器。工作原理如图所示:

 

 

 

 

 

-------------------------------------------------------------------------

 

分享到:
评论

相关推荐

    ActionServlet深入探讨

    ### ActionServlet深入探讨 #### 一、概述 在Java Web开发中,特别是使用Struts框架进行Web应用程序构建的过程中,ActionServlet扮演着至关重要的角色。它作为Struts框架的核心组件之一,负责处理用户请求,并将其...

    Struts 源码学习之ActionServlet

    ### Struts 源码学习之ActionServlet #### 一、引言 在Java Web开发领域,Struts框架因其简洁的MVC(Model-View-Controller)架构模式而备受开发者青睐。本文旨在深入剖析Struts框架的核心组件之一——`Action...

    ActionServlet.java

    ActionServlet.java

    ActionServlet demo

    【ActionServlet demo】是一个基于Java和Servlet技术的示例项目,它主要展示了如何在Web应用程序中使用Servlet来处理用户请求并驱动业务逻辑。这个项目可能与Struts 1.3框架相结合,Struts是一个广泛使用的MVC(模型...

    structs in action中文完全版\9. 扩展 ActionServlet.pdf

    ### Struts 中扩展 ActionServlet 的关键知识点 #### 一、ActionServlet 在 Struts 框架中的角色 在 Struts 框架中,`ActionServlet` 起着核心控制器的作用,它作为整个框架的核心组件,负责接收来自客户端的请求...

    Struts1框架执行原理(附Action、ActionServlet、ActionForm工作机制)

    本篇文章将深入解析Struts1框架的执行原理,以及Action、ActionServlet、ActionForm三个关键组件的工作机制。 首先,我们来看Struts1的工作流程: 1. 用户通过浏览器发起HTTP请求,请求的目标是应用中的一个JSP或...

    web_xml中ActionServlet中的属性

    在Struts框架中,`ActionServlet`是一个关键的Servlet实现,它负责管理应用程序的业务逻辑和视图呈现。`web.xml`文件是部署描述符,用于配置Web应用的各个组件,包括`ActionServlet`的属性。以下是对`web.xml`中`...

    struts1之ActionServlet详解_动力节点Java学院整理

    struts1之ActionServlet详解 struts1框架中的ActionServlet是Struts1架构的核心组件之一,负责处理用户请求、交互ActionForm、ActionMapping和Action等组件,以完成用户请求。下面将详细介绍ActionServlet的工作...

    servlet模拟struts1工作原理

    Struts1框架的核心组件包括ActionServlet、ActionForm、Action、Tiles以及配置文件(struts-config.xml)。ActionServlet作为控制器,负责拦截所有的HTTP请求,解析请求中的信息,并根据struts-config.xml配置文件来...

    servlet与struts简介

    2. 请求被ActionServlet捕获,ActionServlet根据配置文件找到对应的Action。 3. Action处理请求,可能会调用业务逻辑层(通常是Model层)。 4. Action执行完成后,返回一个结果,该结果定义了下一步应该显示哪个页面...

    Struts-Action核心代码

    在Struts中,`ActionServlet`是关键组件之一,它是Struts框架与Servlet容器之间的桥梁。 **ActionServlet** 是Struts框架的核心控制器,它是一个定制的Servlet,负责处理所有的HTTP请求。当用户发起一个请求时,...

    外文翻译 stus MVC

    ActionServlet is the Command part of the MVC implementation and is the core of the Framework. ActionServlet (Command) creates and uses Action, an ActionForm, and ActionForward. As mentioned earlier, ...

    Web.xml中配置Struts[参考].pdf

    在上面的代码中,我们定义了一个名为“action”的Servlet,它的类名是org.apache.struts.action.ActionServlet,这是Struts框架提供的ActionServlet实现类。 其次,我们需要配置&lt;servlet-mapping&gt;元素,以便指定...

    servlet + javabean + stutas

    Struts提供了控制器Servlet(ActionServlet)来协调请求处理,同时提供了Action和ActionForm类来处理业务逻辑和表单数据。ActionForm接收用户输入,Action则执行相应的业务逻辑并调用服务层(Service Layer)。此外...

    java笔试题最新最好,最全面

    根据给定文件的信息,我们可以提炼出与Java笔试相关的知识点,主要围绕Struts框架中的ActionServlet组件进行阐述。 ### Java笔试知识点:Struts框架中的ActionServlet #### 一、ActionServlet的作用与配置 - **...

    Struts原理、开发及项目实施

    即ActionServlet,而ActionServlet的核心就是Struts-config.xml,Struts-config.xml集中了所有页面的导航定义。对于大型的WEB项目,通过此配置文件即可迅速把握其脉络,这不管是对于前期的开发,还是后期的维护或...

    action和servlet混合使用

    对于action和servlet混用的问题进行说明和解答,action和servlet混合使用会产生一些影响。

    servlet分发控制器

    在Struts 1框架中,ActionServlet是控制器的主要实现,它接收到请求后会根据配置信息(如struts-config.xml)将请求转发给相应的Action类处理。而在一个简单的自定义Controller中,`doProcess`方法扮演了类似的角色...

    struts 学习笔记

    - ActionServlet:作为核心控制器,ActionServlet负责解析请求,调用适当的Action,并根据Action的执行结果决定转向哪个JSP页面。 - Action类:开发者自定义的Action子类,实现了具体的业务逻辑,它们通常处理HTTP...

    初学者入门:Structs中基本配置入门

    无论应用中有多少个子应用,都只需要配置一个ActionServlet即可,因为ActionServlet支持多线程处理。 2. **映射ActionServlet** ```xml &lt;servlet-mapping&gt; &lt;servlet-name&gt;action&lt;/servlet-name&gt; *.do &lt;/...

Global site tag (gtag.js) - Google Analytics