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>
web.xml中的servlet-mapping配置

将请求静态资源的URL,映射到defaultServlet来处理

 

 

参考链接:

Spring Web MVC官方文档

SpringMVC访问静态资源的三种方式  

posted @ 2021-02-20 17:37  大美da美  阅读(108)  评论(0)    收藏  举报