小白自学Java框架,框架的全面解析总结

DispatcherServlet主要用作职责调度工作,本身主要用于控制流程

1、springmvc将所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求进行真正的处理工作;

2、DispatcherServlet查询一个或多个

HandlerMapping,找到处理请求的Controller;

3、DispatcherServlet将请求提交到目标Controller;

4、Controller进行业务逻辑处理后,会返回一个ModelAndView;

5、DispathcherServlet查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象;

6、视图负责将结果显示到客户端;视图对象负责渲染返回给客户端。

DispatcherServlet:前端控制器;(相当于一个转发器,中央处理器,调度)

ModelAndView:模型和视图的结合体;(Springmvc的底层对象)

HandlerMapping:处理器映射器

springmvc运行原理

1、客户端请求提交到DispatcherServlet;

2、由DispatcherServlet控制器查询一个或多HandlerMapping,找到处理请求的Controller;

3、DispatcherServlet将请求提交到Controller;

4、Controller调用业务逻辑处理后,返回ModelAndView;

5、DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图;

6、视图负责将结果显示到客户端。

DispatcherServlet是整个SpringMVC的核心。它负责接收HTTP请求组织协调SpringMVC的各个组成部分。其主要工作有以下三项:

1、截获符合特定格式的URL请求;

2、初始化DispatcherServlet上下文对应的WebApplicationContext,并将其与业务层、持久化层的WebApplicationContext建立关联;

3、初始化SpringMVC的各个组成组件,并装配到DispatcherServlet中。

原理:

1、读取并解析配置文件

2、读取并解析映射信息,创建SessionFactory

3、打开Sesssion

4、创建事务Transation

5、持久化操作

6、提交事务

7、关闭Session

8、关闭SesstionFactory

为什么要用:

1、对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码;

2、Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作;

3、hibernate使用Java反射机制,而不是字节码增强程序来实现透明性;

4、hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。

Struts工作机制?为什么要使用Struts?

工作机制:

Struts的工作流程:

在web应用启动时就会加载初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到各种配置对象。

当ActionServlet接收到一个客户请求时,将执行如下流程.

