Spring MVC
1.SpringMVC是什么?
Spring Web Model-View-Controller,由Spring框架推出的,MVC模式的WEB框架,基于Servlet API标准实现。
它结合了MVC模式的优点和Spring的便利性。
Servlet简介
Servlet定义了一套处理网络请求的规范。编写HTTP服务器时,基础工作:识别HTTP请求,复用TCP连接、线程等,由现有的WEB服务器实现,我们只需把应用放在WEB服务器上。
MVC框架简介
Model-View-Controller,MVC的分层将视图层、业务层分离,降低耦合性,简化了开发,有利于工程化管理
2.SpringMVC目标&原理
SpringMVC围绕着DispatcherServlet,请求进来时,DispatcherServlet将请求分发到Controller, Controller返回ModelAndView, 经View进行视图渲染后返回。
DispatcherServlet在web.xml中注册并初始化,Servlet容器会自动监测到。

2.1 上下文继承关系
DispatcherServlet需要WebApplicationContext作为配置上下文,对于很多应用来说,使用一个WebApplicationContext就简单且够用了。
不过也有多个DispatcherServet实例,共享一个Root WebApplicationContext。下图说明了这个继承关系。

下面的web.xml中配置了 WebApplicationContext的继承关系。app1-context继承了root-context【contextConfigLocation属性配置】。
<web-app> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/root-context.xml</param-value> </context-param> <servlet> <servlet-name>app1</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/app1-context.xml</param-value> <!-- 若此处配置为空,则表示不需要多上下文继承关系 <param-value></param-value>--> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>app1</servlet-name> <url-pattern>/app1/*</url-pattern> </servlet-mapping> </web-app>
3. SpringMVC应用中的相关问题
3.0 一次完整的网络请求过程?

3.1 Tomcat、SpringMVC之间的关系?
分工合作关系。Tomcat完成HTTP服务器的基础工作,如识别HTTP请求、复用TCP连接、线程等。具体业务实现,是基于SpringMVC WEB 框架搭建的。

3.2 SpringMVC 访问静态资源的方式? DispatcherServlet配置?
背景问题:项目技术栈为Tomcat、SpringMVC,想要将HTML、JS文件,放到服务器上,供其他人浏览。。直接将静态资源放到webapp下,访问不了该资源。
背景原因:在web.xml中,将所有请求/*都交由DispatcherServlet来处理了。被拦截导致无法访问。那么静态资源如何访问呢?
<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-dispatcher.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>
将请求静态资源的URL,映射到defaultServlet来处理
参考链接:

浙公网安备 33010602011771号