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

Struts 1实现原理之我理解

阅读更多

Struts是在servlet基础上设计的一种框架。下面看一段servletweb.xml配置的配置。

servlet的web.xml

在其配置文件中可以看出WEB容器会将浏览的每一个地址交给一个对应的servlet类来处理,从而每一个路径都必须对应一个servlet类。在做servlet开发时,其servlet仅仅将路径交给相应servlet类来处理,并没有对页面提交过来的数据进行一些处理,然而在开发时往往要求对页面数据进行一些处理。这是servlet的不足之处,Struts框架弥补了servlet的不足之处。

下面是struts框架总的执行流程:

struts总流程

在做servlet开发时,配置web.xml中可以采用*号通配符的形式来配置浏览器的路径例如:<url-pattern>*.do</url-pattern>,意思是说将以.do结尾的路径都交给这个servlet类来处理。这样就明白了struts框架中.doActionServlet了,意思就是说在struts中会将所有以.do结尾的路径的请求都会交给ActionServlet(一个大的servlet类)来处理。在struts框架中每一个具体路径交给ActionServlet时,它会根据struts-config.xml的配置信息找到该路径对应的Action类。从而将这个路径交给其对应Action来处理。

web.xml配置struts信息

在struts的Action类的execute方法中有四个参数,分别是ActionMapping 类、ActionForm类、HttpRequest类、HttpResponse类。实际上这些参数是不需要手动来传值的,ActionServet传过来的。

ActionMapping类:该类实际上ActionServlet读取struts配置文件中<forward name=”***” path=”***.jsp”></forward>标签生成的一个类,它的作用是把当前Action<forward></forward>标签对中path属性中的jsp文件关联。在一个Action中可以有多个<forward><forward>标签对。从而得知ActionMapping 可以包含多个forward标签对的信息。

ActionForm类:该类实际上是ActionServlet类读取struts配置文件中的:

<form-bean></form-bean>标签对中type属性(通过反射)生成一个 formbean对象,它实际可以封装页面提交过来数据。

其余两个没有什么好讲的了。

 

看看下面一张图就会明白struts框架到底做了那些事。

struts实现细节

从这张流程图中可以看出struts是怎么做的。

struts框架中通过反射技术将页面中form提交过来数据封装成一个formbean对象传给 Action类中execute方法中的ActionForm参数(也就是前面提到的ActionForm),struts中也提供了直接通过request请求来获得参数,但是既然使用了struts框架就应该使用前面的方法来获得页面数据。

ActionForm的类中提供了valiedate()方法,它返回一个ActionError类的对象。如果该对象为空,说明校验没有出错,action不会跳转到input视图(也就是struts配置文件中<action></action>标签队中input属性,该属性的作用是校验出错跳转的页面,一般情况下也就是输入数据的页面,这下明白为什么叫input而不叫error了吧)。如果校验成功则把该参数传给对应的Action来处理。在Action处理完这些数据后,会依据要求传到不同页面。这就是一个完整的struts1的实现原理。

 

 

 

分享到:
评论
5 楼 fengsky491 2010-03-10  
// Return any existing Action instance of this class 
instance = (Action) actions.get(className);

他只创建一个实例,共享成员变量,怎么线程安全?
4 楼 mercyblitz 2010-03-10  
lydawen 写道
说得直白点。
这也就是说为什么struts1的action不是线程安全。然后就是执行它的execute()方法,再就是forward



Struts1是线程安全的,

