`

Struts1杂谈

阅读更多

1   Struts框架整体  

Struts-1的核心功能是前端控制器,程序需要注的是后端控制器。前端控制器是是一个Servlet,在Web.xml配置所有 Request都必须经过前端控制器,它的名字是ActionServlet,由框架来实现和管理。所有的视图业务逻辑隔离都是应为这 ActionServlet,它就像一个交通警察,所有往的车辆须经过它的法眼,然后被送往特定的通道。所有,它的理解就是分器,我也可以叫做Dispatcher,其了解Servlet程的人自己也可以写一个分器,加上requestFilter,其自己实现一个struts框架并不是很困。主要目的就是让编视图的和后台逻辑的可以脱离耦合,各自同的完成自己的工作。

有了ActionServlet在中间负责转发,前端的视图比如Jsp,只需要把所有的数据Submit些数据就会到达适合理它的后端控制器Action,然后在里面理,理完之后转发到前台的同一个或者不同的视图Jsp,返回前台利用的也是Servlet里面的forward redirect方式。所以到目前止,一切都只是借用了ServletAPI搭建起了一个方便的框架而已。也是Struts著的特性?? 控制器。  

另外一个特性,可以也是Struts-1来的一个比成功的理念,就是以xml配置代替硬编码配置信息。以往决定Jsp往哪个servlet提交,是要写Jsp中的,也就是一旦个提交路径要改,我改写代再重新编译。而Struts提出来的思路是,编码的只是一个逻辑名字,它对应哪个class文件写xml配置文件中,个配置文件记录着所有的映射系,一旦需要改路径,改xml文件比改要容易得多。个理念可以相当成功,以致于后来的框架都延个思路,xml所起的作用也越来越大。  

大致上来Struts当初们带来的新感就这么多了,其他的所有特性都是基于方便的控制转发和可展的xml配置的基之上来完成它的功能的。  

下面将分ActionFormBean两个是Struts中最核心的两个件。  

 

2   后端控制器Action  

Action就是我们说的后端控制器,它必须继承自一个ActionStruts设计了很多Action,例如DispatchAction DynaValidationAction。它都有一个业务逻辑的方法execute()入的request, response, formBeanactionMapping四个象,返回actionForward象。到达Action之前先会经过一个 RequestProcessor来初始化配置文件的映射系,里需要大家注意几点:

1)   了确保线程安全,在一个用的生命周期中,Struts框架只会为每Action类创建一个Action例,所有的客户请求共享同一个Action 例,并且所有线程可以同时执行它的execute()方法。所以当你承父Action,并添加了private员变量的候,请记量可以被多个线访问,它的同由程序员负责(所有我不推荐这样)。在使用Action候,保证线程安全的重要原是在Action仅仅使用局部量,慎的使用量。局部量是对每线程来私有的,execute方法束就被销毁,而量相当于被所有线程共享。  

2)   ActionServlet例接收到Http求后,在doGet()或者doPost()方法中都会process()方法来求。 RequestProcessor包含一个HashMap,作存放所有Action例的存,Action例在存中存放的属性key Action名。在RequestProcessorprocessActionCreate()方法中,首先检查HashMap中是否存在 Action例。Action例的代位于同码块中,以保只有一个线Action例。一旦线建了Action例并把它存放到 HashMap中,以后所有的线程会直接使用存中的例。  

3)   <action>元素的<roles>属性指定访问这Action的安全角色,多个角色之逗号隔RequestProcessor预处用自身的 processRoles()方法,检查配置文件中是否Action配置了安全角色,如果有,就HttpServletRequest isUserInRole()方法来判断用是否具了必要的安全性角色,如果不具,就直接向客端返回错误(返回的视图<input>属性来指定)  

 

3   数据传输对FormBean  

Struts并没有把模型业务对象直接传递视图层,而是采用DTOData Transfer       Object)来传输数据,这样可以减少传输数据的冗余,提高传输效率;有助于实现的独立,使分工明确。StrutsDTO就是 ActionForm,即formBean。由于模型层应该Web保持独立。由于ActionForm中使用了Servlet  API,因此不提倡把ActionForm传递给模型应该在控制ActionForm Bean的数据重新装到自定DTO中,再把它传递给模型。它只有两个scope,分sessionrequest。(默session)一个ActionForm准的生命周期是:  

1)   控制器收到       ->      

2)   requestsession中取出ActionForm例,如不存在就建一个       ->  

3)   ActionFormreset()方法       ->      

4)   例放入session或者request       ->      

5)   将用户输入表达数据装到ActionForm       ->      

6)   如眼方法配置了就validate()方法           ->  

7)   验证错误转发给   <input>   属性指定的地方,否则调execute()方法  

 

validate()方法用必须满足两个条件:  

1)   ActionForm       配置了Action映射而且name属性匹配  

2)   <aciton>       元素的validate属性true  

如果ActionFormrequest内,那么对个新的求都会建新的ActionForm例,属性被初始化认值,那reset ()方法就得没有必要;但如果ActionFormsession内,同一个ActionForm例会被多个求共享,reset()方法在这种情况下极有用。  

 

4   验证框架和国  

Struts多自己的特性,但是基本上大家是不太常用,白了它也是基于JDK的很多Java包来完成工作。例如国化、验证框架、插件自展功能、与其他框架的集成、因各大框架基本都有提供这样的特性,Struts也并不是做得最好的一个,里也不想多Struts验证框架,是通一个validator.xml的配置文件验证规则,然后在validation-rules.xml里面找到验证实现动为Jsp插入 javascript实现,可以做得相当陋。出来的javascript框不但很多冗余信息,笔者宁愿用formBean验证或者 ActionsaveErrors()验证逻辑虽然要自己写,但/的警告提示更加人性化和美一些。  

至于Struts的国化,其哪个框架的国化,java.util.Locale是最重要的Java       I18N。在Java言中,几乎所有的化和本地化的支持都依。如果Java类库中的某个在运行的候需要根据Locale象来整其功能,那就称是本地敏感的(Locale-Sensitive),例如java.text.DateFormat就是,依于特定Locale  

Locale象的候,需要明确的指定其言和国家的代言代遵从的是ISO-639范,国家代遵从ISO-3166范,可以从  

                http://www.unicode.org/unicode/onlinedat/languages.html

                http://www.unicode.org/unicode/onlinedat/countries.html 

Struts的国化是基于propertiesmessage/key对应实现的,笔者曾写一个程序,所有Jsp面上没有任何Text文本串,全部都用的是   <bean:message>   Properties文件里面候其只要指定不同的言区域不同的Properties文件就实现了国化。需要注意的是不同言的字符写Properties文件的候需要化成UnicodeJDK经带转换的功能。JDKbin中有native2ascii个命令,可以完成*.txt*.propertiesUnicode码转换

分享到:
评论

相关推荐

    struts1和struts2的区别

    ### Struts1与Struts2的主要区别 #### 概述 Apache Struts 是一个用于构建企业级Java Web应用的开源框架。它分为两个版本:Struts1 和 Struts2。虽然两者都基于模型-视图-控制器(MVC)设计模式,但它们之间存在...

    struts1—jar

    Struts1是一个经典的Java Web开发框架,由Apache软件基金会维护,它基于Model-View-Controller(MVC)设计模式,极大地简化了企业级Web应用的开发。在Java Web开发领域,Struts1曾广泛应用于构建复杂的业务逻辑和...

    struts2.0整合Struts 1

    Struts 2整合Struts 1,允许开发者利用Struts 1已有的投资,同时享受Struts 2带来的优势,如增强的类型安全和更强大的拦截器机制。 在《Struts 2权威指南--基于WebWork核心的MVC开发》这本书中,作者李纲深入浅出地...

    Struts2与Struts1区别

    Struts2 和 Struts1 是两个著名的 Java Web 开发框架,它们都出自 Apache Software Foundation,但有着显著的区别。Struts1 是早期的 MVC 框架,而 Struts2 则是在 WebWork 框架的基础上发展起来的,它吸收了 Struts...

    Struts1和Struts2区别

    Struts1和Struts2是两个非常著名的Java Web框架,它们都由Apache软件基金会开发,用于构建MVC(Model-View-Controller)架构的应用程序。虽然它们在目标上相似,但在设计模式、功能特性和使用体验上存在显著差异。...

    Struts1小demo

    Struts1是一个经典的Java Web框架,它以Model-View-Controller (MVC)设计模式为核心,简化了Web应用的开发。这个"Struts1小demo"是一个很好的学习资源,可以帮助初学者理解Struts1的工作原理并快速上手实践。下面...

    精通struts1.x技术,struts1完整详细教程

    Struts1.x 是一款经典的Java Web开发框架,由Apache软件基金会发起的Jakarta Struts项目创建,旨在实现MVC(Model-View-Controller)设计模式,以提高开发效率和代码的可维护性。该框架最初由Craig McClanahan在2000...

    struts1和struts2区别

    Struts1和Struts2是两个非常著名的Java Web框架,它们在处理MVC(Model-View-Controller)架构方面有着显著的区别。以下是关于这两个框架在关键特性上的对比: 1. **Action类**: - **Struts1**:要求Action类继承...

    struts1完整demo

    Struts1是一个经典的Java Web开发框架,由Apache软件基金会维护,它主要负责处理MVC(Model-View-Controller)架构中的Controller部分。Struts1在2000年代初期非常流行,为开发者提供了构建企业级应用程序的强大工具...

    struts1&struts2

    Struts1和Struts2是两个著名的MVC框架,它们都是Apache软件基金会的Apache Struts项目的一部分,用于构建基于Java的Web应用程序。然而,两者在设计和实现上有显著的差异。 1. **架构模式的区别** - **Struts1.x** ...

    Struts1实验项目

    Struts1是一个经典的Java Web开发框架,由Apache软件基金会维护,它主要负责处理MVC(Model-View-Controller)架构中的控制器部分。本实验项目旨在帮助开发者深入理解Struts1的核心概念和工作流程,以便更好地在实际...

    Migrating From Struts1 To Struts2

    ### 从Struts1迁移到Struts2 #### 引言 随着技术的发展与进步,Struts1作为曾经广泛使用的Web应用框架,逐渐被Struts2等新一代框架所取代。Struts2以其更加灵活的设计、丰富的特性以及更好的性能表现成为众多开发者...

    struts1入门案例

    Struts1是一个经典的Java Web开发框架,由Apache软件基金会维护,它主要负责处理MVC(Model-View-Controller)架构中的控制器部分。本入门案例旨在帮助初学者理解并掌握Struts1的基础用法,虽然技术含量不高,但对于...

    struts1和struts2的jar包

    Struts1和Struts2是两个不同的版本,它们各自拥有独特的特性和功能,但在Java Web开发领域都扮演了重要角色。 **Struts1** Struts1是最早的版本,它在2001年发布,是基于ApacheJakarta项目的一个框架。Struts1的...

    Struts1和Struts2的区别和对比

    Struts1和Struts2是两个非常著名的Java Web框架,它们在设计模式、可测试性、输入处理和表现层等方面存在显著的区别。 首先,Action类的设计有所不同。在Struts1中,Action类需要继承一个抽象基类,这限制了Action...

    struts1 和 struts2所需jar包

    struts1 和 struts2所需jar包。主要包含以下内容: struts-1.3.10-all.zip struts-1.3.10-apps.zip struts-1.3.10-lib.zip struts-1.3.10-src.zip struts-2.3.4.1-all.zip struts.rar

    struts1和struts2的区别(详细)

    ### Struts1与Struts2的主要区别 #### 一、Action执行机制的不同 - **Struts1**: 在Struts1框架中,Action是基于单例模式的,这意味着所有的请求都会共享同一个Action实例。这就导致了如果在Action中保存实例变量...

    struts1 jar包

    Struts1是一个经典的Java Web开发框架,由Apache软件基金会维护,它基于Model-View-Controller(MVC)架构模式,为构建动态、数据驱动的Web应用程序提供了强大的支持。标题中的"struts1 jar包"指的是Struts1框架的...

    struts1.x和struts2.0电子书

    这个压缩包包含了两个关键版本的Struts框架的电子书,即Struts1.x和Struts2.0的相关资料。 **Struts1.x** Struts1.x是最初的Struts版本,它极大地简化了Java Servlet和JSP的应用开发。Struts1的核心概念包括Action...

    转:struts1与struts2的区别

    ### Struts1与Struts2的主要区别 #### 1. Action类的设计差异 - **Struts1**: 在Struts1框架中,Action类必须继承自一个抽象类`org.apache.struts.action.Action`。这种方式可能导致的问题是代码灵活性较低,尤其...

Global site tag (gtag.js) - Google Analytics