struts之ActionServlet
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文件中如下配置:
最新文章
- 【转】[fix] Wireshark error: There are no interfaces on which a capture can be done. on Mac OS X
- DispatcherHelper
- explain mysql的type字段,索引的类型
- js方法参数默认值设置
- 获取iOS设备信息的编程接口
- 开发设计模式(一)Command模式
- Libnids---编写网络应用程序的利器
- 引用Excel时 未在本地计算机上注册ace.oledb.12.0
- supesite 相关 修改
- MHA环境的搭建
- Android中ListView嵌套GridView的简单消息流UI(解决宽高问题)
- Linux开机自启动
- Luogu1574 超级数
- CountDownLatch原理及使用场景
- AVL树,红黑树
- 精彩看点 | GIAC大会PPT+视频合集全量放送!
- JAVA基础知识总结:十五
- openssl命令实例
- kbmmw 的HTTPSmartService入门
- vue-cli 3.0之跨域请求代理配置及axios路径配置
热门文章
- Kali Linux更新和配置
- github fork代码后提交
- java.lang.SecurityException: class ";javax.servlet.ServletRegistration";'s signer information does not match signer information of other classes in the same package
- mac终端命令--自动补全
- 思维+双指针+环——cf1244F
- NodeJS+Express+mySQL服务端开发详解
- [7.18NOIP模拟测试5]星际旅行 题解
- RabbitMQ使用(一)
- 使用U盘或在本地电脑作为git远程仓库进行托管
- Bagging vs Boosting vs Stacking