看代码:
 synchronized (actions) {

            // Return any existing Action instance of this class
            instance = (Action) actions.get(className);
            if (instance != null) {
                if (log.isTraceEnabled()) {
                    log.trace("  Returning existing Action instance");
                }
                return (instance);
            }
...


每个Action都是线程安全的构造,加上Java方法的重进入,所以Action的实例是线程安全的。



3 楼 esanone 2010-03-09  
恩,分析的很好。
2 楼 lydawen 2010-03-09  
说得直白点。
以*.do为例,容器把符合*.do的请求给ActionServlet,ActionServlet根据请求.do前面的路径找map里是否有对应的action(类)。根据这个路径看保存action 映射的map里是否有,如有则直接获取否则创建一个并放到这个map中去,这也就是说为什么struts1的action不是线程安全。然后就是执行它的execute()方法,再就是forward
1 楼 zygjavae 2010-03-09  
这不是在总结czbk的视频吗。。。

相关推荐

    深入理解struts2原理之自己实现struts2框架源码

    作为struts2的初学者,有时候理解struts框架的原理,网上看图会一头雾水,所以要是能自己体会实现struts框架的整个过程,对理解struts思路会更加清晰一些,这个源码就是自己实现的过程,代码有详细注释

    struts源码,更好的理解框架实现原理

    struts源码,更好的理解框架实现原理

    Struts原理、开发及项目实施

    Struts原理、开发及项目实施 Holen 2002-9-12 &lt;br/&gt;1、 摘要 2、 关键词 3、 Framework 4、 Struts的起源 5、 Struts工作原理 6、 Struts安装 7、 一个实例 8、 Struts优缺点...

    Struts 2 自定义MVC 框架

    为更好的了解struts2的框架的原理 自定义框架 去更好的理解和认识struts

    Struts2 in action中文版

    第1章 Struts 2:现代Web框架 2 1.1 Web应用程序:快速学习 2 1.1.1 构建Web应用程序 2 1.1.2 基础技术简介 3 1.1.3 深入研究 6 1.2 Web应用程序框架 7 1.2.1 什么是框架 7 1.2.2 为什么使用框架 8 1.3 Struts 2框架...

    Struts拦截器及token拦截器防止重复提交例子源码

    Struts2拦截器的实现原理相对简单,当请求struts2的action时,Struts 2会查找配置文件,并根据其配置实例化相对的 拦截器对象,然后串成一个列表,最后一个一个地调用列表中的拦截器 三、定义Struts2拦截器。 ...

    自己写的struts2框架

    实现struts2框架的简单原理,帮助新人深入理解,代码中有注释

    webwork in action 第一卷(高清中文版1/3)

    关键还是要理解struts2框架的原理、思想,掌握了本质的东西那么再想忘掉也难了。从这个角度来讲,本书是struts2最佳参考书,也是众多讲解框架类书籍的典范。  不得不提的是,本书的翻译质量很高,看得出译者非常...

    图书管理系统(struts+hibernate+spring+ext).rar

    图书管理系统是一个基于Struts+Hibernate+Spring+Ext...此外,资料包还提供了详细的文档和注释,帮助开发者更好地理解系统的设计和实现原理。总之,这个图书管理系统资料包是一个非常实用的计算机专业JSP源码资源,对于

    Java求职面试宝典各大公司常考知识点

    Struts+Hibernate+Spring面试题合集 1 1. Hibernate部分 2 1.1. Hibernate工作原理 2 1.2. 什么是Hibernate的并发机制?怎么处理并发问题? 2 1.3. Hibernate自带的分页机制是什么?如果不使用Hibernate自带的分页,...

    webwork in action 第二卷(高清中文版2/3)

    关键还是要理解struts2框架的原理、思想,掌握了本质的东西那么再想忘掉也难了。从这个角度来讲,本书是struts2最佳参考书,也是众多讲解框架类书籍的典范。  不得不提的是,本书的翻译质量很高,看得出译者非常...

    webwork in action 第三卷(高清中文版3/3)

    关键还是要理解struts2框架的原理、思想,掌握了本质的东西那么再想忘掉也难了。从这个角度来讲,本书是struts2最佳参考书,也是众多讲解框架类书籍的典范。  不得不提的是,本书的翻译质量很高,看得出译者非常...

    Java版水果管理系统源码-hrSystem:struts2springhibernate实现简单员工自动管理系统

    ###理解了hibernate层,DAO层,业务逻辑层以及struts控制,spring注入的原理 ##演示站:简单的员工定时管理系统 经理帐号:oracle weblogic 员工帐号:mysql hsql tomcat jetty 所有密码都和帐号相同 ##一.系统功能...

    Spring攻略(第二版 中文高清版).part1

    6.3 将Spring与Struts 1.x集成 220 6.3.1 问题 220 6.3.2 解决方案 220 6.3.3 工作原理 220 6.4 将Spring与JSF集成 226 6.4.1 问题 226 6.4.2 解决方案 226 6.4.3 工作原理 227 6.5 将Spring与DWR...

    达内java培训目录

    掌握Java面向对象编程基本实现原理。 实训项目一:Tetris项目开发 第二阶段(以T-DMS V1项目贯穿) JDK核心API 语言核心包、异常处理、常用工具包、集合框架。 熟练掌握JDK核心API编程技术;理解API设计原则;具备...

    java bean 与 Web Form表单如何实现自动装配

    表单数据与bean的属性映射的原理,对Struts2模型驱动的理解有帮助。

    Spring攻略(第二版 中文高清版).part2

    6.3 将Spring与Struts 1.x集成 220 6.3.1 问题 220 6.3.2 解决方案 220 6.3.3 工作原理 220 6.4 将Spring与JSF集成 226 6.4.1 问题 226 6.4.2 解决方案 226 6.4.3 工作原理 227 6.5 将Spring与DWR...

    java面试题

    71.2. Hibernate 实现原理 55 71.3. Hibernate 优点 56 71.4. Hibernate 的缓存体系 56 71.4.1. 一级缓存: 56 71.4.2. 二级缓存: 56 71.4.3. 缓存管理 56 71.5. Hibernate 中Java对象的状态 58 71.5.1. 临时状态 ...

    simplejee-面向j2ee初学者的开源项目

    因为大小的限制,依赖的jar包没有上传,可使用maven来获取... * 为了帮助理解struts2,hibernate,spring等框架的原理,我们还简单实现了minimvc,miniorm,minidi。 * 本项目和springside,appfuse相比,更适合初学者。

Global site tag (gtag.js) - Google Analytics