`
kidiaoer
  • 浏览: 822409 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

struts1和struts2的区别

阅读更多
struts1和struts2都是基于MVC的开源框架,不过从配置都实现都是完全不同的两个框架。
struts1是在01年左右发布的,一出来就很受欢迎,经过很长时间的发展,有很好
的稳定性,现在企业中都还有很多企业在用;缺点就是它实在是太老了,对后来发
展的其他框架比如spring,freemarker的支持都不太好。
struts2则是集合了webwork和struts1的优点的核心为webwork的开源框架,它有自
己的AOP库,同其他的框架可以很好的兼容。学过struts1的人都知道,struts1是
直接依赖于servlet的API的,这样导致了类之间耦合度过高,需要修改的时候甚至
会牵扯到视图层,这个是struts2比struts1明显要好的地方。
至于servlet呢,是J2EE的核心技术的一部分,struts1、struts2什么的都是以它
为基础的。简单的说,它是服务器端负责处理客户端发送过来的请求并产生回应的一
个控制器。如果你有心向J2EE发展,servlet的知识是一定要掌握的。至于其余的什
么框架,只要清楚原理,要入门都很简单。


Servlet原理2009-08-21 09:01一、Servlet基础

1、Servlet执行过程
用户请求一个Servlet,Servlet容器自动构建请求和响应对象,然后执行Servlet的service()方法,该
方法会接收请求和响应对象,通过响应对象将处理结果发送给用户。

2、怎么请求Servlet
用户通过一个URL来请求一个Servlet。比如:http://localhost:8080/HelloApp/HelloServlet

3、怎么处理请求
当用户请求Servlet时,容器构建ServletRequest对象request,并传递给Servlet的Service()方 法,
Service通过request对象获取到请求的参数,然后,根据参数做出相应的处理,通过ServletResponse对
象来向客户端发送响应 内容。

4、怎么响应客户端
当用户请求一个Servlet时候,容器会自动创建ServletResponse对象response,然后通过response对象
向客户端发送响应内容。

5、Servlet的生命周期
a、Servlet的class经过部署,并启动容器
b、(当请求该Servlet时候)容器自动创建Servlet对象xServlet,然后xServlet调用其init()方法。
到此,Servlet初始化结束。
c、一旦客户端请求该Servlet,xServlet自动调用service()来处理请求。
d、一旦很长时间都没有请求该Servlet(或者说该Servlet超时),则容器会将xServlet从容器中清除掉。

二、Servlet接口API
1、接口五个方法
2、Servlet的分支
3、Servlet的请求对象ServletRequest
4、Servlet的响应对象ServletResponse
5、Http相关的Servlet


三、总结

1、Servlet是一种规范,称为Servlet规范,是J2EE规范的一部分。

2、Servlet规范定义了Servlet相关的一组接口、其实现是由Servlet容器开发商来实现,类似于JDBC驱动。

3、Servlet的也是类,其对象是通过Servlet容器来创建,Servlet只能在Servlet容器
中运行。打个比方说:容器是青山,Servlet是松柏。

4、当客户端请求Servlet时,容器会做两件事情:
a、Servlet容器会将请求自动组装为一个ServletRequest对象,并自动产生一个ServletResponse对象,这
两个对象一并传递给Servlet的service(request,response)方法。
b、在该Servlet对象上调用service(request,response)方法来处理并响应用户的请求。

5、用户无法直接调用Servlet的方法,也无法去创建Servlet的实例。

servlet原理与生命周期java 2009-12-03 09:58:35 阅读313 评论0 字号:大中小
当客户端向服务器发送一个http请求的时候。服务器端(httpd)会判断是静态的HTML还
是包含动态的页面。如果是静态的页面,服务器端会返回相应的结果(HTML代码)。如果
是动态页面的话,会有两种方式去寻找结果。

1、CGI(Common Gateway Interface,公共网关接口)程序

工作原理:当一个客户端请求到来,该程序会启动一个CGI进程,与相应的数据库服务器或
应用服务器进行连接。得到相应的结果,由服务器返回给客户端。当多个客户端请求同时
到来,会产生多个进程并发执行。

优点:每个进程占用独立的资源,运行速度快(但服务器启动进程并不快,因为要分配出
独立的资源)。当客户请求教少的时候,服务器可以承担这样的消耗。

缺点:当客户请求巨大时,会造成服务器死机。当然,可以在服务器端限制,比如说用户请
求超过某个范围,就不响应请求。或者采用多台服务器集合工作。


2、servlet实例方式

工作原理:服务器端会有一个servlet实例,然后服务器会启动一个进程去使用一个servlet实例。
当多个客户端请求同时到来,会产生多个线程并发的去使用同一个servlet实例。

优点:因为是同一个servlet实例,而且多个线程只是占用同一进程的资源(一个进程可以启动多个
线程)。因为一开始进程就准备好了(不用最分配资源),所以启动线程非常快。

缺点:当线程非常多的时候,会存在一个对进程资源争夺、冲突的问题。这样也会影响到运行
的速度(当然,如果处理好资源争夺、冲突的问题,还是很快)。

比较而言:

CGI程序采用多进程方式为并发请求客户服务,进程占独立资源,运行快,但启动慢。

Servlet采用多线程方式,启动快,资源冲突时速度慢

并发客户量非常大时,进程因为共享资源而占很大优势。

所谓开发一个servlet组件,就JAVA来说,不过是开发一个servlet接口。该接口是所有Servlet必
须遵守的规范。定义如下:

void destroy()//不是销毁servlet,而是一个servlet对象即将被销毁执行的一个方法。(释放资源)

ServletConfig getServletConfig()//servlet部署的相关配置有关。

String getServletInfo()//获取servlet信息,告诉调用者干什么用的字符串描述。

void init(ServletConfig config)//不是创建对象,而是servlet被创建对象之后调用的方法(分配资源)

void service(ServletRequest req,ServletReponse res)//一个请求到达时,servlet对象
调用该方法进行工作。任务:给客户端制造出结果。

写一个类,里面包括这些方法,然后去实现相应功能。(说的很容易,写很难哦)!

servlet生命周期:

由servlet引擎(容器)启动和停止,当第一个请求到达servlet引擎,servlet会去查
看有没有创建这样一个servlet对象,如果没有,会创建一个servlet实例。调用
init()方法,做相关配置文件的读取。初始化之后,调用service()方法,按照客
户的某些数据和参数工作,为客户端产生输出结果。


当第二个请求到来,servlet已经创建过,不再调用init()方法,直接执行service()方法,init只被执行一次。

servlet服务器停止,会调用destroy()方法。关闭对象。

servlet服务器存在多个应用程序,当一个应用程序停止会重启的时候,servlet会把该应用
程序对应的servlet对象销毁。

(当一个servlet实例好久没人用,会被保存到文件,不占用内存了。当有人用时,在加载
进内存。有效节约资源)(是各大应用服务器自己的优化方案)


分享到:
评论

相关推荐

    Struts1和Struts2区别

    下面我们将深入探讨Struts1和Struts2的区别。 1. 设计模式: - **Struts1**:基于Front Controller模式,只有一个Servlet(ActionServlet)处理所有请求。它使用Plug-In和Dispatcher机制来实现业务逻辑和视图的...

    struts1和struts2区别

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

    Struts1和Struts2的区别和对比

    Struts1和Struts2是两个非常著名的Java Web框架,它们都用于构建MVC(Model-View-Controller)架构的应用程序。尽管它们都是Struts家族的一部分,但它们在设计哲学和实现方式上存在显著差异。 首先,从Action类的...

    struts1和struts2的区别(详细)

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

    Struts1和Struts2的区别和对比.txt

    ### Struts1与Struts2的区别与对比 #### 概述 Struts1与Struts2是基于Java的两种流行的Web应用框架,它们都遵循MVC(Model-View-Controller)设计模式,用于构建结构化的Web应用程序。Struts1是早期版本,在2000...

    Struts2和Struts1的什么区别

    在探讨Struts2与Struts1的区别时,我们需深入理解这两个框架的设计理念、架构模式以及它们在实际应用中的表现差异。以下将从多个角度详细分析这两种流行Java Web框架的不同之处。 ### 1. **Action类的区别** #### ...

    Struts2与Struts1区别

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

    Struts1与Struts2本质区别

    ### Struts1与Struts2本质区别 #### 1. 在Action实现类方面的对比 - **Struts 1**:要求Action类必须继承一个抽象基类`Action`,这种设计方式意味着开发者必须按照预设的结构来编写代码,灵活性较低。这种通过抽象...

    转:struts1与struts2的区别

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

    Struts2和Struts1的区别,详细点,主要说说Struts2

    ### Struts2与Struts1的主要区别 #### Struts2架构设计与实现方式 - **Struts2**在设计上采用了更加灵活的方式,每个请求都对应一个实例化的Action对象,而不是像**Struts1**那样在整个请求周期内共享同一个Action...

    struts1.x和struts2.x区别

    ### Struts1.x与Struts2.x的主要区别 在深入探讨Struts1.x与Struts2.x的区别之前,我们先来了解一下这两个框架的基本背景。Apache Struts是用于构建企业级Web应用程序的开源框架,它提供了MVC(模型-视图-控制器)...

    程序员必看的书籍Struts1和Struts2的区别

    通过对比分析Struts1和Struts2的特点,我们可以更好地理解这两种框架之间的区别,并能够根据实际项目需求做出合理的选择。这对于软件开发人员来说至关重要,能够帮助他们在日常工作中更高效地解决问题。

    struts与struts2的区别

    Struts1使用的是JSP和Tiles框架来组织视图,而Struts2引入了FreeMarker和Velocity等模板引擎,提供了更多样化的视图渲染方式。 **5. 配置方式:** Struts1的配置主要在XML文件中完成,而Struts2引入了更简洁的注解...

    struts1和struts2的jar包

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

Global site tag (gtag.js) - Google Analytics