#Web框架概述html
##Servlet Servlet返回用户响应,JSP的形式,HTML代码,能够制做网页展现信息代码。web
##Web页面 定义serlvet的路径,好比定义servletA,在web.xml添加serlvet的名称跟地址的映射若是有servletB,则添加B。若是接口少,则不是问题,若是接口不少 咱们在web的一些例如REST的服务,REST接口并非单纯的静态地址,是动态参数而变化的,/user/{userId}
,前面是user,后面是userId,根据user的不一样而不一样。动态的映射地址,若是经过Servlet只能经过/user/*定义到某个servlet,而后本身编写代码进行匹配userId。若是咱们的接口是以这种资源路径的方式,须要框架管理映射spring
##MVC模式 MVC核心为了解决数据与视图分离,数据进行修改不须要修改视图,视图进行修改不须要修改数据,而由控制器进行处理。 mvc
若是咱们经过Serlvet制做网页,不可避免的经过Serlvet嵌入大量Html代码。这样咱们把html耦合到了Java代码当中。
JSP相反的是Java代码嵌入到了HTML页面中
若是咱们要把视图与Java代码解耦app
##Web MVC框架框架
##DispatcherSerlvet使用 首先咱们须要在web.xml里面,去定义DispatcherServlet,而后定义这个servlet-name。
在下面的部分,咱们须要serlvet-mappingurl
<!-- SpringMVC的Servlet添加,Web项目载入Spring配置从这里开始 --> <servlet> <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <!-- 这里咱们配置spring的配置文件位置 --> <param-value>/WEB-INF/appconfig/mvc/spring/servlet-context.xml</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
这里是Spring提供的Serlvet,而不是咱们本身编写的。咱们经过serlvet-name定义一个dispatcherSerlvet,若是没有填写配置路径,则默认为WEB-INF/[servlet-name]-servlet.xml
spa
##[servlet-name]-servlet.xmlcode
HandlerMapping
路径到实际业务的映射,新版本的Spring不须要定义HandlerMapping,把SpringMVC开启默认就定义好Mapping,请求自动返回handlerxml
Controllers
能够经过Annotation定义Controller,经过Spring自动发现Controller
View解析相关
若是不定义会默认有一些解析功能,通常状况下咱们都会配置View解析,来根据咱们不一样的须要返回不一样的视图。返回的数据相同,可是返回的结果多是网页,也多是pdf。
##WebApplicationContext 不须要定义,会根据配置自动生成,WebApplicationContext并非惟一的,能够定义多个Serlvet匹配不一样的规则。咱们并不须要指定全部的配置路径的映射。能够定义不少个DispathcerServlet,咱们的DAO等通用内容。
##ContextLoaderListener Spring定义了ContextLoaderListener,这种方式定义通用的context
首先咱们在web.xml定义listener,而后咱们须要去指定Spring的配置文件,可能会指定多个appliactionContext*.xml。咱们这种方式WebApplicationContext叫作Root WebApplicationContext.
<listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext*.xml</param-value> </context-param>
咱们经过DispatcherServlet当中定义的WebApplicationContext是局部的配置,好比说controller、view等。可是咱们经过ContextLoaderListener定义的,则是全局的,是Root WebApplicationContext。
通常Spring去查找Bean,是经过WebApplicationContext,若是在本DispatcherSerlvet中没有找到,则去Root WebApplicationContext中寻找。
极端的作法把全部的Bean都定义Root WebApplicationContext。可是很不方便。通常标准作法是,对应的Servlet,对应相关的Controller和View。在公共的Root WebApplicationContext定义公共的Service、Repositories。