zoukankan      html  css  js  c++  java
  • 这份SpringMVC执行原理笔记,建议做java开发的好好看看,总结的很详细!

    什么是SpringMVC?

    Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供的web模块,包含了开发Web 应用程序的全功能 MVC 模块。从而在使用Spring进行Web开发时,可以选择使用Spring的SpringMVC框架。集成其他WEB MVC开发框架,如Struts、Struts2等。SpringMVC是Web层的MVC开发框架,属于Spring框架的Web模块中的一个部分。

    基于SpringMVC案例

    创建webapp项目、完善项目结构、导入依赖

    <!-- 配置开发SpringMVC所以来的jar包 -->
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.1.5.RELEASE</version>
    </dependency>
    <!-- 配置ServletAPI依赖 -->
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.0.1</version>
      <scope>provided</scope>
    </dependency>
    <!--配置JSP依赖包-->
    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.2.1</version>
      <scope>provided</scope>
    </dependency>
    
    

    在web.xml文件中配置中央处理器(DispatcherServlet)

     <servlet>
            <servlet-name>dispatcherServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     </servlet>
        <servlet-mapping>
            <servlet-name>dispatcherServlet</servlet-name>
            <!-- 注意:/后面没有* -->
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    
    

    创建自定义控制器类

    package qing;
    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 StudentController implements Controller {
        @Override
        public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
            ModelAndView mav = new ModelAndView();
            mav.addObject("info", "hello,小李同学");
            mav.setViewName("test.jsp");
            return mav;
        }
    }
    
    

    在resources文件中编写SpringMVC.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">
        <!-- 配置URL解析器 -->
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
        <!-- 配置控制适配器 -->
        <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
        <!-- 配置自定义控制器 -->
        <!-- name:自定义控制器访问路径  class:包名+类名 -->
        <bean name="/stu" class="qing.StudentController"></bean>
        <!-- 配置视图解析器 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/"></property>
            <property name="suffix" value=""></property>
        </bean>
    </beans>
    
    

    在web.xml配置文件中加载SpringMVC.xml文件

    <servlet>
            <servlet-name>dispatcherServlet</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>
        </servlet>
        <servlet-mapping>
            <servlet-name>dispatcherServlet</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    
    

    创建test.jsp文件

    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
    <html>
    <head>
        <title>欢迎使用SpringMVC</title>
    </head>
    <body>
    	<h1>${info}</h1>
    </body>
    </html>
    
    

    部署本地服务器测试

    http://localhost:8080/stu

    SprigMVC的执行流程

    • 启动服务器在web.xml文件中配置中央处理器(DispatcherServlet),初始化完成后加载SpringMVC配置文件。
    • 客户端浏览器发送http请求。
    • http请求被中央处理器(DispatcherServlet)拦截,交给URL解析器解析。
    • URL解析器将http请求解析,得到具体请求路径。
    • URL解析器将解析得到的具体请求路径返回给中央处理器(DispatherServlet)。
    • 中央处理器(DispatherServlet)将得到的具体请求路径转交给控制适配器。
    • 控制适配器根据具体路径在SpringMVC配置文件中查找对应请求处理类。
    • 请求处理类执行具体请求处理,得到ModelAndView对象,将ModelAndView对象交给控制适配器,控制适配器将ModelAndView对象返回给中央处理器(DispatherServlet)。
    • 中央处理器将ModelAndView对象转交给视图解析器去解析。
    • 视图解析器解析ModelAndView对象,得到一个具体数据显示路径,将这个具体显示路径返回给中央处理器(DispatherServlet)。
    • 中央处理器(DispatherServlet)得到具体数据显示路径,将路径代表的资源转换执行成一个html数据。
    • 将转换执行后的html数据返回给客户端。

    SpringMVC请求的访问路径配置

    web.xml文件中DispatcherServlet配置的

    (1) /
    与之对应的spring配置文件的控制器bean元素的name属性值“/stu”
    对应: http://localhost:8080/stu
    (2) .do
    与之对应的spring配置文件的控制器bean元素的name属性值“stu.do”
    对应: http://localhost:8080/stu.do
    注意:/ 这是一个错误的方式

    SpringMVC配置文件中的控制器的name属性值

    控制器的name属性值设置要与web.xml文件中DispatcherServlet配置的的配置形式一致
    (1) web.xml文件中DispatcherServlet配置的/那么SpringMVC配置文件中的控制器的name属性值应该为“/stu”
    对应: http://localhost:8080/stu
    (2) web.xml文件中DispatcherServlet配置的*.do那么springmvc配置文件中的控制器的name属性值应该为“/stu.do”
    对应: http://localhost:8080/stu.do

    请求处理的控制器类中请求处理方法handleRequest的返回值ModelAndView

    (1) 创建一个普通的java类,实现import org.springframework.web.servlet.mvc.Controller接口
    (2) 重写handleRequest方法 (处理用请求的方法)
    (3) 在SpringMVC的配置文件中配置

    <bean name="/stu" class="qing.StudentController"></bean>
    
    

    例如:

    package qing;
    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 StudentController implements Controller {
        @Override
        public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
            ModelAndView mav = new ModelAndView();
            mav.addObject("info", "hello,小李同学");
            mav.setViewName("test.jsp");
            return mav;
        }
    }
    
    

    请求处理方法handleRequest的返回值ModelAndView
    ModelAndView—java类
    组成ModelAndView类的第一部分是一个Model (模型) 封装数据、第二部分是一个View (视图) 展示数据的页面元素
    ModelAndView类是用来封装数据,展示数据的页面元素。
    构造方法ModelAndView()来创建ModelAndView类的对象 : ModelAndView mav=new ModelAndView();
    封装数据的方法addObject(attributeName, attributeValue)相当于setAttribute(key,value) :mav.addObject(“info”, “hello,小李同学”);
    设置展示数据的页面元素的名称setViewName(viewName)
    mav.setViewName(“test.jsp”);
    mav.setViewName(“test”);
    mav.setViewName(“test.html”);
    mav.setViewName(“控制器对应的请求处理路径”);
    mav.setViewName(“test”);—forword跳转[转发]
    mav.setViewName(“forward:test.jsp”);
    mav.setViewName(“redirect:test.jsp”);----sendRedirect跳转[重定向]

    视图解析器

    例如:

     <!-- 配置视图解析器 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!-- 前缀工程访问路径 -->
            <property name="prefix" value="/"></property>
            <!-- 后缀工程访问路径 -->
            <property name="suffix" value=""></property>
        </bean>
    
    

    利用请求处理类中的得到的视图名,通过视图解析器的前缀和后缀合并得到一个完整的的访问路径。
    prefix+视图名称+suffix = 完整的元素访问路径
    例如:ModelAndView mav=new ModelAndView();
    mav.setViewName(“test.jsp”);

    <!-- 配置视图解析器 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!-- 前缀工程访问路径 -->
            <property name="prefix" value="/"></property>
            <!-- 后缀工程访问路径 -->
            <property name="suffix" value=""></property>
        </bean>
    
    

    经过视图解析器解析以后的完整路径:http://localhost:8080/test.jsp
    例如:ModelAndView mav=new ModelAndView();
    mav.setViewName(“test”);

    <!-- 配置视图解析器 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!-- 前缀工程访问路径 -->
            <property name="prefix" value="/"></property>
            <!-- 后缀工程访问路径 -->
            <property name="suffix" value=""></property>
        </bean>
    
    

    经过视图解析器解析以后的完整路径:http://localhost:8080/test.html

    DispatcherServlet中央处理器设置加载SpringMVC配置文件的设置

    当SpringMVC配置文件在resources目录下时

    web.xml配置文件:

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

    当SpringMVC配置文件在resources子文件目录下时

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

    当springMVC配置文件在WEB-INF目录下时

    中央控制器对应的servlet-name元素的值-servlet.xml, 在web.xml文件中servlet配置元素中不需要出现配置元素。

    最后

    欢迎关注公众号:前程有光,领取一线大厂Java面试题总结+各知识点学习思维导+一份300页pdf文档的Java核心知识点总结!

  • 相关阅读:
    jQuery 基本选择器
    JavaScriptif while for switch流程控制 JS函数 内置对象
    JavaScrip基本语法
    数据库 存储引擎 表的操作 数值类型 时间类型 字符串类型 枚举集合 约束
    数据库基础知识 管理员 用户登录授权的操作
    粘包的产生原理 以及如何解决粘包问题
    socket TCP DPT 网络编程
    2018年年终总结
    Android技术分享
    No accelerator found
  • 原文地址:https://www.cnblogs.com/lwh1019/p/14047867.html
Copyright © 2011-2022 走看看