• 初识Spring MVC


    一、spring MVC 简介

    1.  Spring MVC也叫Spring Web mvc,属于表现层的框架。Spring MVC是spring框架的一部分,是在Spring3.0后发布的。

    2.spring MVC架构

    (1)

             

    (2)

                                          

    3.spring MVC请求流程

        request---------->DispatcherServlet(中央调度器/前端控制器)--------->HandlerMapping(处理器映射器)------------>返回一个执行链--------->将执行链转交给 HandlerAdaptor(处理器适配器)------->

    调度Handler(处理器)--------->ModelAndView--------->先将结果交给HandlerAdaptor,然后再由HandlerAdaptor转交给DispatcherServlet--------->DispatcherServlet调度ViewResolver(试图解析器)-------->交给DispatcherServlet--------->寻找View-------->View做出响应(response)。

    4.SpringMVC第一个入门案例

      案例:用户提交一个请求,服务器端处理器在接受到这个请求后,给出一条欢迎信息,在页面中显示。

    01.导入jar包

       <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>4.3.7.RELEASE</version>
        </dependency>
    
    
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>4.2.0.RELEASE</version>
    </dependency>
    

    02. 配置步骤

    1〉在web.xml中配置前端控制器

    2〉处理器映射器(HandlerMapping,有默认值,因此可以不用配置)

    3〉处理器适配器(HandlerAdaptor,有默认值,因此可以不用配置)

    4〉处理器

    5〉试图解析器(ViewResovler,有默认值,因此可以不用配置)

    03.注册前端控制器

    <web-app>
      <display-name>Archetype Created Web Application</display-name>
    
      <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:applicationContext.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>
    
    </web-app>
    

    04.定制处理器

    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class FirstController implements Controller {
        public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
            ModelAndView mv = new ModelAndView();
            mv.setViewName("/index.jsp");  //逻辑视图名
            return mv;
        }
    }
    

    05.jsp页面的搭建

    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <h2>Hello World!</h2>
    </body>
    </html>
    

    06.applicationContext.xml配置

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mv="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
        <bean id="/hello.do" class="cn.happy.controller.FirstController"></bean>
    </beans>
    

    5.第一个案例的提升----〉试图解析器

    01.在applicationContext.xml中加入:

        <!--试图解析器-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!--前缀-->
            <property name="prefix" value="/"></property>
            <!--后缀-->
            <property name="suffix" value=".jsp"></property>
        </bean>
    

    02.将定制处理器中的逻辑试图名修改一下:

      mv.setViewName("index");  //逻辑视图名
    

    6.关于urlpattern的说法

      01.最好配成*.do,不能配成/*,(无法访问*.jsp等动态资源),最好也不要配成/(无法访问静态资源),不得不配成/。一切源于Restful编程

      02.不能配置为/*  : DispatcherServlet会将向动态页面请求,即向jsp页面跳转请求也当作是一个普通的Controller请求。中央调度器会调用处理器映射器为其查找相应的处理器。当然是找不到的。jap页面回报404错误。  结论:  /* 会拦截动态资源。

    7.解决动态资源无法访问的三种方法:

    01.不得不配成/,使用Tomcat默认的Servlet解决,在web.xml中加入如下代码:

      <!--解决静态资源方案 一    -->
    
      <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.jpg</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.css</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.js</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.pdb</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.gif</url-pattern>
      </servlet-mapping>
    

    02. 使用MVC的default-servlet-handler,会将对静态资源访问的请求通过HandlerMapping映射到默认的Servlet请求处理器DefaultServletRequestHandler对象。而该处理器调用了Tomcat的DefaultServlet来处理静态资源的访问请求。当然需要引入mvc约束。

     xmlns:mv="http://www.springframework.org/schema/mvc"
    
    <!--解决静态资源方案二  放在映射器下面-->
        <mv:default-servlet-handler/>
    

    03.使用MVC的resource解决

          在spring3.0.4之后,spring定义了专门用于处理静态资源请求处理器ResourceHttpRequestHandler。并且添加了<mvc:resource/>标签,专门用于解决静态资源无法访问问题。

    <!--解决静态资源方案三-->
        <mv:resources mapping="/image/**" location="/image/"/>
    

     Location:静态资源所在的目录

        mapping:对资源的请求 

      

      

      

      

      

      

     



  • 相关阅读:
    分布式系统笔记
    Paxos算法细节详解(一)
    Java G1学习笔记
    Spring Boot 的 10 个核心模块
    k8s 重点
    毕玄:阿里十年,从分布式到云时代的架构演进之路
    netty原理解析
    JVM调优总结(一):基本概念
    《快学 Go 语言》第 16 课 —— 包管理 GOPATH 和 Vendor
    Oracle 检查表空间使用情况
  • 原文地址:https://www.cnblogs.com/cn-930621/p/7747461.html
Copyright © 2020-2023  润新知