我们先来说一下WebMVC框架的基本任务。在Web运用中,前台卖力捕捉用户的动作、展示系统的一样平常界面和处理结果,后台则紧张卖力系统的逻辑层面的处理,前台和后台一起为系统和用户的交互、数据的处理做事,并终极构建出完全的Web运用。
在这个目的的根本上,我们先来看看Java技能下的Web运用的早期是怎么处理这个问题的。
1.servlet期间:Web要求通过前真个html页面提交到后台servlet,servlet对要求进行处理、运行干系逻辑,通过输出html语句天生展示处理结果的页面回到前端,用户和系统之间的交互建立在繁琐的Web页面的天生根本上。
2.jsp(Java Server Page)期间:Web要求通过前真个jsp页面提交到后台逻辑的servlet或者jsp处理单元(jsp页面和servlet没有实质差异,前者实行的时候是会被编译成后者的),后台处理后处理结果放入相应的http要求数据保存区,再将这个Web要求转发到某个事先写就的jsp页面,jsp页面把须要的数据写入到自身并展示出来(在做事器后台实际上还有这样自动完成的步骤:编译成临时servlet,再通过输出html语句天生展示处理结果的页面回到前端)。这样系统的后台是建立在功能不甚清晰的servlet和jsp处理单元之上的。
3.servlet+jsp期间:这是MVC思想在Web开拓中的出发点。servlet只被当作后台处理单元,而jsp页面只被当作前台展示和交互页面而不参与后台逻辑处理。Web要求通过jsp页面提交到后台,后台servlet则卖力处理逻辑,后台处理后处理结果放入相应的http要求数据保存区,再将这个Web要求转发到某个事先写就的jsp页面,jsp页面把须要的数据写入到自身并展示出来。和jsp期间虽然看似相同,但是由于清楚划分了servlet的controller掌握器浸染、jsp的view视图的浸染,(当然在后台还有model数据模型),使得Web开拓能够构造化地进行,系统层次也更为清晰。
那么我们来解释一下究竟什么是Web的MVC架构(当然除了在Web领域,大多数的用户系统交互中都会有MVC架构的影子)。M(Model数据模型)V(View视图)C(Controller),是Web运用的开拓策略和Web运用实际运行的基本模型,大体说来便是这样的过程:要求通过V发送到后端C,C吸收到要求后选择适当的M进行数据处理,处理完毕后C选择得当的V进行展现。
这个模型称为JSP Model2,是MVC模型的基本事理,如下图所示:
Spring MVC框架的差异和上风
如上所述的基本MVC框架看起来已经知足我们的一半需求了,那么我们所说的利用包括像Spring MVC这样的WebMVC框架有什么好处呢?
在JSP Model 2 这个经典WebMVC模型里面,我们的serlet和Web要求是逐一映射的并且硬配置在Web运用的配置文件中的,因此系统的需求增加导致映射关系的增加再导致Web运用本身的体积增加,缺少一样平常性、易管理性和可重用性。这样的问题势必会增加系统的掩护难度。
以是,利用一个集中掌握器对Web要求进行剖析并且选择得当的逻辑处理Controller来处理Web要求,将硬编码在配置文件中的映射关系写在这个集中Controller中,这种做法仍旧会使得硬编码的问题,只不过是把硬编码转向了集中Controller中。
Spring MVC在Web要乞降我们所说的这个掌握器Controller之间利用了一个非常关键的节点--前置掌握器(Front Controller),前置掌握器的浸染是吸收所有的Web要求并将要求派发到不同的页面掌握器(Page Controller),而页面掌握器便是我们前面所说的这种一样平常意义上的Controller,亦即真正进行后段页面处理逻辑的掌握器。由于引入了新的映射处理器、页面渲染器等,存在于JSP Model 2的耦合和硬编码问题能够得以办理,其余加上Spring自身的IOC特性,可以将组件在容器启动的时候就注入,实现组件的初始化前置。
如下图所示为Spring MVC的模型情形:
Spring MVC框架的IOC加载事理
Spring MVC结合Spring自身的特性和WebMVC的模型,能够将Web运用的开拓实现得更简洁轻快,使得可复用性得到更好的发展。下面是Spring MVC的几个主要角色:
DispatcherServlet(前置掌握器):将Web要求统一发送至此,把要求发送至HandlerMapping
HandlerMapping(映射处理器):吸收要求并剖析要求-处理器映射关系,把要求发送到Controller
Controller(页面掌握器):吸收被派发的要求,真正处理业务逻辑,并将处理数据发往ViewSolver
ViewResolver(视图配发器):统一的视图配发器和详细的视图模版技能无关,按照视图配发器的配置项将数据添加到指定视图模版技能的View中
View(视图):真正展现数据的页面视图
这些角色参与全体WebMVC的流程如图所示:
在知晓了这些角色之后我们再来说SpringMVC的这些角色在Web容器中的初始化过程,在这里我们利用一个相对有通用性的例子来解释个中非常主要的组件:
ROOT WebApplicationContext 和 ContextLoaderListener
像所有的Spring IOC容器启动注入业务组件一样,Spring MVC框架也有一个紧张的IOC容器用于加载注入组件,这个IOC容器便是顶层的ROOT WebApplicationContext,它通过默认位置在/WEB-INF路径下的applicationContext作为配置文件来进行加载,加载的契机当然在Web运用启动的时候,因此我们须要在作为这个Web运用的整体描述文件web.xml定义一个监听器ContextLoaderListerner,监听器在Web运用启动之后加载ROOT WebApplicationContext,加载的WebApplicationContext中紧张会注入DAO、Services和数据源这些业务工具。
Spring WebApplicationContext 和 DispatcherServlet
在SpringMVC架构中加入了一个为SpringWeb运用层组件打造的IOC容器,我们不妨称之为Spring WebApplicationContext,这个IOC容器是ROOT WebApplicationContext的子容器,换言之,它是可以访问到父容器中的注入工具的,也因此,个中注入的页面掌握器工具Controller可以注入父容器中已经注入的Services和DAO工具。同样的,我们须要在web.xml中定义一个前置掌握器servlet DispatcherServlet来接管所有符合定义的Web要求,并通过默认位置在/WEB-INF路径下的<servlet-name>-servlet作为配置文件来加载Spring WebApplicationContext,这个IOC容器存在的意义在于区分ROOT IOC和Spring IOC的职责须要,紧张注入Controller,HandlerMapping,ViewResolver等SpringWeb层做事组件。
阐明了对SpringMVC架构至关主要的两个IOC容器和加载它们的组件、IOC的注入配置文件和注入的组件类型,我们来看看在详细的SpringMVC项目中是怎么写的。
Spring MVC框架的利用
web.xml
<?xml version=\"大众1.0\公众 encoding=\公众UTF-8\公众?><web-app...> <!--启动监听器加载ROOT WebApplicationContext--> <listener> <listener-class> org.springframework.Web.context.ContextLoaderListener </listener-class> </listener> <!--前置掌握器加载Spring WebApplicationContext--> <servlet> <servlet-name> springDispcher </servlet-name> <servlet-class> org.springframework.Web.servlet.DispatcherServlet </servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name> springDispcher </servlet-name> <url-pattern> .do </url-pattern> </servlet-mapping></web-app>
/WEB-INF/applicationContext.xml
<?xml version=\"大众1.0\"大众 encoding=\公众UTF-8\"大众?><beans...> <bean id=\"大众someService\公众 class=\"大众org.myconmpany.service.SomeService\"大众> </bean> <bean id=\"大众someDao\公众 class=\"大众org.myconmpany.dao.SomeDao\"大众> </bean></beans>
/WEB-INF/springDispatcher-servlet.xml
<?xml version=\公众1.0\"大众 encoding=\"大众UTF-8\"大众?><beans...> <bean id=\公众handlerMapping\公众 class=\公众org.springframework.Web.servlet.handler.BeanNameUrlHanlerMapping\"大众> </bean> <bean name=\"大众/someLink.do\公众 class=\"大众org.myconmpany.controller.SomeController\公众> </bean> <bean id=\"大众viewResolver\"大众 class=\"大众org.springframework.Web.servlet.view.InternalResourceViewResolver\"大众> <property name=\"大众prefix\"大众 value=\"大众/WEB-INF/jsp/\"大众/> <property name=\公众suffix\公众 value=\"大众.jsp\"大众/> </bean></beans>
这便是Spring MVC的基本概况,但是在精简的开拓过程中我们更方向于利用Spring为我们准备的基于表明的开拓,这样做可以大大减少配置文件的规模,让Spring为我们自动完成一些机器性的事情。
大家可以点击加入群:606187239【JAVA大牛学习互换】
里面有Java高等大牛直播讲解知识点 走的便是高端路线
(如果你想跳槽换事情 但是技能又不足 或者事情上碰着了
瓶颈 我这里有一个JAVA的免费直播课程 讲的是高真个知识点
根本不好的误入哟 只要你有1-5年的开拓履历
可以加群找我要教室链接 把稳:是免费的 没有开拓履历误入哦)
1、具有1-5事情履历的,面对目前盛行的技能不知从何下手,
须冲要破技能瓶颈的。2、在公司待久了,过得很安逸,
但跳槽时口试碰钉子。须要在短韶光内学习、跳槽拿高薪的。
3、如果没有事情履历,但根本非常踏实,对java事情机制,
常用设计思想,常用java开拓框架节制闇练的。
4、以为自己很牛B,一样平常需求都能搞定。
但是所学的知识点没有系统化,很难在技能领域连续打破的。
5. 群号:高等架构群 606187239备注好信息!
6.阿里Java高等大牛直播讲解知识点,分享知识,
多年事情履历的梳理和总结,带着大家全面、
科学地建立自己的技能体系和技能认知!
Spring MVC事情事理
Dispatcher Servlet分发器
Handler Mapping 处理器映射
Controller 掌握器
ModelAndView 模型和视图工具
ViewResolver 视图解析器
Spring MVC 分离了掌握器、模型工具、分派器以及处理程序工具的角色,这种分离让它们更随意马虎进行定制。
Spring MVC属于SpringFrameWork的后续产品,已经领悟在Spring Web Flow里面。Spring 框架供应了构建 Web 运用程序的全功能 MVC 模块。
Spring框架是业务层框架,核心组件是容器
它是管理bean的,广义上讲任何一个javaBean它都管理,实例化工具两大观点:IOC、AOP
拦截配置
.action 拦截所有访问URL后缀为action
/ 拦截所有的访问的URL, 包括action, 静态js, images, css
修正action-servlet.xml文件名和位置?
移动action-servlet.xml到src目录下,改名为spring-mvc.xml
修正web.xml,给DispatcherServlet增加初始参数
通过初始化参数,指定配置文件位置
<servlet> <servlet-name>action</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param></servlet>
spring-mvc表明办法开拓(spring3.2.2)
新建web project
要担保项目编码为UTF-8,否则中文乱码
引入jar包
web.xml中配置分发器servlet DispatchServlet
创建spring配置文件(进行包扫描,和视图解析器) action-servlet.xml 视图解析器访问路径:prefix + logicName + suffix
创建掌握器
创建jsp文件
发布、测试
springMVC是何时加载的?
它不是随着web容器启动而加载,而是在第一次访问时才加载
IOC(掌握反转)
将一个类放到spring容器(bean)里面,spring容器来创建工具
例: 正常情形你要用饭,须要先到食堂,然后买饭用饭
溘然有一天你不想出去了,定了一份外卖,剩了去食堂的过程,只须要用饭就可以了
将买饭的任务交给送餐的,对应的便是将工具的创建交给spring,过程不用你管
把一个类放到spring容器中, 类叫bean,换句话说,一个bean描述一个类
beans 存放了很多的类
id是标识符
class是类的全名
spring有很多容器的spring关心的是集中管理在java企业运用和web运用中涉及的数据持久化,事务处理,中间件,分布式打算等抽象资源,并在此根本上,为运用供应了基于pojo的开拓环境。
口试要点:Struts1、Struts2和springmvc比较
都是web层框架。
Struts1是基于servlet;Struts2是基于filter;springmvc是基于servlet 。
Struts1的action是单例模式,线程不屈安的;Struts2 action是原型模式 prototype,每次访问工具都会创建新的实例,担保线程安全性;springmvc controller是单例模式,全体程序只有一个工具实例。Spring的安全性是通过绑定threadlocal实现。
Struts1利用JSTL EL表达式,但是对凑集和索引属性的支持很弱。Struts2采取 OGNL。
struts2是类级别的拦截, 一个类对应一个request高下文,springmvc是方法级别的拦截,一个方法对应一个request高下文,而方法同时又跟一个url对应。
Strust1中常日以action访问时.do,struts2、spring mvc 都因此.action做结尾。
spring3 mvc可以认为已经100%零配置了。
版权申明:内容来源网络,版权归原创者所有。
除非无法确认,我们都会标明作者及出处,如有侵权烦请奉告,
我们会立即删除并表示歉意。感激。