Struts2与springmvc的区别
* 1: Struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用get和set方法吧request中的数据注入.
* Struts2中一个action对应一个requset上下文.
* 2 :SpringMVC是方法级别的拦截,拦截到方法后根据参数的注解,把requset数据注入进去springmvc容器中
* 一个方法对应一个request上下文.
* 3 :springmvc方法之间基本独立,独享requset和response之间的数据。请求数据通过参数获取,处理结果通过model Map交回给框架。(方法之间不共享变量)
* Struts虽然方法之间也是独立的,当时action变量是可以共享的
* 4 :处理ajax的请求很方便,只需一个注解2responseBody ,直接返回响应文本。
* 5 :SpingMVC的实现是servlft.Struts2是filter。
* 6 :intercepter的实现机制。Struts 有自己的拦截器机制.interceptor,Springmvc用的是独立的AOP方式,导致Springmvc的配置文件比struts2的配置文件多.
struts2的工作流程:
一 工作原理
在Struts2框架中的处理大概分为以下几个步骤
1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求
2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)
3 接着FilterDispatcher (StrutsPrepareAndExcueteFilter )被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action
4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类
6 ActionProxy创建一个ActionInvocation的实例。
7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper
二 工作流程
1、客户端浏览器发出HTTP请求.
2、根据web.xml配置,该请求被FilterDispatcher接收
3、根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton
4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面
6、返回HTTP响应到客户端浏览器
看到网友的对Struts2的原理总结,我自己也总结以便后续的面试,以下是我的疑问
1、客服端发起一个请求,通过HTTP协议指向Tomcat容器,tomcat拿到请求她干了什么?
2、我们web.xml配置
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2
/*
我们从web配置文件中可以看到org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter,这个Filter这个类有什么用?
这个 /* 是拦截所有的请求,他拦截了请求做了什么处理? /*
3.我们struts.xml配置
/Hello.jsp
谁负责根据struts.xml配置,找到需要调用的Action类和方法呢?
4。最后根据struts.xml中的配置找到对应的返回结果result,在返回HTTP响应到客户端浏览器
SpringMVC的工作流程
* 1 :先是客户端发出一个http请求给服务器,web服务器对http请求解析, 如果匹配到DispatcherServlet的请求映射路径(在web.xml文件中指定) web容器将请求转交给DispatcherServlft
* 2 :DispatcherServlet接收到这个请求之后,根据请求的信息(包括url,http,请求报文头,和请求参数Cookie等),以及HandlerMapping的配置处理请求的处理器(handler)
3:DispatcherServlet根据HandlerMapping找到对应的Handler,并将处理权交给Handler,在有具体的HandlerAdapter对handler进行具体的调用.
* 4Handler对数据处理完成以后将返回一个ModelAndView()对象给DispatcherServlet.
* 5Handler返回的视图是一个逻辑视图并不是真正的视图,DispatcherServlft通过ViewResolver将逻辑视图转换为真正的视图View
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://img-blog.csdnimg.cn/img_convert/aac1f2966ba1a135b1c8953a3103ceb0.jpeg)
最后
码字不易,觉得有帮助的可以帮忙点个赞,让更多有需要的人看到
又是一年求职季,在这里,我为各位准备了一套Java程序员精选高频面试笔试真题,来帮助大家攻下BAT的offer,题目范围从初级的Java基础到高级的分布式架构等等一系列的面试题和答案,用于给大家作为参考
以下是部分内容截图
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!
准备了一套Java程序员精选高频面试笔试真题,来帮助大家攻下BAT的offer,题目范围从初级的Java基础到高级的分布式架构等等一系列的面试题和答案,用于给大家作为参考
以下是部分内容截图
[外链图片转存中…(img-JL4v6UEZ-1712223980557)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!