• Spring MVC


    使用Spring MVC的第一步是配置DispatcherServlet是第一步,DispatcherServlet是一个servlet,所以可以配置多个DispatcherServlet。DispatcherServlet是一个前置控制器,配置在web.xml文件中,拦截匹配的请求,servlet拦截匹配规则则要自定义,把拦截下的请求按照某种规则分发到目标Controler(我们写的Action)来处理

    在MVC架构中,JSP页面就是视图,用户通过JSP页面发出请求后,Spring MVC会根据请求路径将请求发给与请求路径对应的Controller类,Controller类会调用Service类对请求进行处理,Service类会调用数据持久层Mybatis完成对实体类的存取和查询工作,并将结果返回到Controller类,Controller类会将处理结果转换为ModelAndView对象,JSP接收ModelAndView对象并进行渲染

    Controller类是在普通Java类的头部加入@Controller注解,使其变为Controller类,在Controller类中使用@RequestMapping注解标记在Controller类方法的头部,使该方法可以响应一个WEB请求,当JSP页面向这个地址发送请求时,该方法会被调用,

    Service类为业务逻辑处理类,在类的头部使用注解@Service标注,被注解@Service标注的类会被Spring框架自动注入到Controller类

    Spring MVC的执行过程如下:

    1、首先会被DispatcherServlet拦截并进一步将这些请求发送给Spring MVC

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <!-- 拦截所有的请求 -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    但是一般程序会有多个控制器,拦截之后会把请求递交给哪个控制器呢

    2、DispatcherServlethi查询一个或多个处理器映射来确定请求的下一站,处理器映射会根据请求所携带的URL信息来进行决策,我们通过配置simpleHandlerMapping来将/hello地址交给helloController

    <bean id="simpleUrlHandlerMapping"
          class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <!-- /hello 路径的请求交给 id 为 helloController 的控制器处理-->
                <prop key="/hello">helloController</prop>
            </props>
        </property>
    </bean>
    <bean id="helloController" class="controller.HelloController"></bean>
    

    3、一旦选择了合适的控制器,DispatcherServlet会将请求发送给选中的控制器,到了控制器请求会卸载下其负载(用户的请求)等待控制器处理完这些信息

    public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
        // 处理逻辑
        ....
    }
    

    4、当控制器在完成逻辑处理后,通常会产生一些信息,这些信息就是需要返回给用户并在浏览器上显示信息,他们被称为模型,仅仅是返回原始信息是不够的,这些信息需要用一种比较有好的展现方式比如html形式展示,所以信息需要发送一个视图,通常是JSP。

    控制器接下来会把模型数据打包,并且表示出用于渲染输出的视图名,接下来会将请求连同模型和视图名发送会DispatcherServlet

    public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
        // 处理逻辑
        ....
        // 返回给 DispatcherServlet
        return mav;
    }
    

    5、这样控制器就不会和特定的视图相耦合,传递给DispatcherServlet的视图名并不直接表示某个特定的JSP(实际上,他甚至不能确定视图就是JSP)相反,它仅仅传递一个逻辑名,这个名称将会用来查找产生结果的真正视图。

    DispatcherServlet将会使用视图解析器来将逻辑名称匹配为一个特定的视图,它也可能不是JSP,上面的例子就是绑定了index.jsp

    6、最后就是使徒的实现,在这里它交付模型数据,请求的任务也就完成了,试图使用模型数据渲染出结果,这个输出结果会通过响应对象传递给客户端

    <%@ page language="java" contentType="text/html; charset=UTF-8"
             pageEncoding="UTF-8" isELIgnored="false"%>
    
    <h1>${message}</h1>
    

      







    某种规则是根据你使用了哪个HandlerMaapping接口的实现类的不同而不同。

    <web-app>  
        <servlet>  
            <servlet-name>example</servlet-name>  
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
            <load-on-startup>1</load-on-startup>  
        </servlet>  
        <servlet-mapping>  
            <servlet-name>example</servlet-name>  
            <url-pattern>*.form</url-pattern>  
        </servlet-mapping>  
    </web-app>  
    

     <load-on-startup>1</load-on-startup>是启动顺序,让这个servlet随servlet容器一起启动

    <url-pattern>*.form</url-pattern>会拦截.form结尾的请求

    <servlet-name>example</servlet-name>这个servlet的名字是example,可以有多个DispatcherServlet,是通过名字来区分的,每一个DispatcherServlet有自己的WebApplicationContext上下文对象,同时保存的ServletContext中和Request对象中,在DispatcherServlet的初始化中,框架会在web应用的WEB-INF文件夹下寻找[servlet-name]-servlet.xml的配置文件,生成文件中定义的bean

    <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*:/springMVC.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>  
    

      指明了配置文件的文件名,不使用默认配置文件名,而使用springMVC.xml配置文件




    部分借鉴:https://www.iteye.com/blog/elf8848-875830

          https://www.jianshu.com/p/91a2d0a1e45a

  • 相关阅读:
    JS高程3:面向对象的程序设计——理解对象
    JS高程3:函数表达式
    JS高程3:事件
    JS高程3:表单脚本
    InnoDB:表
    InnoDB:文件
    Springboot项目配置druid数据库连接池,并监控统计功能
    linux上修改mysql登陆密码
    上传本地文件到GitHub上
    logback.xml的使用,将日志异步保存到数据库中
  • 原文地址:https://www.cnblogs.com/tao7/p/12315904.html
Copyright © 2020-2023  润新知