zoukankan      html  css  js  c++  java
  • Struts框架----进度1

    一、Struts的理解

    1.struts是一个按MVC模式设计的web层框架,其实它就是一个大的Servlet:ActionServlet,或者是ActionServlet的子类。在web.xml文件中配置过滤器来让符合条件的请求交给这个ActionServlet来处理,比如以action为后缀的url请求等。Servlet再参照配置文件(一般为/WEB/INF/struts-config.xml【这个文件可以按照模块进行配置,解决配置文件过度膨胀的问题】)将这个请求分别分配给不同的action去处理。

    2.ActionServlet把请求交给action去处理之前,会将请求参数封装成一个formbean对象(这个类中的每个属性对应一个请求参数),封装成一个什么样的formbean?OGNL类型转换:由于java是一个强类型的语言,所以对于http的请求字符串需要进行类型转换?

    3.ActionServlet把formbean对象传递给action的execute方法之前,可能会调用formbean的validate方法进行校验,只有通过校验通过之后,才将这个formbean对象传递给action的execute方法,否则直接返回一个错误页面,这个错误页面由input属性指定输入校验机制:校验规则文件(XXXAction-validation.xml例如RegistAction-validation P308)中规定用户输入数据的合法性。多用正则表达是进行配置。客户端校验?服务器端校验?

    4.action执行完之后要返回显示的结果视图(逻辑视图),这个结果视图使用一个ActiongForword对象来表示的,actionforword对象通过struts-congfig.xml配置文件中配置关联到对应的jsp页面(物理视图),因为程序中使用的是在struts-congfig.xml配置文件为jsp页面设置的逻辑名,这样可以实现actiong程序代码和返回的jsp页面名称解耦。

    二、struts优缺点

    1.优点

    ①实现MVC模式,结构清晰,使开发者只关注业务逻辑的实现

    ②有丰富的tag可以用,Struts的标记库(Taglib),提高开发效率

    ③页面导航

      使系统的脉络更加清晰。通过配置一个文件,即可把我整个系统各部分之间的联系,这样对于后期的维护有着很大帮助。

    ④提供Exception处理机制

    ⑤数据库连接池管理

    ⑥支持I18N

    2.缺点

    ①转到展示层时,需要配置forward,如果有是十个展示层的jsp,需要配置十次struts,而且还不包括有时候目录、文件变更,需要重新改修改forward,每次修改配置之后需要重新部署整个项目,而tomcate这样的服务器还必须重新启动服务器。

    ②Struts的Action必须是thread-safe方式,它仅仅允许一个实例去处理所有的请求,所以action用到的所有的资源都必须统一同步,这个引起了线程安全的问题。

    ③测试不方便Struts的每个Action都和WEb层耦合在一起,这样他的测试依赖于web容器,单元测也很难实现。单元测试也很难实现。不过一个Junit的扩展工具Struts TestCase可以实现单元测试。

    ④类型的转换。Struts的formbean把所有的数据都作为String类型,他可以使用工具Commons-Beanutils进行类型转换,但是他的转化都是在class级别,而且转化的类型是不可配置的。类型转化时的错误信息返回给用户也是非常困难的。

    ⑤对Servlet的依赖性过强,Struts处理Action时必须依赖ServletRequest和ServletREsponse,摆脱不了servlet容器。

    ⑥前端表达式语言方面Struts继承了JSTL,所以它主要使用JSTL的表达式语言来获得数据。可是JFTL的表达式语言在集合和索引属性方面处理的很弱。

    ⑦对Action执行的控制困难,Struts创建了一Action,如果想控制它的执行顺序将会非常困难。甚至要去重写Servlet来实现这个功能。

    ⑧对Actiong执行前后的处理,Struts处理Action的时候是基于class的hierarchies,很难再action处理前后进行操作。

    ⑨对事件支持不够,在struts中,实际一个表单Form对应一个Action类(DispatchAction),换句话说:在Struts中实际是一个表单只能对应一个事件,struts这种事件方式称为application event,application event和component event相比是一种粗粒度的事件。

    三、struts1和struts2的区别

    ①都是MVC的WEB框架

    ②struts1在用户上面多于struts2(很早以前吧)

    ③Struts1的前端控制器是一个Servlet,名称为ActionServlet,Struts2的前端控制器是一个filter,在struts2.0中叫FilterDispatcher,在Struts2.1中叫StrutsPrepareAndExecteFilter。

    ④struts1的action需要继承Actiong类,、Struts2的action可以不继承任何类;struts1对同一个路径的所有请求共享一个Action实例,Struts2对一个路径的每个请求分别使用一个独立的ACtion实例,所以对于struts2的Action不用考虑线程安全的问题(对用户的每一次请求都会产生一个action )。

    ⑤strts1中使用formbean封装请求参数,在struts2中直接使用action的属性来封装请求参数。

    ⑥struts1中的多个业务方法放在一个Action中时(继承DispatchAction),要么都校验,要么都不校验;对于struts2,可以指定支队某个方法进行校验,当一个Action继承了ActionSupport且在这个类中只编写了validateXxx()方法,那么只对Xxx()方法进行校验。

    ⑦ Struts2的视图地址是可以动态的。

  • 相关阅读:
    iptables命令参数简介
    在linux下开启IP转发的方法
    Linux配置IP路由
    NAT转换
    JS实验案例
    Ubuntu kylin优麒麟root用户与静态网络设置
    非对称加密-RSA
    对称加密-DES
    DM5详解
    Visio的安装教程
  • 原文地址:https://www.cnblogs.com/jinb/p/6556313.html
Copyright © 2011-2022 走看看