分类: Java
2010-04-11 15:17:05
在java web开发领域存在2种开发模式,
模式一,jsp+javabean
模式二,jsp+javabean+servlet,即所谓的MVC设计,struts只不过是遵循MVC的一个开源框架.
在模式一中(jsp+javabean),这种设计模式适合,小规模web开发,体现在轻巧兴,也就是更轻量级一些(内存加载的类少,相对struts而言),但是jsp中会嵌入大量的html和java脚本,规模小还好,如果大型企业web,随着规模的加大,太多的html和java脚本交织在一起,可读性差,而且修改一个jsp可能会牵连到其他的页面.
现在大规模的企业开发都选择struts,因为他成功的吧web分为三层,即模型,视图,控制器,在开发团队中更容易分工,而且逻辑部分和显示部分被分离到,module和jsp中去了,可读性也好了,但是struts在启动的时候要加载一些额外的类(struts的类),这对于小型企业用的低端服务器来说,会站内存,降低速度.
servlet是java服务器端小程序的意思,jsp最终也是读取并编译成servlet加载到内存,jsp在内存中也是以servlet形式存在的.
struts是jsp+servlet+javabean的MVC实现,其中C\即controller控制器的意思,这部分就是servlet,也就是说struts里用servlet来作控制器
可以把Struts看作是对
Servlet
的进一步封装。。。
让它使用起来更方便。。。更符合设计思想。。。
一般情况下,如果你的jsp只是一个处理,有很少的药显示的html标签,或者说只是做一个处理或者控制,那么就可以使用servlet.
servlet可以用来做数据插入数据库、页面跳转用的,因为毕竟jsp要编译成一个类似于servlet的中间格式的java文件。如果只是插入数据
库、页面跳转,用servlet有何不可?
没有servlet就没有struts,
struts实现了MVC
servlet相当于MVC 中的 "C"
servlet会随容器装载 后 创建 servlet的实例,然后servlet就可以处理用户的每个请求了, 直到servlet的destroy方
法被执行。
org.apache.struts.action.ActionServlet 就是一个servlet,所以在容器启动之后,他
的一个实例一直存在。
这
文章讲了一下struts控制器组件的东西,
其中的action:为了确保线程安全(thread-safe),在一个应用的生命周期
中,Struts框架只会为每个Action类创建一个Action实例。所有的客户请求共享一个Action实例,并且所有请求线程可以同时执行它的
execute()方法。
所以,每个action只有一个实例, 在action打印this也可以看到, 确实是一样的,
所以, 哥
们, 不要在Action里面声明全局的变量记忆数据, 没有意义而且不安全。
刚才大概看了一下strut1。2的源代码, 很有利于理
解问题,
ActionServlet 调用 RequestProcessor 中的process方法, 在RequestProcessor
中, 保证了每个Action只有一个instance,所以可见, Action确实只有一个!
Action的execute可以被多个线程同
时执行, 所以, 若在Action内部声明变量, 破坏thread safe