• SpringMVC


    1.Spring MVC的设计是围绕DispatcherServlet展开的:

    • 约定大于配置的契约式编程支持
    • 支持灵活的URL到页面控制器的映射、支持Restful风格
    • 模型数据不放在特定的API里,而是放在一个Model里(Map数据结构实现,因此很容易被其他框架使用)

    2.Spring MVC工作原理

    1、客户端发送请求

    2、客户端发送的请求到达服务器控制器

      服务器控制器由Servlet(DispatcherServlet)实现的,来完成请求的转发

    3、该控制器(DispatcherServlet)调用了一个用于映射的类HandlerMapping,

      该类用于将请求映射到对应的处理器来处理请求。

    4、HandlerMapping将请求映射到对应的处理器Controller(相当于Action)

      在Spring当中如果写一些处理器组件,一般实现Controller接口

    5、在Controller中就可以调用一些Service或DAO来进行数据操作

    6、ModelAndView用于存放从DAO中取出的数据,还可以存放响应视图的一些数据

    7、如果想将处理结果返回给用户,那么在Spring框架中还提供一个视图组件ViewResolver,

      该组件根据Controller返回的标示,找到对应的视图并传递数据信息,将响应response返回给用户

    3.开发流程 

    XML配置文件方式

    A.添加依赖包

      spring-context-4.2.8(其它spring依赖包会依赖导入)、spring-webmvc-4.2.8

    B.添加xml配置文件

    C.在web.xml中配置DispatcherServlet前端控制器组件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3     xmlns="http://java.sun.com/xml/ns/javaee"
     4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
     5     id="WebApp_ID" version="3.0">
     6     <display-name>day</display-name>
     7     <welcome-file-list>
     8         <welcome-file>index.html</welcome-file>
     9         <welcome-file>index.htm</welcome-file>
    10         <welcome-file>index.jsp</welcome-file>
    11         <welcome-file>default.html</welcome-file>
    12         <welcome-file>default.htm</welcome-file>
    13         <welcome-file>default.jsp</welcome-file>
    14     </welcome-file-list>
    15     <!-- spring的核心控制器 当tomcat容器启动的时候,会自动加载配置在web.xml的servlet,从而创建核心控制器 该核心控制器是处理所有的请求的匹配,并且调用其他的组件来处理请求 
    16         当前匹配逻辑是做后缀匹配 spring的核心控制器有一个属性是用来设置启动的时候加载哪些xml配置文件的 -->
    17     <servlet>
    18         <servlet-name>springmvc</servlet-name>
    19         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    20         <!-- 当该对象初始化的时候会调用当前的信息来给bean赋初始化值 -->
    21         <init-param>
    22             <!-- 该参数是用来指定加载spring的主配置文件的 -->
    23             <param-name>contextConfigLocation</param-name>
    24             <param-value>classpath:application.xml</param-value>
    25         </init-param>
    26     </servlet>
    27 
    28     <servlet-mapping>
    29         <servlet-name>springmvc</servlet-name>
    30         <!-- 匹配以 .do结尾的url -->
    31         <url-pattern>*.do</url-pattern>
    32     </servlet-mapping>
    33 
    34 </web-app>

    D.配置Spring HandlerMapping组件(分发web请求到Controller的映射)

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
     4     xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee"
     5     xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
     6     xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util"
     7     xmlns:jpa="http://www.springframework.org/schema/data/jpa"
     8     xsi:schemaLocation="
     9         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
    10         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
    11         http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.2.xsd
    12         http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.2.xsd
    13         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
    14         http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
    15         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
    16         http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
    17         http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">
    18 
    19     <!-- handelMapping 配置 该组件可以通过url找到对应的Controller组件 并且调用Controller对应的方法执行程序 -->
    20     <bean id="handelMapping"
    21         class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    22         <property name="mappings" ref="urlMaps"></property>
    23     </bean>
    24 
    25     <util:properties id="urlMaps">
    26         <prop key="/hello.do">helloController</prop>
    27         <!-- 可以设置其他多个的请求和对应的Controller关系 -->
    28         <prop key="/rjl.do">rjlController</prop>
    29     </util:properties>
    30     <!-- ################################### -->
    31     <!-- 设置Controller组件的配置  必须与前面对应!!!-->
    32     <bean id="helloController" class="com.rong.controller.HelloController">
    33     </bean>
    34     <bean id="rjlController" class="com.rong.controller.RjlController"></bean>
    35     <!-- 视图解析器设置
    36         该视图解析器是由spring提供
    37         prefix:前缀
    38         suffix:后缀
    39         视图解析器会根据Controller响应回来的视图字符串数据hello,再通过前面拼接前缀"/WEB-INF/view/"和后缀".jsp"
    40         生成新字符串:/WEB-INF/view/hello.jsp
    41      -->
    42     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    43         <property name="prefix" value="/WEB-INF/view/"></property>
    44         <property name="suffix" value=".jsp"></property>
    45     </bean>
    46 </beans>

    E.新建Controller类并实现spring提供的Controller接口,配置该bean

     1 package com.rong.controller;
     2 
     3 import javax.servlet.http.HttpServletRequest;
     4 import javax.servlet.http.HttpServletResponse;
     5 
     6 import org.springframework.web.servlet.ModelAndView;
     7 import org.springframework.web.servlet.mvc.Controller;
     8 
     9 public class HelloController implements Controller {
    10     /**
    11      * 该方法类似servlet里面的service方法,会自动被调用执行
    12      * ModelAndView:是模型和视图对象,里面封装了模型层数据和响应视图数据
    13      * ModelAndView("hello"):该方法可以根据"hello"设置响应视图的数据,该字符串数据会由视图解析器来处理
    14      * hello是viewName:视图的名字
    15      */
    16     @Override
    17     public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
    18         System.out.println("Hello springmvc...HelloController!");
    19         ModelAndView modelAndView = new ModelAndView("hello");
    20         return modelAndView;
    21     }
    22 }

     配置该bean到xml:id要与前面的prop的值对应

        <bean id="helloController" class="com.rong.controller.HelloController">
        </bean>
        <bean id="rjlController" class="com.rong.controller.RjlController"></bean>

    F.添加ViewResolver组件配置

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/view/"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>

    G.新建hello.jsp页面视图组件

    注解方式:

    web.xml配置

        <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:application.xml</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <url-pattern>*.action</url-pattern>
        </servlet-mapping>

    新建控制器类

     1 package com.rong.controller;
     2 
     3 import org.springframework.stereotype.Controller;
     4 import org.springframework.web.bind.annotation.RequestMapping;
     5 /**Controller
     6  * spring会将当前组件作为controller来使用
     7  * 
     8  * RequestMapping
     9  * 可以写在类或方法上面
    10  * 写在类上面的匹配字符串代表模块
    11  * 写在方法上面的匹配字符串代表具体哪个方法来执行请求
    12  * 
    13  * @author Administrator
    14  * 
    15  */
    16 
    17 @Controller
    18 @RequestMapping("/abc")
    19 public class RJLController {
    20     @RequestMapping("/rjl.action")
    21     //对应请求为  /项目名/abc/rjl.action
    22     public String toRjl(){
    23         return "rjl";
    24     }
    25 }

    spring xml配置文件

        <!-- 开启IOC注解扫描 -->
        <context:component-scan base-package="com.rong"></context:component-scan>
        <!-- 开启springmvc注解扫描 -->
        <mvc:annotation-driven></mvc:annotation-driven>
        <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>

    新建网页视图。。。

  • 相关阅读:
    RabbitMQ死信队列另类用法之复合死信
    Asp.NetCore轻松学-使用Docker进行容器化托管
    Asp.NetCore轻松学-使用Supervisor进行托管部署
    Asp.NetCore轻松学-部署到 Linux 进行托管
    Asp.NetCore轻松学-部署到 IIS 进行托管
    一个提问引发的职业规划热议-拨开迷雾,走向光明
    Asp.Net Core 轻松学-使用MariaDB/MySql/PostgreSQL和支持多个上下文对象
    Asp.Net Core 轻松学-经常使用异步的你,可能需要看看这个文章
    Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库
    Asp.Net Core 轻松学-多线程之Task(补充)
  • 原文地址:https://www.cnblogs.com/57rongjielong/p/7811424.html
Copyright © 2020-2023  润新知