`
kevin_wanwei
  • 浏览: 117586 次
  • 性别: 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的视频吗。。。

相关推荐

    servlet模拟struts1工作原理

    Struts1是Apache组织开发的一个基于MVC(Model-View-Controller)设计模式的Web应用框架,它简化了开发...实际开发中,虽然Struts1已经被Struts2和其他现代框架取代,但了解其工作原理对理解和使用其他框架仍然有裨益。

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

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

    struts1 mvc基本原理

    本文将深入探讨Struts1的基本原理,帮助理解其架构设计和工作流程。 **1. MVC架构** MVC模式是软件工程中一种用于分离业务逻辑、数据和用户界面的设计模式。在Struts1中,Model代表应用程序的数据和业务逻辑,View...

    Struts2 技术内幕——深入解析Struts2架构设计与实现原理

    Struts2 的重要性在于其成熟的架构设计和实现原理,使得开发人员能够通过组件化的方式开发复杂的企业级应用。 Struts2 的架构设计采用了拦截器(Interceptor)机制,拦截器是一种设计模式,它允许开发者在不修改源...

    Struts的工作原理

    在深入理解Struts的工作原理之前,我们先来简单回顾一下MVC模式的基本概念: **Model(模型)**:这是应用程序的核心业务逻辑,通常由Java Beans或Enterprise JavaBeans (EJBs)实现,它们处理数据和业务规则。 **...

    Struts2 技术内幕-深入解析Struts2架构设计与实现原理

    综上所述,《Struts2技术内幕-深入解析Struts2架构设计与实现原理》这本书详细介绍了Struts2的各个方面,无论是对于初学者还是有经验的开发者,都能从中获取到宝贵的知识,理解Struts2的精髓,提升开发效率和应用...

    Struts2+技术内幕——深入解析Struts2架构设计与实现原理

    本书《Struts2技术内幕——深入解析Struts2架构设计与实现原理》结合提供的《struts2基础.chm》资料,为我们提供了深入理解Struts2内部机制的机会。 首先,Struts2的核心在于它的拦截器(Interceptor)机制。拦截器...

    struts框架原理图

    根据提供的文件信息,“Struts框架原理图”主要阐述了Struts框架的工作原理、流程以及页面间的跳转机制。为了更好地理解和应用...对于希望构建复杂Web应用的开发者来说,深入理解Struts框架的工作原理是非常必要的。

    struts1实现在线商城原理

    在本文中,我们将深入探讨如何使用Struts1实现一个在线商城系统,以及涉及的相关技术,如JSP、JavaScript等。 首先,让我们了解Struts1的核心概念。Struts1通过提供一系列的控制器Servlet、配置文件(struts-config...

    Struts1实现的文件上传

    Struts1是一个经典的Java Web框架,它为开发者提供了一种结构化的MVC(Model-View-Controller)设计模式实现方式,极大地简化了Web...然而,了解Struts1的文件上传对于理解MVC模式和Web开发的基本原理仍然很有价值。

    Struts1的登录例子,可以实现

    Struts1是一个经典的Java Web开发框架,它在2000年代初期被广泛使用,为MVC(模型-视图-控制器)设计模式提供了一种实现。...这有助于我们理解和掌握Struts1框架的基本工作原理,对于初学者来说是一份宝贵的实践资料。

    struts2实现文件下载功能

    首先,我们需要理解文件下载的基本原理。在Web应用中,当用户点击一个链接或提交一个表单以下载文件时,服务器会将文件内容以二进制流的形式发送到客户端,浏览器接收到这个流后,将其保存为本地文件。Struts2框架...

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

    为了更好地理解Struts框架的实现原理,你需要对以下几个关键点有深入的理解: 1. MVC模式及其在Struts中的实现。 2. Action和ActionContext的角色及交互。 3. 拦截器的工作原理与自定义拦截器的编写。 4. 结果...

    Struts框架的原理的实现

    在"我的Struts"(MyStruts)项目中,我们可以看到作者尝试自己实现了一个类似Struts的框架,虽然可能功能不那么完善,但这是一个很好的学习和理解Struts工作原理的机会。通过阅读和分析这个项目,可以深入理解MVC...

    struts2实现用户登录注册

    Struts2是一个强大的MVC(模型-...通过实践这个项目,开发者可以深入理解Struts2框架的工作原理,以及如何在实际开发中有效地使用它。同时,这也涉及到Eclipse的项目配置和管理,进一步巩固了Java Web开发的基础技能。

    Struts1 实现录入学生信息

    在本文中,我们将深入探讨如何使用Struts1实现录入学生信息的功能,同时也会涉及Struts1的核心概念、配置和工作原理。 首先,让我们理解Struts1的基本结构。在Struts1框架中,每个应用程序都有一个`struts-config....

    struts2 原理 解析 图

    `struts原理.txt`文件可能包含了文字描述,进一步解释了Struts2的核心概念和机制,比如Action的配置、结果映射、拦截器的实现方式,以及Struts2如何整合其他技术,如Spring或Hibernate进行依赖注入和持久化操作。...

    Struts2 工作原理 Struts2框架 有图

    Struts2框架作为Java Web开发领域中的一款经典MVC(Model-View-Controller)框架,其工作原理涉及到了一系列复杂...理解Struts2的工作原理,不仅有助于高效开发Web应用,更能够深化对MVC架构的理解,提升整体编程能力。

Global site tag (gtag.js) - Google Analytics