zoukankan      html  css  js  c++  java
  • SpringMVC总结一:快速入门

    MVC:

      MVC是一种架构模型,本身没有什么功能,只是让我们的项目结构更加合理,流程控制更加清晰,一般包含三个组件:

      **Model(模型)**:数据模型,用于提供要展示的数据。一般包含数据和行为(也就是业务),在JavaWEB中,数据和业务往往是分离开的。

      **View(视图)**:负责对模型数据进行展示,例如我们看到的网页。概念比较广泛,可以是:html、JSP、excel、Word、PDF、json、XML等

    ​   **Controller(控制器)**:接收用户请求,委托给模型做处理,处理完毕返回数据,再交给视图做渲染,相当于调度员工作

     

    SpringMVC:

      Spring Web MVC是一种基于Java的,实现了Web MVC设计模式的轻量级Web框架,使用了MVC架构模式的思想,将web层进行职责解耦,采用了松散耦合可插拔组件结构,比其它MVC框架更具扩展性和灵活性。

    可以让我们实现:

    • 进行更简洁的Web层的开发;

    • 天生与Spring框架集成(如IoC容器、AOP等);

    • 提供强大的约定大于配置的契约式编程支持;

    • 支持灵活的URL到页面控制器的映射;

    • 非常容易与其他视图技术集成,如Velocity、FreeMarker等等,因为模型数据不放在特定的API里,而是放在一个Model里(Map数据结构实现,因此很容易被其他框架使用);

    • 非常灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API;

    • 支持Restful风格。

    SrpingMVC架构了解一下:

    DispatcherServlet  前置控制器
    HandlerMapping  处理器映射器
    HandlerAdapter  处理器适配器
    Controller接口  控制器
    ViewResolver  视图解析器

    流程总结:

    流程总结:
    1. 用户发起请求到DispatcherServlet(前端控制器)
    2. DispatcherServlet通过HandlerMapping(处理映射器)寻找用户要请求的Handler
    3. HandlerMapping返回执行链,包含两部分内容:
       a) 处理器对象:Handler
       b) HandlerInterceptor(拦截器)的集合
    4. 前端控制器通过HandlerAdapter(处理器适配器)对Handler进行适配包装
    5. 调用包装后的Handler中的方法,处理业务
    6. 处理业务完成,返回ModelAndView对象,包含两部分
       a) Model:模型数据
       b) View:视图名称,不是真正的视图
    7. DispatcherServlet获取处理得到的ModelAndView对象
    8. DispatcherServlet将视图名称交给ViewResolver(视图解析器),查找视图
    9. ViewResolver返回真正的视图对象给DispatcherServlet
    10. DispatcherServlet把Model(数据模型)交给视图对象进行渲染
    11. 返回渲染后的视图
    12. 将最终的视图返回用户,产生响应
    View Code

    快速入门案例:

    首先创建一个java web项目,引入需要的包:

    <dependencies>
        <!--spring mvc-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
        </dependency>
        <!--日志-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </dependency>
        <!-- JSP相关 -->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jsp-api</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    View Code

    配置tomcat:

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <path>/</path>
                    <port>8080</port>
                </configuration>
            </plugin>
        </plugins>
    </build>
    View Code

    编写我们的controller(实现Controller接口)和jsp页面:

    package com.zy.controller;
    
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.util.Date;
    
    public class MyTestController implements Controller {
        @Override
        public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
            ModelAndView mv = new ModelAndView();
            mv.setViewName("hello");//设置对应视图的名字
            mv.addObject("msg", "hello springmvc ===" + new Date().toLocaleString());
            return mv;
        }
    }
    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <h1>${msg}</h1>
    </body>
    </html>

    1,想使用springmvc必须先配置web.xml中的DispatcherServlet:

    <?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_3_1.xsd"
             version="3.1">
        <servlet>
            <servlet-name>myspringmvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!--tomcat启动时就创建-->
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>myspringmvc</servlet-name>
            <!--
                /*     匹配所有请求路径,不要用
                /     匹配除了.jsp以为的所有请求
                *.xxx:    匹配以xxx为后缀的路径
             -->
            <url-pattern>*.do</url-pattern>
        </servlet-mapping>
    </web-app>

    2,创建并配置SpringMVC配置文件:

    SpringMVC有自己的配置文件,其实就是类似于Spring的applicationContext.xml的一个配置文件,配置SpringMVC需要使用到的bean,例如HandlerMapping,HandlerAdapter等

    这个文件默认是去寻找:WEB-INF/{servletName}-servlet.xml(下面图片可以说明):

    刚才在DispatcherServlet中配置的ServletName是 myspringmvc,所以默认是去找WEB-INF/myspringmvc-servlet.xml:

    创建好这个文件后,我们需要配置一下其中的HandlerMapping,HandlerAdapter,Handler,viewResolver:

    <?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">
        <!--1 配置HandlerMapping 可省略不写-->
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    
        <!--2 配置HandlerAdapter 可省略不写-->
        <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    
        <!--3 配置业务处理器 handler(我们自己写的controller)-->
        <bean name="/hello.do" class="com.zy.controller.HelloController"/>
    
        <!--4
            配置 viewResolver 视图解析器: 定位视图的准确位置,
            问题: 根据视图名称,找到 视图对应的位置
             * 例子: prefix="/WEB-INF/jsp/", suffix=".jsp", viewname="hello" -> "/WEB-INF/jsp/hello.jsp"
        -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!--指定前缀-->
            <property name="prefix" value="/WEB-INF/views/"/>
            <!--指定后缀-->
            <property name="suffix" value=".jsp"/>
        </bean>
    </beans>

    运行tomcat即可。

    注解版案例:

    入门案例中,我们自定义控制器类的方式并不好,存在以下问题:

    1) 类必须实现Controller接口,不友好。

    2) 每个类中只能有一个默认处理方法,只能处理一个用户请求。

    3) 每个类需要在配置文件中进行配置,很麻烦。

     为了解决上面这些问题,我们使用注解版来改造一下:

    1,首先我们的控制器controller:

    //加上Controller注解
    @Controller
    public class HelloController {
        //映射注解
        @RequestMapping("/helloSpringMVC")
        public ModelAndView helloSpringMVC(){
            ModelAndView mv = new ModelAndView();
            mv.setViewName("hello");//设置视图名字
            mv.addObject("msg", "hello springmvc 注解版 ===" + new Date().toLocaleString());
            return mv;
        }
    }

    2,然后我们的myspringmvc-servlet.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:mvc="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/context
           http://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/mvc
           http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
        <!--下面配置HandlerMapping和HandlerAdapter的两步是可以不写的-->
        <!--但是不写的情况下 默认的注解版的是过时的,所以可以写成下面这种推荐版的,也可以写最终这两步结合的简化版-->
    
        <!--1 因为 默认注解的handlermaping过时了,所以使用推荐版-->
        <!--<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>-->
        <!--2 因为 默认注解的HandlerAdapter过时了,所以使用推荐版-->
        <!--<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>-->
    
        <!--上面注释的两步的结合简化版-->
        <mvc:annotation-driven></mvc:annotation-driven>
    
        <!--由于是注解版的 所以开启扫描包扫描controller-->
        <context:component-scan base-package="com.zy.controller"></context:component-scan>
    
        <!--视图解析器-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!--前缀-->
            <property name="prefix" value="/WEB-INF/views/"></property>
            <!--后缀-->
            <property name="suffix" value=".jsp"></property>
        </bean>
    </beans>

    运行tomcat访问 http://localhost:8080/helloSpringMVC.do 即可。

  • 相关阅读:
    php 获取上上个月数据 使用 strtotime('-1 months')的一个bug
    mysql ON DUPLICATE KEY UPDATE 用法
    在WAMPSERVER下增加多版本的PHP(PHP5.3,PHP5.4,PHP5.5 ,PHP5.6)支持。
    Window7 环境下 MariaDB 的安装 及使用
    memcache和memcached之间的区别和联系
    基于bootstrap + php +ajax datatable 插件的使用
    daterangepicker+ bootstrap +php +ajax +datatable双日历的使用
    基于bootstrap 的datatable插件的使用2(php版)
    CI 框架导出文件
    MYSQL中replace into的用法
  • 原文地址:https://www.cnblogs.com/blazeZzz/p/9324073.html
Copyright © 2011-2022 走看看