`
cheng5259
  • 浏览: 61995 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

ActionServlet

阅读更多



  Struts
详解之-ActionServlet

 

      由于最近见到的关于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
调用jsp的过程如下:



ActionServlet
的代码结构如下:



配置ActionServlet

Actionservlet
是在web.xml文件中配置的,可以看出,他的配置和一般的servlet没有什么区别。

view plaincopy to clipboardprint?

1.  <?xml version="1.0" encoding="UTF-8"?>  

2.  <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  

3.    <servlet>  

4.      <!-- 定义actionservlet-->  

5.      <servlet-name>action</servlet-name>  

6.      <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>  

7.      <!-- 初始化actionservlet-->  

8.      <init-param>  

9.        <param-name>config</param-name>  

10.        <param-value>/WEB-INF/struts-config.xml</param-value>  

11.      </init-param>  

12.      <init-param>  

13.        <param-name>debug</param-name>  

14.        <param-value>3</param-value>  

15.      </init-param>  

16.      <init-param>  

17.        <param-name>detail</param-name>  

18.        <param-value>3</param-value>  

19.      </init-param>  

20.      <load-on-startup>0</load-on-startup>  

21.    </servlet>  

22.      <!-- 定义映射-->  

23.    <servlet-mapping>  

24.      <servlet-name>action</servlet-name>  

25.      <url-pattern>*.do</url-pattern>  

26.    </servlet-mapping>  

27.  </web-app>  

 

 

 

 

 

 

struts流程

struts启动
 
启动容器 -> 读取web.xml文件 -> load-on-startup -> 创建ActionServlet

ActionServlet的构建
 ActionServlet[init()]
 -> initInternal()
日志错误警告信息
 -> initOther()
读取web.xml config参数
 -> initServlet()
读取web.xmlDTD验证struts-config语法
 -> initModuleConfig()
读取struts文件返回ModuleConfig对象放到ServletContext
 -> initModuleMessageResources()
读取struts文件的MessageResources 放到ServletContext
 —> initModuleDataSources()
读取struts文件的DataSources
 -> initModulePlugIns()
读取struts文件的所有插件


用户View --请求.do--> ActionServlet
 ActionServlet
接收到请求{doPost doGet}
 ->
调用prcess()方法[在此方法中实现如下]
 ->
调用ModuleUtils类的 selectModule方法来选择处理此请求的模块
 ->
把应用模块相关的ModuleConfig MessageResources放到request
 ->
获得一个RequestProccessor实例调用其process()帮助处理

RequestProccessorprocess处理细节
 ->processMultipart()
要是提交方式为post而且类型为Multipart则返回从新包装的HttpServletRequest对象
 ->processPath()
获取url路径以便选择struts Action组件
 ->processLocale()
把用户提交的Locale信息保存到session
 ->processContent()
设置response.setContentType的值
 ->processNoCache()
设置报头Cache-Control Pragma Expires的值
 ->processPreprocess()
直接返回true 子类可以覆盖该方法实现自己的操作
 ->processMapping()
查找对应的ActionMapping 不存在则返回错误信息
 ->processRoles()
判断对应的Action是否配置了安全角色 用户是否有权限
 ->processActionForm()
查找ActionMapping是否配置ActionForm 有则查找该实例不存在则创建
 ->processPopulate()
查找ActionMapping是否配置ActionForm 有则调用reset方法清空再装载表单数据
 ->processValidate()
调用ActionFormvalidate方法返回ActionErrors 要是存在ActionMessage对象则验证失败
 ->processForward()
查找ActionMapping是否配置forward 有则采用forward结束流程
 ->processInclude()
查找ActionMapping是否配置include 有则采用include结束流程
 ->processActionCreate()
查找是否有对应的Action实例 不存在则创建
 ->processActionPerform()
调用Actionexecute方法
 ->processForwardConfig()
最后这个不用我说了吧?!

  • 大小: 15.9 KB
  • 大小: 12.3 KB
  • 大小: 57.2 KB
分享到:
评论
1 楼 xiexifeng113 2010-09-14  
 

相关推荐

    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