(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息;

(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中;

(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法;

(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象,就表示表单验证成功;

(5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法;

(6)Action的execute()方法返回一个ActionForward对,象,ActionServlet在把客户请求转发给ActionForward对象指向的JSP组件;

(7)ActionForward对象指向JSP组件生成动态网页,返回给客户。

JSP、Servlet,JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。

基于Struts开发的应用由3类组件构成:控制器组件、模型组件、视图组件

如何优化Hibernate?

1、使用双向一对多关联,不使用单向一对多

2、灵活使用单向一对多关联;

3、不用一对一,用多对一取代;

4、配置对象缓存,不使用集合缓存;

5、一对多集合使用Bag,多对多集合使用Set;

6、继承类使用显式多态;

7、表字段要少,表关联不要怕多,有二级缓存撑腰。

Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象进行监督和控制(也就是在调用这类对象的具体方法的前后去调用你指定的模块)从而达到对一个模块扩充的功能。这些都是通过配置类达到的。

Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置内部通过反射去动态的组装对象)

Struts2框架本身大致可以分为3个部分:

核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。

核心控制器FilterDispatcher是Struts2框架的基础,包含了框架内部的控制流程和处理机制。

业务控制器Action和业务逻辑组件是需要用户来自己实现的。

Struts2的工作流程相对于Struts1要简单,与WebWork框架基本相同,所以说Struts2是WebWork的升级版本。

基本简要流程如下:

1、客户端初始化一个指向Servlet容器的请求;

2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMeshPlugin)

3、接着FilterDispatcher被调用,

FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action;

4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy;

5、ActionProxy通过ConfigurationManager(配置管理器)询问框架的配置文件,找到需要调用的Action类;

6、ActionProxy创建一个ActionInvocation的实例;

8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。

返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。

在表示的过程中可以使用Struts2框架中继承的标签。在这个过程中需要涉及到ActionMapper;

9.响应的返回是通过我们在web.xml中配置的过滤器;

10、如果ActionContextCleanUp是当前使用的,则FilterDispatecher将不会清理sreadlocalActionContext;

如果ActionContextCleanUp不使用,则将会去清理。

说下Struts的设计模式

MVC模式:web应用程序启动时就会加载并初始化ActionServler。用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用Action的execute()方法。Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生成动态的网页,返回给客户。

拦截器和过滤器的区别

1、拦截器是基于java反射机制的,而过滤器是基于函数回调的。

2、拦截器不依赖于servlet容器,过滤器依赖于servlet容器。

3、拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。

4、拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。

5、在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。

struts1于struts2的比较

1、Action类:

Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。

Struts2Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。

Struts2提供一个ActionSupport基类去实现常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。

2、线程模式:

Struts1Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。

单例策略限制了Struts1Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。

Struts2Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,

servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)

3、Servlet依赖:

Struts1Action依赖于ServletAPI,因为当一个Action被调用时HttpServletRequest和HttpServletResponse被传递给execute方法。

Struts2Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2Action仍然可以访问初始的request和response。

但是,其他的元素减少或者消除了直接访问HttpServetRequest和HttpServletResponse的必要性。

4、可测性:

测试Struts1Action的一个主要问题是execute方法暴露了servletAPI(这使得测试要依赖于容器)。

一个第三方扩展--StrutsTestCase--提供了一套Struts1的模拟对象(来进行测试)

Struts2Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。

5、捕获输入:

Struts1使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)。

Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。

Action属性能够通过web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。

这种ModelDriven特性简化了taglib对POJO输入对象的引用。

6、表达式语言:

Struts1整合了JSTL,因此使用JSTLEL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。

Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"ObjectGraphNotationLanguage"(OGNL).

7、绑定值到页面(view):

Struts1使用标准JSP机制把对象绑定到页面中来访问。

Struts2使用"ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。

ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。

8、类型转换:

Struts1ActionForm属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的。

Struts2使用OGNL进行类型转换。提供基本和常用对象的转换器。

9、校验:

Struts1支持在ActionForm的validate方法中手动校验,或者通过CommonsValidator的扩展来校验。

同一个类可以有不同的校验内容,但不能校验子对象。

Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性.

10、Action执行的控制:

Struts1支持每一个模块有单独的RequestProcessors(生命周期),但是模块中的所有Action必须共享相同的生命周期。

Struts2支持通过拦截器堆栈(InterceptorStacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。

为什么要使用Struts2

Struts2是一个相当强大的JavaWeb开源框架,是一个基于POJO的Action的MVCWeb框架。它基于当年的Webwork和XWork框架,继承其优点,同时做了相当的改进。

1、Struts2基于MVC架构,框架结构清晰,开发流程一目了然,开发人员可以很好的掌控开发的过程。

2、使用OGNL进行参数传递。

OGNL提供了在Struts2里访问各种作用域中的数据的简单方式,你可以方便的获取Request,Attribute,Application,Session,Parameters中的数据。大大简化了开发人员在获取这些数据时的代码量。

(OGNL是Object-GraphNavigationLanguage的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。)

3、强大的拦截器。

以完成一些JavaWeb项目中比较通用的功能。在我实现的的一Web项目中,就是使用Struts2的拦截器来完成了系统中的权限验证功能。

4.易于测试。

Struts2的Action都是简单的POJO,这样可以方便的对Struts2的Action编写测试用例,大大方便了5JavaWeb项目的测试。

5、易于扩展的插件机制在Struts2添加扩展是一件愉快而轻松的事情,只需要将所需要的Jar包放到WEB-INF/lib文件夹中,在struts.xml中作一些简单的设置就可以实现扩展。

6.模块化管理。

Struts2已经把模块化作为了体系架构中的基本思想,可以通过三种方法来将应用程序模块化:将配置信息拆分成多个文件把自包含的应用模块创建为插件创建新的框架特性,即将与特定应用无关的新功能组织成插件,以添加到多个应用中去。

为应用程序添加全局的Result,和在配置文件中对异常进行处理,这样当处理过程中出现指定异常时,可以跳转到特定页面。

他的如此之多的优点,是很多人比较的青睐,与spring,Hibernate进行结合,组成了现在比较流行的ssh框架。

struts2有哪些优点

1、在软件设计上Struts2的应用可以不依赖于ServletAPI和strutsAPI。Struts2的这种设计属于无侵入式设计;

2、拦截器,实现如参数拦截注入等功能;

3、类型转换器,可以把特殊的请求参数转换成需要的类型;

4、多种表现层技术,如:JSP、freeMarker、Velocity等;

5、Struts2的输入校验可以对指定某个方法进行校验;

6、提供了全局范围、包范围和Action范围的国际化资源文件管理实现。

struts2是如何启动的?

struts2框架是通过Filter启动的,即StrutsPrepareAndExecuteFilter,此过滤器为struts2的核心过滤器;

StrutsPrepareAndExecuteFilter的init()方法中将会读取类路径下默认的配置文件struts.xml完成初始化操作。

struts2读取到struts.xml的内容后,是将内容封装进javabean对象然后存放在内存中,以后用户的每次请求处理将使用内存中的数据,而不是每次请求都读取struts.xml文件。

struts2框架的核心控制器是什么?

它有什么作用?

1)Struts2框架的核心控制器是StrutsPrepareAndExecuteFilter。

2)作用:负责拦截由/*指定的所有用户请求,当用户请求到达时,该Filter会过滤用户的请求。

默认情况下,如果用户请求的路径不带后缀或者后缀以.action结尾,这时请求将被转入struts2框架处理。

否则struts2框架将略过该请求的处理。可以通过常量"struts.action.extension"修改action的后缀。

如:

如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。

struts2配置文件的加载顺序:

struts.xml——>struts.properties常量可以在struts.xml或struts.properties中配置,如果在多个文件中配置了同一个常量,则后一个文件中配置的常量值会覆盖前面文件中配置的常量值。

struts.xml文件的作用:通知Struts2框架加载对应的Action资源。

struts2是如何管理action的?

这种管理方式有什么好处?

struts2框架中使用包来管理Action,包的作用和java中的类包是非常类似的。

struts2默认能解决get和post提交方式的乱码问题吗?

不能。struts.i18n.encoding=UTF-8属性值只能解析POST提交下的乱码问题。

ActionContext、ServletContext、pageContext的区别?

1)ActionContext是当前的Action的上下文环境,通过ActionContext可以获取到request、session、ServletContext等与Action有关的对象的引用;

2)ServletContext是域对象,一个web应用中只有一个ServletContext,生命周期伴随整个web应用;

3)pageContext是JSP中的最重要的一个内置对象,可以通过pageContext获取其他域对象的应用,同时它是一个域对象,作用范围只针对当前页面,当前页面结束时,pageContext销毁,生命周期是JSP四个域对象中最小的。

THE END
1.自学二建从何入手:二级建造师备考策略与技巧2构建二建考试自学框架 选择合适的教材对于自学二级建造师至关重要。考生应选择经过官方推荐或广泛认可的教材,这些教材通常与考试大纲紧密对应,内容全面且权威。在自学过程中,考生应逐章节深入学习,做好笔记,归纳总结关键概念。同时,教材中的案例分析和习题也是自学的重要资源,通过练习可以加深对知识点的理解和应用。此外https://www.hqwx.com/jiangong/ejjzs/30123/
2.Qt框架自学sq639fcf1cb6a7c的技术博客Qt框架自学 Qt框架是一种强大的跨平台C++应用程序开发工具,它不仅支持图形用户界面的开发,还涵盖了多线程、数据库访问、网络通信等多方面的功能。以下是一些关于Qt框架自学的建议: 了解基础概念:在开始学习之前,需要对Qt框架有一个基本的了解。Qt是一个由Trolltech公司(现为The Qt Company)开发的开源跨平台应用程序https://blog.51cto.com/u_15917081/12023796
3.SpringBoot自学(九)使用DAO层不使用Mapper直接进行数据访问一般我们开发Spring boot的web应用的时候,一般会实现Service接口,然后实现对应的类,调用方法,通过对DAO映射进行数据访问,我现在就说一下如何实现简单快速的实现数据的访问。通过对DAO层直接进行数据的访问 我贴代码先: public interface UserMapper { int deleteByPrimaryKey(Integer id); https://www.jianshu.com/p/87b18cad029b
4.前端框架ZK自学文档《前端框架ZK自学文档》由会员分享,可在线阅读,更多相关《前端框架ZK自学文档(25页珍藏版)》请在装配图网上搜索。 1、ZK开发说明 1. 什么是ZK >定义:一种用户界面开发框架。 > 特点:基于AJAX事件驱动、丰富的XUL[i]和XHTML[2]、ZUML (ZK用户界面标 记语言)。 >原理: / ZK loader:由一系列 Java servletshttps://www.zhuangpeitu.com/article/169516789.html
5.ext框架技术自学笔记,代码范例(可以直接COPY应用在自己程序中ext框架本人自学笔记,使用频率很高的ext框架技术源代码,可以直接COPY粘贴到自己程序中,稍微改动一下就可以使用资源推荐 资源详情 资源评论 在.NET中使用Ext.Direct示例源代码 浏览:173 4星 · 用户满意度95% Ext JS高级程序设计,第5章 在.NET中使用Ext.Direct示例源代码 EXT常用小知识点总结 浏览:159 常用https://download.csdn.net/download/ELement_DG/811719
6.前端框架ZK自学文档(26页)前端框架ZK自学文档.docx,开发说明什么是定义一种用户界面开发框架特点基于事件驱动丰富的和用户界面标记语言原理由一系列组成负责接受生成相应的页面包括组件即异步更新引擎负责接收更新组件属性并将返回客户端客户端引擎由一些列组成负责监控浏览器事件队列如果有事件触发https://max.book118.com/html/2020/0711/8072005010002124.shtm
7.伯克利提出强化学习框架,可自学功夫等动作近日,伯克利人工智能研究院(BAIR)发表了一篇文章,文章中提出了一个强化学习框架,并基于这个框架打造了一款可以自学功夫的虚拟机器人。 这个虚拟机器人实现了特技演员级别的动作控制,中国功夫、跑酷、街舞等几大类动作样样在行,囊括了后空翻、跨越障碍、鲤鱼打挺、走独木桥、投棒球、太空步等等动作。同时,相对已有研究成https://time.geekbang.org/column/article/5949
8.杭州市上城区运用“泛在学习”课程,帮助各初中科学衔接线上线下—浙江该课程的课程方向是推进泛在学习方式,实现翻转课堂,理念是自主、自学、自选、自我。 最后“泛在学习”的版块设置分为了自学教材、知识框架、重点解析、基础达标、能力提升、疑难解答、课后作业等。 课程体验 现在就跟着小编来体验一下“泛在学习”课程,感受它的魅力吧! https://www.eol.cn/zhejiang/zhejiang_news/202005/t20200507_1725374.shtml
9.自考指导:毕业论文写作框架详解二、毕业论文写作框架详解 广义来说,凡属论述科学技术内容的作品,都称作科学著述,如原始论著(论文)、简报、综合报告、进展报告、文献综述、述评、专著、汇编、教科书和科普读物等。但其中只有原始论著及其简报是原始的、主要的、第一性的、涉及到创造发明等知识产权的。其它的当然也很重要,但都是加工的、发展的、为https://www.oh100.com/kaoshi/zikao/150802.html
10.小学数学长方体的认识说课稿(精选8篇)出示一个长方体框架,先放手让学生自学,然后在小组内交流自己的想法,最后汇报。 (设计意图:放手让学生自学,把学习的主动权还给学生,充分展现学生的思维。) 4、认识长方体,正方体的立体图 先让学生把自己手中的长方体或正方体放在桌上不动,变换着角度去观察,最多能看到几个面?然后动手画长方体或正方体的立体https://www.ruiwen.com/shuokegao/1729537.html
11.巅云学苑PHP中文网自学平台社区php菜鸟培训视频教程巅云学苑-世界上最好的语言PHP自学平台,拥有12年php开发实战经验的工程师,分享海量PHP视频教程,包括PHP框架培训教程,旨在打造由浅入深、通俗易懂的PHP菜鸟培训中文网社区。https://www.citclub.cn/
12.个人自学学习计划范文(通用20篇)对于复习时间,学习语文适合利用零碎时间,每天90分钟左右,也可以分两次进行。知识点的复习、答题技巧的掌握适合借助练习的形式,不要死记硬背。一旦发现知识盲点,或自学,或求教老师,尽快解决,不要拖,因为寒假开学后的二轮复习重在构建知识的框架。 语言基础方面,可以在寒假展开病句、成语等整理工作,对近义词辨析则需要举https://www.yjbys.com/xuexi/jihua/3076049.html
13.华为鸿蒙系统学习HarmonyOS4.0开发自学篇业界新闻HarmonyOS技术框架视图如下: 内核层 内核层包括内核子系统和驱动子系统。 内核层的内核子系统提供各种各样的内核给各种设备进行切换,从而与系统适配。多个内核子系统对外提供了API抽象(叫做KAL)接口,使得我们能够在手机,家电设备或者是非常小的单片机上安装HarmonyOS操作系统 https://www.jindouyun.cn/document/industry/article/177968