Chinaunix首页 | 论坛 | 博客
  • 博客访问: 535036
  • 博文数量: 260
  • 博客积分: 10435
  • 博客等级: 上将
  • 技术积分: 1939
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-24 14:50
文章分类

全部博文(260)

文章存档

2011年(22)

2010年(209)

2009年(29)

我的朋友

分类: 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


阅读(655) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~