MVC模型(Model-View-Controller):一种架构性的模式,帮助我们将开发的代码结构、组织
的更加合理。
Model(数据模型),提供要展示的数据,包含数据和行为。
View(视图),进行模型的展示。
Controller(控制器),接收用户请求,委托给模型进行处理,处理完毕之后吧返回的模型数据交给视图。【调度作用】
在标准的MVC中,模型能主动把数据给试图进行更新(可以采用观察者设计模式),但是,在Web开发中模型是无法主动给视图的,即无法主动更新用户界面,因为在Web的访问是请求-响应的模式。必须由客户端主动发出请求之后,服务器才能把数据返回。
核心组件:
1.DispatcherServlet:(前端控制器),用来过滤客户端发送过来,想要进行逻辑处理的请求。
2.HandlerMapping:(处理器映射器),DispatcherServlet接收到客户端请求的URL之后,根据一定的匹配规则, 再把请求转发给对应的Controller,这个匹配规则由HandlerMapping决定。
3.HandlerAdaptor:(处理器适配器)。处理器适配器用来适配每一个要执行的Handler对象。
通过HandlerAdapter可以支持任意的类作为处理器
4.Controller/Hendler:(控制器/处理器)。用来处理用户请求,并且处理完成之后返回给用户指定视图的对象。
5.ViewResolver:(视图解析器)。Handler返回的是逻辑视图名,需要有一个解析器能够将逻辑视图转化为实际的物理视图。
SpringMVC框架提供一个核心的Servlet对象(DispatcherServlet前端控制器)来对服务器接收到的请求进行解析,当这个请求被DispatcherServlet获取到之后,DispatcherServlet需要根据HandlerMapping对象的映射关系,将这个请求转交给真正能够处理客户请求的【Controller控制器】来处理。Controller处理完成之后,返回ModelAndView对象,也就是模型和视图的结合体。ViewResolver根据ModelAndView中的逻辑视图名找到真正的物理视图,同时使用ModelAndView中模型里面的数据对视图进行渲染。
SpringMVC在项目中的搭建:
1.构建Web项目
2.导入jar包
3.配置前端控制器
(就是一个Servlet对象),继承自HttpServlet。在web.xml中配置
例如:
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
4.编写Controller控制器
实现Controller接口
5.配置处理器映射器(有默认配置)
作用:将url和bean的name对应
6.配置处理器适配器(有默认配置)
7.配置视图解析器(有默认配置)
前缀和后缀都是 空
8.配置处理器
把编写好的handler/controller在spring中进配置,让其接受Spring IoC容器管理
<bean name="/hello.action" class="com.briup.web.controller.HelloWorldController"/>
拦截所有请求:
<url-pattern>/</url-pattern>
自定义拦截请求:
*.html,*.css......
解决静态资源被拦截:
一.利用Tomcat的defaultServlet来处理静态文件
例如:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
特点:1.要配置多个
2.要写在DispatcherServlet前面
3.高性能
二.使用<mvc:resources>标签
例如:
<mvc:resources mapping="/images/**" location="/images/"/>
mapping: 映射
两个*,表示映射指定路径下所有的URL,
三. 使用<mvc:default-servlet-handler/>标签
在spring配置文件中加入此标签配置即可
spring提供的编码过滤器:
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>