`

Strus1源码心得

阅读更多

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。不过这只针对当前请求。

分享到:
评论

相关推荐

    struts+hibernate实现在线音乐系统源码

    总之,"struts+hibernate实现在线音乐系统源码"是一个实用的项目,它整合了两个主流的Java开发框架,实现了丰富的功能。通过研究这个项目,开发者不仅可以提升对Struts和Hibernate的理解,还能掌握在线音乐服务的...

    struts 培训班源码及笔记

    这个“Struts培训班源码及笔记”资料集合显然提供了深入学习和理解Struts框架的宝贵资源。 首先,我们来看看`code`目录中的源码。这部分内容可能是学员在培训班中编写的示例代码或者是实际项目中的应用实例。通过...

    SSH项目源码及心得体会

    这个"SSH项目源码及心得体会"的资源对于初学者来说尤其宝贵,因为它不仅包含了实际项目的源代码,还记录了开发者在整合和使用SSH框架过程中的心得与经验。 Struts2是MVC(Model-View-Controller)架构模式的一种...

    jsp源码新闻文章Struts新闻管理系统学习修正版-newsmanager

    根据提供的文件信息,我们可以深入探讨与“jsp源码新闻文章Struts新闻管理系统学习修正版-newsmanager”相关的几个关键知识点。 ### 一、JSP技术概述 JSP(Java Server Pages)是一种基于Java技术的服务器端网页...

    activit5.6+spring3+struts 项目和学习文档

    1. csproject.7z:这很可能是整个项目的源码压缩包,包含了整合后的Activiti、Spring和Struts的工程结构,包括配置文件、Java源代码、Web资源等。解压后,开发者可以深入研究项目的实现细节,理解三者是如何协同工作...

    Struts2_内核中文文档.pdf

    - **深入学习源码:**为了更好地理解Struts2的工作机制,建议下载并学习`struts2-core.jar`和`struts2-plugin-api.jar`这两个核心jar包。 - **实践操作:**尝试自己编写简单的Struts2应用程序,逐步理解框架的每一个...

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

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

    Struts 1.3.8 学习笔记(五)

    这篇博客可能是作者在实际项目中使用 Struts 1.3.8 版本时的心得体会,分享了如何利用该框架来构建应用,同时也可能涉及了某些工具的使用技巧。 Struts 作为 MVC(Model-View-Controller)设计模式的实现,核心在于...

    struts开发小结

    综上所述,这篇博客可能涵盖了Struts 2的基础知识,特别是关于Action、拦截器、结果类型、异常处理等方面的经验分享,同时可能提及了一些实用工具或插件的使用心得。如果你希望深入学习Struts 2,可以参考提供的博文...

    Struts in Action

    在描述中提到的博文链接虽然未给出具体内容,但通常这类博客会分享作者在阅读或应用《Struts in Action》一书时的心得体会,可能包含对某些章节的理解、实际项目中的应用示例或者遇到的问题及解决方案。遗憾的是,...

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

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

    四个SSH框架实战项目源码加笔记

    1. **Struts框架**:Struts是一个开放源代码的Web应用程序框架,它基于MVC设计模式,主要用于处理HTTP请求并将其转发给相应的控制器进行处理。在这些项目中,你将看到Action类如何接收和处理请求,以及如何通过配置...

    【Struts专家Ted Husted系列】Struts2其实也可以CoC风格编程(三)完

    同时,通过博客链接(https://superleo.iteye.com/blog/166259),我们可以获取更多关于Struts2 CoC风格编程的深入讲解和实践心得。 总的来说,Struts2的CoC编程模式简化了开发者的工作,使他们能够更加高效地构建...

    There are some codes

    Struts 1和Struts 2都是基于MVC(Model-View-Controller)设计模式的,用于构建动态、交互式的Web应用程序。如果压缩包中的文件是Struts的源码,那么分析它们将有助于开发者深入理解框架的工作机制,包括请求处理...

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

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

    SSH整合心得01

    1. **安装和配置环境**:确保你的开发环境中已经安装了Java、Apache Tomcat服务器以及IDE(如Eclipse或IntelliJ IDEA)。同时,你需要下载Struts2、Spring和Hibernate的最新稳定版本,并将其添加到项目的类路径中。 ...

    Jfinal使用心得以及架构

    **JFinal 使用心得与架构解析** JFinal 是一个基于 Java 的轻量级 Web 开发框架,它以 MVC(Model-View-Controller)架构为基础,强调“简洁高效”的设计理念,为开发者提供了一个快速开发项目的平台。在本文中,...

    基于Java+JSP的家庭食谱系统毕业设计实现+源码毕业设计实现+源码.rar

    3. 框架:可能使用MVC(Model-View-Controller)架构,例如Struts2或Spring MVC,来组织应用程序的结构和流程。 四、源码解析 源码部分可能包括以下几个关键文件夹: - src:存放Java源代码,包括业务逻辑、数据...

Global site tag (gtag.js) - Google Analytics