• 博客园Logo
  • 首页
  • 新闻
  • 博问
  • 专区
  • 闪存
  • 班级
  • 我的博客 短消息
    用户头像
    我的博客 我的园子 账号设置 退出登录
    注册 登录
欢迎你来到 鸢羽 的博客!!
有交流才有进步, 记录我的学习笔记, 用我的经历, 让你少进一个坑, 让我们一起成长吧!
博客园    首页    新随笔    联系   管理    订阅  订阅
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/");
        }
    }
    
posted on 2019-07-22 13:02  鸢羽_颖  阅读(74)  评论(0)  编辑  收藏
刷新评论刷新页面返回顶部
Copyright © 2021 鸢羽_颖
Powered by .NET 5.0 on Kubernetes