`
terry0501
  • 浏览: 305124 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

struts1源码心得

 
阅读更多

struts1 = jsp + tag + servlet。struts1最核心的是ActionServlet。
web.xml是struts1框架中最基本的入口。
定义了一个标准的servlet,名字叫action,继承ActionServlet。.do的请求都被action拦截。
servlet的生命周期:当web容器启动的时候,加载init方法,然后执行service方法。当web容器退出或关闭时,才把servlet销毁。

ActionServlet源码

ActionServlet继承HttpServlet -> 继承GenericServlet -> 继承Object
Servlet规范的顶级接口:Servlet。servlet里面只有一个方法就是service方法,tomcat标准的是调service的方法,它是对doget,dopost进行了封装。
request和response都是tomcat封装好的方法,然后再传进servlet里。

GenericServlet是个抽象类,它实现Servilet接口,主要是做个助手类或可以说是个适配器,起个承上启下的作用。里面是servlet的生命周期方法

HttpServlet是个抽象类,它继承GenericServlet抽象类。它只处理http协议。真正在service里面处理doget,dopost等区别servlet。
(总结当一个用户发送一个请求的时候,tomcat最后还是调用了service方法,Service方法里面调用
request.getMethod对doget,head,dopost等逻辑处理判断)
先拿到客户端请求的方法,然后判断用get方法提交还是用post方法提交或head方法。
不赞成覆盖service方法,这样会把doget方法和doPost方法等方法覆盖掉,这样就会打断servlet正常的执行流程。所以真正执行的方法还是doget方法和doPost方法。
http协议是个超文本传输协议。
ftp协议是个下载,上传文件的协议。
                                       
ActionServlet类
Struts的错误提示都在它的内置资源文件里。
init方法是一系列的东西进行初始化。
init方法执行过程
1,(initInternal)初始化内置文件 ->

2,(initOther)通过getServletConfig().getInitParameter()方法初始化Struts的核心web.xml中actionServlet的配置
   (可以把web.xml里的struts-config.xml删掉,前提是web.xml要在web-inf目录下,因为Struts默认了struts-config.xml的路径)->
  
3,(initServlet)把web中当前的servlet配置放入当前类里面的Struts。
digester是一个经常使用的工具,是将xml文件转换成java对象。把xml放入this里,将xml转换成java对象,对象是ActionServlet。
(拿到web/inf/下面的文件:getServletContext().getResourceAsStream("文件名")) ->

4,(initChain)初始化Struts1里面的Chain框架strut1
单一职责链.
chain。初始化chain是组织执行一些复杂的处理流程。如果某个环节失败了,那这条链就会中断。还有chain还可以在链中插入方块(节点)。小方块由command表示。ActionCommandBase是小方块的父类。
对外扩展是开放的,对内修改是封闭的,这就是所谓的开关原则。

Struts解析
struts-config.xml初始化

通过字符串加载,依赖性就少一点。
1,在initModuleConfig里开始解析struts-config.xml。把struts-config.xml通过digester转换成moduleconfig对象。
2,初始化struts的资源文件,解析后的资源文件放在getServletContext()里
3,初始化struts的插件。
4,初始化formBean,拿到配置的formbean,处理formbean扩展,判断是否设定formbean的类型。然后检查是不是动态formbean。
5,初始化forward,检查它的扩展,判断是否设定path。
6,初始化异常。
7,初始化action,拿到配置的action,处理action扩展。然后看action里的forward。
8, moduleConfig.freeze()初始化冻结,冻结当前的模块的配置。因为初始化只执行一次。
9,拿初始化参数,它会判断还有没有其他的struts-config.xml文件,如果有,就把当前struts-config.xml进行一次初始化操作。然 后销毁掉这个对象。并释放内存。



Struts处理请求
.do发生的请求被actionServlet拦截下来,如果是get请求,就调用doGet方法,如果是post请求,就调用doPost方法。doGet和doPost都会调用process方法,统一处理。则在struts1 1.3.8版本之前处理请求都是在RequestProcess内中.

struts是怎么处理.do请求

所有的.do请求有ActionServlet所拦截,
.do请求是通过职责链模式实现的
struts真正的处理请求不是ActionServlet,而是链。
通过传入用户请求,生成一个上下文的context。不过这只针对当前请求。

分享到:
评论

相关推荐

    (3.0版本)自己写的struts2+hibernate+spring实例

    外加一些关于struts2和hibernate的技巧心得整理. 说一下这次3.0更新的内容.可能大家在我的博客里面已经看到了相关的日志.我懒.下面就把那个日志抽出来当说明了啊.有兴趣的就下载下来瞅瞅.偶也是菜鸟的.写的不好不要...

    基于ssh开发的实例代码(spring+struts+hibernate)

    此为我本人对SSH(spring+struts+hibernate)学习之后的心得,自己写的一个简单的基于SSH(spring+struts+hibernate)框架开发的小例子,里面有完成的源码,简单易懂,适合初学者。希望大家共同学习!

    用Struts、Hibernate和display超简单实现分页

    一、含演示数据库建立脚本(较简单) 二、使用Struts、Hibernate和display超简单的实现了分页,你不用在页面上再写很多和很多判断,简单到只需要几行语句: ... 三、由于使用了display,所以自动实现了Excel ...

    网上体育商城的设计与实现(论文+源码)-kaic.doc

    第1章 前 言 1.1系统开发背景 1.2国内外研究现状 1.3系统开发目的及意义 第2章 相关技术工具介绍 2.1 Struts2与MVC 2.2 Hibernate 2.3 Spring 2.4开发工具以及环境 第3章 系统的分析 3.1 系统可行性分析 3.2 系统...

    SSH辅助教学系统jsp开发语言mysql数据库myeclipse设计java编程

    一、源码特点 JSP SSH辅助教学系统 是一套完善的WEB设计系统(struts2+spring+hibernate),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 二、功能介绍 系统主要有...

    vue-reading:Vue源码阅读

    Vue.js源码的分析过程,详细记录了Vue源码阅读过程中的所有的心得和收获,通过阅读的过程大大加深对Vue的理解。 核心 Vue的合并策略 Vue双向绑定的实现 Vue生命周期 Vue组件树生成过程 Vue初始化过程 Vue Diff过程 ...

    java面试题目与技巧1

    │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+Hibernate+Spring轻量级J2EE...

    java面试题以及技巧

    │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+Hibernate+Spring轻量级J2EE...

    java面试题及技巧4

    │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+Hibernate+Spring轻量级J2EE...

    java面试题及技巧3

    │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+Hibernate+Spring轻量级J2EE...

    java面试题以及技巧6

    │ J2EE综合--Struts常见错误的全面汇总.txt │ java程序员面试资料.zip │ JAVA笔试题(上海释锐).pdf │ MIME简介.txt │ SCJP试题详解.pdf │ SQL面试题_心灵深处.htm │ Struts+Hibernate+Spring轻量级J2EE...

    javaeye热点阅读

    1.18 Struts2教程2:处理一个form多个submit 2. Ruby 2.1 Ruby on Rails环境下工作流的实现 2.2 让Ruby On Rails走进企业开发 2.3 让Ruby On Rails走进嵌入式开发2.4 用Ruby脚本抓取百度MP3新歌Top 100发布到闲聊3. ...

    最新理财通的设计与实现+jsp.zip

    最新理财通的设计与实现Jsp.zip是一个针对个人理财管理需求设计的开发项目,它采用JSP(Java Server Pages)作为后端技术,并结合了Spring、Hibernate、Struts等框架以及MySQL数据库进行开发。该项目旨在为用户提供...

Global site tag (gtag.js) - Google Analytics