springMVC入门

Spring MVC框架

是一个遵守 MVC设计模式的框架。

MVC, Model, View, Control 三者的简称,其中,Model指的数据层【DAO+entity】, View指的是视图【html/css/js, JSP, Thymeleaf, Velocity, FreeMarker】,Control 指的是控制层【Servlet】.

mvc 的框架有很多,比较有名的有:

  • Struts1.x
  • Struts2.x — 以前很流行
  • Spring MVC — 现在很流行, 得益于SPRING框架的技术生态

Spring MVC是一款非常优秀的MVC框架,它提供如下功能:

  • 有一个非常强大的前置控制器,本质上是一个 Servlet
  • 有强大的配置能力,包含请求到控制器的映射
  • 提供了很多辅助性的功能,比如:
    • 模型和视图 的封装
    • Bean Validation
    • 文件上传和下载
    • 对json的支持
    • 自动封装请求参数,并转换成你想的任何对象,直接以参数传递进来。
    • 提供编码过滤器

Spring MVC框架的搭建

  1. 准备一个基于maven的web项目结构
  2. 加入SpringMVC 相关的依赖【spring-webmvc】
  3. web.xml 中添加 SpringMVC的配置
  4. 如果采用注解配置的话,需要添加一个 WebMvcConfig.java
  5. 添加控制器,写一个JAVA类,打上 @Controller 注解,并且在方法上面添加 @RequestMapping
  6. 默认情况下,控制器方法的返回值被会SPRING MVC解析成 jsp 的名字,如果添加了 @ResponseBody的话,则SPRING MVC框架会把方法的返回值当做响应体的内容,响应给客户端。

Spring MVC 的前置控制器 [DispatcherServlet]

这个前置控制器,我们叫做大C,而我们自己开发的控制器叫小 C。

这个类中所做的事情况非常复杂,后面随着学习的深入再来慢慢理解。

大C 的匹配模式

  1. 扩展名匹配

    web.xml中 的 , 使用 *.xxx 做为匹配的规则,它的优点是 静态资源不会被大C拦截,缺点是不支持· RESTFUL 的URL风格

  2. 通配

    web.xml中 的 , 使用 / 做为匹配的规则,它的优点是完全支持 RESTFUL 的URL风格,缺点是会拦截一些静态的资源。所以,我们要把这些静态资源注册到静态资源的处理器中。

    注:

    默认情况,所有的.jsp 文件是不会被 大C拦截的。

添加静态资源的处理器

1.容器层面的处理方式

通过容器自带的默认Servlet,来处理这些静态资源,如下:

<!-- 由容器提供的一个默认Servlet,请求过来后,先经过这个Servlet
     注:不同的容器,这个默认的名字是不一样的。
  -->
 <servlet-mapping>
     <servlet-name>default</servlet-name>
     <url-pattern>*.css</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
     <servlet-name>default</servlet-name>
     <url-pattern>*.html</url-pattern>
 </servlet-mapping>

2. Spring MVC框架的处理方式

  • 2.1 通过XML的配置来解决

    <mvc:default-servlet-handler/>
  • 2.2 通过XML的配置来解决,但不是利用 容器自带的默认Servlet来处理,而是基于spring mvc提供的功能。

    <!-- 以下的配置是基于SpringMVC内置的静态资源处理器
            mapping是映射的请求uri
            location是静态资源真正的位置
         -->
        <mvc:resources mapping="/css/**" location="/css/"/>
        <mvc:resources mapping="/images/**" location="/images/"/>
        <mvc:resources mapping="/js/**" location="/js/"/>
    
    <!-- 当然,我们可以把这些静态资源放在一个叫 static 的目录下,然后,只需要映射这一个目录即可 -->
  • 2.3 在配置中,重写父类的addResourceHandlers方法,并指定静态资源请求和映射位置,如下:

    @Configuration  //这是一个配置类
    @ComponentScan({"com.hcedu.springmvc.controller"})  //指定扫描的包及其子包
    @EnableWebMvc //启动WEB MVC 功能 (和 AOP, DT 一样,默认都是禁用的)
    public class WebMvcConfig extends WebMvcConfigurerAdapter { //继承WebMvc配置适配器类
    
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            //添加静态资源的映射
            registry.addResourceHandler("/static/**")
                                    .addResourceLocations("/static/");
        }
    }
点赞