其他分享
首页 > 其他分享> > 第三个基础框架 — springMVC

第三个基础框架 — springMVC

作者:互联网

1、什么是springMVC?

截图

2、实操理解springMVC的执行原理( 使用纯的xml配置 )


        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.12.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.2.1</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    
    <servlet>
        <!--
            <servlet-name>springmvc</servlet-name> 这里的springmvc名字乱取都可以,只要自己和别人看得懂就行

            DispatcherServlet 就是springMVC的中央大脑 所有的请求都会经过它
            由这个中央大脑来分配这个请求的流程是怎么样的
         -->
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>


        <!--  把springMVC的配置文件集成过来
                为什么需要把springMVC集成到这里到?
                    这个web.xml其实也算一个容器,这个容器处理的是后端的程序,这个需要知道servlet的执行原理 和 这个web.xml
                    及tomcat中的web.xml的关系才能理解

                就当补充知识点吧,在我的servlet中只讲了这个web.xml和Tomcat中的web.xml的关系,其他的没讲
                因此:为了这里面话别太多影响内容,待会儿完了之后再补充servlet的执行原理,这里就这么配置就行了

                注:<param-value>classpath:springmvc.xml</param-value>中的springmvc.xml就是要配置的springMVC文件名
          -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>

        <!-- 这个这个在servlet中说明过,这个值只要大于 -1 即可,就是servlet加载的优先级
                这里简单粗暴理解可以认为是:单例模式的懒汉式加载( 虽然不对,但是用这个想法来理解也算对 )
          -->
        <load-on-startup>1</load-on-startup>
    </servlet>


    <!--
        这里的springmvc名字必须和前面说的乱取的<servlet-name>springmvc</servlet-name>名字保持一致
        <url-pattern>/</url-pattern>  这里面必须用 /      不能用其他的
        千万注意:这里不用用成 /*

        / 和 /*的区别
             / 不会匹配到.jsp, 只针对我们编写的请求;即:.jsp 不会进入spring的 DispatcherServlet类
            /*  会匹配 *.jsp,会出现返回 jsp视图 时再次进入spring的DispatcherServlet 类,
                导致找不到对应的controller,从而报404错误
     -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

(2)、配置springMVC文件( 一是刚刚的web.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"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">


    <!--    添加处理器映射器   就是原理图中的映射器 HandlerMapping-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

    <!--    添加处理器适配器   就是原理图中的适配器HandlerAdapter-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

    <!--    添加视图解析器
            这个的本质就是把controller中返回的视图名进行拼接,从而找到相应的视图xxxx,jsp而已
    -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- prefix 要展示的视图的前缀 这里是/  是因为一:我的视图就放在web目录下的,要是加了另外的目录,那就再拼接
                    如:/WEB-INF/jsp/     二是:在浏览器中发起请求的时候,对应的url路径名其实是/xxxx.jsp涩
                                               而这里的xxxx就是待会儿controller中返回回来的那个名字
        -->
        <property name="prefix" value="/"/>
        <!-- suffix 要展示的视图的后缀 -->
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

(3)、编写controller
截图

(4)、把这个controller中的类托管到springMVC.xml这个容器中、以及编写要跳转的视图
截图

(5)、配置Tomcat,启动项目
截图

(6)、会报404的情况

补充:3、servlet的执行原理


       <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>

这是一个初始化参数嘛,别忘了GenericServlet还是servletConfig的实现类,因此:servletConfig的功能它也有,相应的HttpServlet也有,作用就是为了读取初始化参数嘛 ———— 获取初始化参数在我的servlet说明servletContext获取初始化参数时已经说明了,原理就是一样的,servletContext这里面的东西在我们编写的任何一个servlet中都可以拿到,因此:这里web.xml中加入了springMVC的参数路径,也就把springMVC的xml配置文件在请求进来时也加载出来了( 这也是我说的哪个load-on-start大于-1可以理解为:单例模式的懒汉式加载的原因 ,因为:相对于servlet本身来说,这个springMVC的配置文件确实是后面controller中用时才加载的,只是那个数字大小也关系到多个servlet的加载时的先后顺序而已 )

4、企业级使用springMVC ———— 注解版开发


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
">

<!--    添加注解支持-->
    <mvc:annotation-driven/>
<!--    让springMVC的注解在什么地方有效
        springMVC是处理controller的,因此:精确到controller包就可以了 表示:这个包下的所有类都支持springMVC注解
-->
    <context:component-scan base-package="cn.xiegongzi.controller"/>
    
<!--    编写视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    
<!--    配置不处理静态资源,即:html,jsp....之类的
        这种方式是:遇到访问静态资源的请求 即:web目录下的html、jsp.....,
                  让他们默认走tomcat的servlet处理方式( 即:tomcat中的那个web.xml )
        这个还有另外两种方式,这里先用这种,后续会说明,后续内容多得很,反正servlet能玩的,这个springMVC都能玩
-->
    <mvc:default-servlet-handler/>
    
</beans>

标签:xml,web,请求,框架,springMVC,第三个,springmvc,servlet
来源: https://www.cnblogs.com/xiegongzi/p/15451092.html