| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 三大框架SSH -> 正文阅读 |
|
[Java知识库]三大框架SSH |
文章目录我们知道,传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,这种模式实现了最基本的MVC分层,使的程序结构分为几层,有负责前台展示的 JSP、负责流程逻辑控制的Servlet以及负责数据封装的Javabean。但是这种结构仍然存在问题:如JSP页面中需要使用符号嵌入很多的 Java代码,造成页面结构混乱,Servlet和Javabean负责了大量的跳转和运算工作,耦合紧密,程序复用度低等等 StrutsStruts是一种实现了MVC模式的应用框架,把Servlet、JSP、自定义标签和信息资源(message resources)整合到了一起,实现了MVC模式且极大的节省了时间。 Struts定义了通用的Controller(控制器),通过配置文件(通常是 Struts -config.xml)隔离Model(模型)和View(视图),以Action的概念以对用户请求进行了封装,使代码更加清晰易读。 Struts还提供了自动将请求的数据填充到对象中以及页面标签等简化编码的工具。 struts原理图: Struts1原理步骤:用户在视图层输入数据。 第一步:structs框架总控制器,初始化,开始读取structs-config.xml文件。 struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控制器会读取配置文件(struts-config.xml)的配置信息,为struts中不同的模块初始化相应的对象。(面向对象思想) 第二步:视图层向总控制器发送Http请求 用户提交表单或者通过URL向WEB服务器提交请求,请求的数据用HTTP协议传给web服务器 第三步: Form填充 struts的总控制器ActionServlet在用户提交请求时将数据放到对应的form对象中的成员变量中。 第四步:派发请求 控制器根据配置信息,对象ActionConfig将请求派发到具体的Action,对应的formBean一并传给这个Action中的excute()方法。 第五步:处理业务 Action一般只包含一个excute()方法,它负责执行相应的业务逻辑(调用其它的业务模块)完毕后返回一个ActionForward对象。服务器通过ActionForward对象进行转发工作。 第六步:返回响应 Action将业务处理的不同结果返回一个目标响应对象给总控制器。 第七步:查找响应 总控制器根据Action处理业务返回的目标响应对象,找到对应的资源对象,一般情况下为jsp页面。 第八步:响应用户 目标响应对象将结果传递给资源对象,将结果展现给用户。 struts1的优缺点:1.优点: 2.缺点: 内容来源(推荐阅读):SSH三大框架理解 Struts2struts2原理步骤图:
第一步:客户端初始化一个指向Servlet容器(例如Tomcat)的请求 第二步:这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 第三步:接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 第四步:如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 第五步:ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类 第六步:ActionProxy创建一个ActionInvocation的实例。 第八步:一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper 注意:在上述过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的 structs2的优缺点:优点: 大量的拦截器: 基于插件的框架: 多种视图的支持: 更加的模块化: 与Spring的集成: 基于pojo易于测试: 缺点: 可以为Struts2的Action中的属性配置上Getter和Setter方法,通过默认拦截器,就可以将请求参数设置到这些属性中。如果用这种方式,当请求参数很多时,Action类就会被这些表单属性弄的很臃肿,让人感觉会很乱。还有Action中的属性不但可以用来获得请求参数还可以输出到Jsp中,这样就会更乱。假设从JSP1中获得了参数money=100000,但是这个Action还要输出到JSP2中,但是输出的格式却不同,money=100,000,这样这个Action中的money中的值就变了。 校验还是感觉比较繁琐,感觉太烦乱,也太细化了。 struts2最大的缺点莫过于在好多web服务器上支持不好,例如在websphere5.5,weblogic8.1及以前版本支持非常差,需要用最新的。 安全性有待提高。 struts2的配置:web.xml配置我们使用struts2框架时都需要在web.xml中注册和映射struts2,配置内容如下:
StrutsPrepareAndExecuteFilter中的方法: void init (FilterConfig filterConfig) 继承自Filter,过滤器的初始化 doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 继承自Filter,执行过滤器 void destroy() 继承自Filter,用于资源释放 void postInit(Dispatcher dispatcher, FilterConfig filterConfig) Callback for post initialization(一个空的方法,用于方法回调初始化) web容器一启动,就会初始化核心过滤器StrutsPrepareAndExecuteFilter,并执行初始化方法。 部分内容来自:https://www.cnblogs.com/liuling/p/2013-8-10-01.html struts.xml配置在src中添加struts.xml
Springspring介绍:Spring是一个轻量级的Java 开源框架,可解决企业应用开发的复杂性。 spring利用了java里的反射机制,在运行时动态的去创建、调用对象。Spring在运行时,根据xml Spring的配置文件来动态的创建对象,和调用对象里的方法。 spring对某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过配置类达到的。 Spring目的:就是让对象与对象(模块与模块)之间的关系不通过代码来关联,都是通过配置类说明 管理的(Spring根据这些配置 内部通过反射去动态的组装对象) 注意:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。 spring架构图Spring 框架包含了 20 多个不同的模块。
架构图: 各模块介绍:… spring的主要特征(1)轻量级:spring是一个轻量级的开发框架,基本版本大约只有2M (2)IOC:控制反转,应用程序中对象之间的依赖是由spring 来控制的 (3)AOP:面向切面编程,spring支持面向切面编程,这样可以将业务逻辑和系统服务分开,分离 (4)容器:包含并管理应用程序中对象的生命周期和配置信息 (5)MVC思想:spring也是基于MVC思想的框架,也遵循模型-视图-控制器这三个层次 (6)事务:spring提供一个持续化的接口,可以上至扩展到本地事务下至扩展到全局事务 (7)异常处理:Spring 提供方便的API把具体技术相关的异常(比如由JDBC,hibernate,or JDO抛出的)转化为一致的unchecked 异常。 spring优缺点优点: 通过一种在不同应用程序和项目间一致的方法来处理配置文件,Spring能消除各种各样自定义格式的属性文件的需要。曾经对某个类要寻找的是哪个魔法般的属性项或系统属性感到不解,为此不得不去读Javadoc甚至源编码?有了Spring,你仅仅需要看看类的JavaBean属性。Inversion of Control的使用(在下面讨论)帮助完成了这种简化。 通过把对接口编程而不是对类编程的代价几乎减少到没有,Spring能够促进养成好的编程习惯。 Spring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。 使用Spring构建的应用程序易于单元测试。 Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOs或local EJBs来实现业务接口,却不会影响调用代码。 Spring帮助你解决许多问题而无需使用EJB。Spring能提供一种EJB的替换物,它们适用于许多web应用。例如,Spring能使用AOP提供声明性事务管理而不通过EJB容器,如果你仅仅需要与单个数据库打交道,甚至不需要一个JTA实现。 Spring为数据存取提供了一个一致的框架,不论是使用的是JDBC还是O/R mapping产品(如Hibernate)。 缺点: spring 相关配置:###web.xml中
applicationContext.xmlHibernateHibernate是一个持久层的ORM框架 ,在Java对象与关系数据库之间建立某种映射,以实现直接存取Java对象。即可实现与数据库的交互操作 (关于orm:) hibernate的优点Hibernate对JDBC访问数据库的代码做了轻量级封装,大大简化了数据访问层繁琐的重复性代码,并且减少了内存消耗,加快了运行效率; Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现,它很大程度的简化了DAO(Data Access Object,数据访问对象)层编码工作; Hibernate的性能非常好,映射的灵活性很出色。它支持很多关系型数据库,从一对一到多对多的各种复杂关系; 可扩展性强,由于源代码的开源以及API的开放,当本身功能不够用时,可以自行编码进行扩展。 部分内容来自于(推荐阅读):Hibernate框架入门 hibernate体系结构和步骤hibernate工作原理hibernate基本配置web.xml待更新… |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/31 7:21:48- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |