ActionServlet类是Struts框架的内置核心控制器组件,它继承了javax. servlet.http.HttpServlet类,Struts的启动一般从加载ActionServlet开始,因此它在MVC模型中扮演中央控制器的角色。

  在具体实现时,它首先要判断Action对象是否存在,如果不存在则先创建该对象;在请求被接收后,控制器会将其传递给一个Action实例,这一过程同样会判断实例是否存在,如果不存在则需先创建该实例的execute()方法。

  ActionServlet是一个标准的Servlet,在web.xml文件中配置,该Servlet用于拦截所有的HTTP请求。因此,应将Servlet配置成自启动Servlet,即为该Servlet配置load-on-startup属性

  用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServlet根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用Action的execute()方法。Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生成动态的网页,返回给客户。

下面时Struts的三大主要组件 
ActionServlet组件:充当Struts框架的中央控制器 
RequestProcessor组件:充当每个子应用模块的请求处理器 
Action组件:真正来处理一项具体的业务.

一. Struts的init()方法

  Struts应用中只存在ActionServlet的一个实例,Servlet容器在启动时,或者用户首次请求ActionServlet时加载ActionServlet类.在这两种情况下,servlet容器都会在ActionServlet容器被加载后立即执行它的init()方法,这可以保证ActionServlet处理用户请求时已经被初始化

  将各个子模块应用(除了默认的)的前缀存到一个字符数组中,并放到servletcontext中,对于默认的子应用模块,在appclication范围内存放他的MoudleConfig实例的key为“org.apache.struts.action.MODULE”,其他模块如/account,存放的key为org.apache.struts.action.MODULE/account,消息,数据源和插件等部分存在servletcontext的key和上述方法类似,不在说明.

二.ActionServlet的process方法 
  当ActionServlet接受到HTTP请求后,在doget()或doPost()方法中都会调用process()方法来处理请求.

三. 扩展ActionServlet类 
从Struts1.1开始,为减轻ActionServlet的负担,多数功能已经移到RequestProcessor类中,所以基本不用扩展ActionServlet类

  如果需要创建自己的ActionServlet,则可以创建一个它的子类.覆盖init()方法(或其他方法),可以写一些自己的操作,但要先调用super.init();

  扩展完类后,还应该在web.xml文件中如下配置:

最新文章

  1. 【转】[fix] Wireshark error: There are no interfaces on which a capture can be done. on Mac OS X
  2. DispatcherHelper
  3. explain mysql的type字段,索引的类型
  4. js方法参数默认值设置
  5. 获取iOS设备信息的编程接口
  6. 开发设计模式(一)Command模式
  7. Libnids---编写网络应用程序的利器
  8. 引用Excel时 未在本地计算机上注册ace.oledb.12.0
  9. supesite 相关 修改
  10. MHA环境的搭建
  11. Android中ListView嵌套GridView的简单消息流UI(解决宽高问题)
  12. Linux开机自启动
  13. Luogu1574 超级数
  14. CountDownLatch原理及使用场景
  15. AVL树,红黑树
  16. 精彩看点 | GIAC大会PPT+视频合集全量放送!
  17. JAVA基础知识总结:十五
  18. openssl命令实例
  19. kbmmw 的HTTPSmartService入门
  20. vue-cli 3.0之跨域请求代理配置及axios路径配置

热门文章

  1. Kali Linux更新和配置
  2. github fork代码后提交
  3. java.lang.SecurityException: class "javax.servlet.ServletRegistration"'s signer information does not match signer information of other classes in the same package
  4. mac终端命令--自动补全
  5. 思维+双指针+环——cf1244F
  6. NodeJS+Express+mySQL服务端开发详解
  7. [7.18NOIP模拟测试5]星际旅行 题解
  8. RabbitMQ使用(一)
  9. 使用U盘或在本地电脑作为git远程仓库进行托管
  10. Bagging vs Boosting vs Stacking