SpringMVC介绍

为什么要使用springMVC?

很多应用程序的问题在于处理业务数据和显示业务数据的视图的对象之间存在紧密耦合。通常,更新业务对象的命令都是从视图本身发起的,使视图对任何业务对象更改都有高度敏感性。而且,当多个视图依赖于同一个业务对象时是没有灵活性的。

Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。

MVC设计模型

MVC 是一种著名的设计模式,特别是在 Web 应用程序领域。模式全都是关于将包含业务数据的模块与显示模块的视图解耦的。这是怎样发生的?视图(例如,JSP 页面)怎样能够与其模型(例如,包含数据的 JavaBean)解耦?记得这句格言么?一个层次的重定向几乎可以解决计算机业中的所有问题。确实,在模型和视图之间引入重定向层可以解决问题。此重定向层是控制器。控制器将接收请求,执行更新模型的操作,然后通知视图关于模型更改的消息。依赖于模型的状态并且依赖于请求的控制器可以决定要显示哪个视图。

springMVC的强大之处

1.Spring MVC 实现了即用的 MVC 的核心概念。它为控制器和处理程序提供了大量与此模式相关的功能。并且当向 MVC 添加反转控制(Inversion of Control,IoC)时,它使应用程序高度解耦,提供了通过简单的配置更改即可动态更改组件的灵活性。Spring MVC 为您提供了完全控制应用程序的各个方面的力量。

2.Spring 的 Web MVC 模块是围绕 DispatcherServlet 而设计的。DispatcherServlet 给处理程序分派请求,执行视图解析,并且处理语言环境和主题解析,此外还为上传文件提供支持。

3.DispatcherServlet 通过使用处理程序映射来决定哪一个处理程序应当处理传入的请求。处理程序映射只是用于标识使用哪一个处理程序来处理特定 URL 模式的映射。处理程序是只有一种方法 ModelAndView handleRequest(request,response) 的控制器接口的实现。Spring 还有一些可用的高级处理程序实现;其中一个重要的高级处理程序实现是 SimpleFormController,它提供了将命令对象绑定到表单、对其执行验证等功能。

4.您已经在本系列教程的先前教程中使用了

DispatcherServlet 和简单的处理程序。在下一个部分中,将使用 SimpleFormController 并说明 Spring MVC 提供的各种即用功能。

springMVC优势

1、清晰的角色划分:前端控制器(DispatcherServlet)、请求到处理器映射(HandlerMapping)、处理器适配器(HandlerAdapter)、视图解析器(ViewResolver)、处理器或页面控制器(Controller)、验证器( Validator)、命令对象(Command 请求参数绑定到的对象就叫命令对象)、表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)。

2、分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要;

3、由于命令对象就是一个POJO,无需继承框架特定API,可以使用命令对象直接作为业务对象;

4、和Spring 其他框架无缝集成,是其它Web框架所不具备的;

5、可适配,通过HandlerAdapter可以支持任意的类作为处理器;

6、可定制性,HandlerMapping、ViewResolver等能够非常简单的定制;

7、功能强大的数据验证、格式化、绑定机制; 8、利用Spring提供的Mock对象能够非常简单的进行Web层单元测试;

9、本地化、主题的解析的支持,使我们更容易进行国际化和主题的切换。

10、强大的JSP标签库,使JSP编写更容易。

………………还有比如RESTful风格的支持、简单的文件上传、约定大于配置的契约式编程支持、基于注解的零配置支持等等。

springMVC的运行原理

架构图

首先让我们了解下 MVC(Model-View-Controller)三元组的概念:

Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或 JavaBean 组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据) 和 服务层(行为)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。

领域模型

javaBean组件等价于 域模型层 + 业务逻辑层 + 持久层

View(视图):负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。

Controller(控制器):接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,

由视图负责展示。 也就是说控制器做了个调度员的工作,。

Springmvc运行原理流程 核心架构的具体流程步骤如下:

1、 首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;

2、DispatcherServlet——>HandlerMapping,HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,很容易添加新的映射策略;

3、 DispatcherServlet——>HandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;

4、 HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView对象(包含模型数据、逻辑视图名);

5、 ModelAndView的逻辑视图名——> ViewResolver, ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;

6、 View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;

7、返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。

组件说明

以下组件通常使用框架提供实现:

u DispatcherServlet:前端控制器

用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。

u HandlerMapping:处理器映射器

HandlerMapping负责根据用户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。

u Handler:处理器

Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。

由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。

u HandlAdapter:处理器适配器

通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。

u View Resolver:视图解析器

View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。

u View:视图

springmvc框架提供了很多的View视图类型的支持,包括:jstlView、freemarkerView、pdfView等。我们最常用的视图就是jsp。

一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。

注解描述:

@RequestMapping:定义请求url到处理器功能方法的映射

RequestMappingHandlerAdapter

注解式处理器适配器,对标记@ResquestMapping的方法进行适配。

从spring3.1版本开始,废除了AnnotationMethodHandlerAdapter的使用,推荐使用RequestMappingHandlerAdapter完成注解式处理器适配。

配置如下:

class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

springmvc使用自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter,可用在springmvc.xml配置文件中使用替代注解处理器和适配器的配置。

1.1 视图解析器

在springmvc.xml文件配置如下:

class="org.springframework.web.servlet.view.InternalResourceViewResolver">

name="viewClass"value="org.springframework.web.servlet.view.JstlView"

/>

value=".jsp" />

InternalResourceViewResolver:支持JSP视图解析

viewClass:JstlView表示JSP模板页面需要使用JSTL标签库,所以classpath中必须包含jstl的相关jar 包。此属性可以不设置,默认为JstlView。

合集下载

SpringMVC+Spring+Hibernate框架整合原理,作用及使用方法

SpringMVC+Spring+Hibernate框架整合原理,作用及使用方法

SpringMVC+Spring+Hibernate框架整合原理,作⽤及使⽤⽅法

SSM框架是spring MVC ,spring和mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,controller层,service层,DAO层四层

使⽤spring MVC负责请求的转发和视图管理

spring实现业务对象管理,mybatis作为数据对象的持久化引擎

原理:

SpringMVC:

1.客户端发送请求到DispacherServlet(分发器)

2.由DispacherServlet控制器查询HanderMapping,找到处理请求的Controller

3.Controller调⽤业务逻辑处理后,返回ModelAndView

4.DispacherSerclet查询视图解析器,找到ModelAndView指定的视图

5.视图负责将结果显⽰到客户端

Spring:我们平时开发接触最多的估计就是IOC容器,它可以装载bean(也就是我们中的类,当然也包括service dao⾥⾯的),有了这个机制,我们就

不⽤在每次使⽤这个类的时候为它初始化,很少看到关键字new。另外spring的aop,事务管理等等都是我们经常⽤到的。

Mybatis:mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕⼀个sqlSessionFactory实例展开的。mybatis通过配置⽂件

关联到各实体类的Mapper⽂件,Mapper⽂件中配置了每个类对数据库所需进⾏的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到

⼀个sqlSession,再执⾏sql命令。

使⽤⽅法:

要完成⼀个功能:

1. 先写实体类entity,定义对象的属性,(可以参照数据库中表的字段来设置,数据库的设计应该在所有编码开始之前)。

2. 写Mapper.xml(Mybatis),其中定义你的功能,对应要对数据库进⾏的那些操作,⽐如 insert、selectAll、selectByKey、delete、update等。

SpringMVC源码总结(一)HandlerMapping和HandlerAdapter入门

SpringMVC源码总结(一)HandlerMapping和HandlerAdapter入门

SpringMVC源码总结(⼀)HandlerMapping和HandlerAdapter⼊门

刚接触SpringMVC,对它的xml⽂件配置⼀直⽐较模模糊糊,最近花了⼀点时间稍微看了下源代码,再加上调试,开始逐渐理解它,⽹上的类似的内容有很多,写本⽂主要是⾃⼰加深⼀下理解。本⽂适合⽤过SpringMVC的开发者,⾔归正传,⾸先搭建⼀个最简单的⼯程体验⼀下。

该⼯程是基于maven的,pom配置不再说明,所使⽤的spring版本4.0.5。 ⾸先是web.xml⽂件配置,最简单的配置

Java代码

1.

2. "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

3. "/dtd/web-app_2_3.dtd" >

4.

5.

6. Archetype Created Web Application

7.

8. mvc

9. org.springframework.web.servlet.DispatcherServlet

10. 1

11.

12.

13.

14. mvc

15. /*

16.

17.

然后是mvc-servlet.xml⽂件的配置,上⾯配置DispatcherServlet会默认加载[servlet-name]-servlet.xml⽂件。对于我的配置,会去加载mvc-servlet.xml⽂件。 mvc-servlet.xml⽂件的内容: Java代码

1.

2.

3. xsi:schemaLocation="/schema/beans

4. /schema/beans/spring-beans-3.1.xsd

5. /schema/mvc

笔记-传智播客springMVC公开课

笔记-传智播客springMVC公开课

SpringMVC公开课

笔记

高浩阳

2014-11-29

目录

1 SpringMVC框架 ........................................................................................................................................... 2

1.1 SpringMVC框架 ................................................................................................................................ 2

1.2 SpringMVC组件总结 ....................................................................................................................... 2

2 开发SpringMVC的第一个程序 ................................................................................................................. 3

2.1 准备环境 ............................................................................................................................................... 3

2.2 开发SpringMVC的第一个程序 ...................................................................................................... 3

spring、springmvc、springboot的区别是什么?

spring、springmvc、springboot的区别是什么?

spring、springmvc、springboot的区别是什么?

spring和springMvc:

1. spring是⼀个⼀站式的轻量级的java开发框架,核⼼是控制反转(IOC)和⾯向切⾯(AOP),针对于开发的WEB层(springMvc)、业务层(Ioc)、持久层(jdbcTemplate)等都提供了多种配置解决⽅案;2. springMvc是spring基础之上的⼀个MVC框架,主要处理web开发的路径映射和视图渲染,属于spring框架中WEB层开发的⼀部分;

springMvc和springBoot:

1、springMvc属于⼀个企业WEB开发的MVC框架,涵盖⾯包括前端视图开发、⽂件配置、后台接⼝逻辑开发等,XML、config等配置相对⽐较繁琐复杂;2、springBoot框架相对于springMvc框架来说,更专注于开发微服务后台接⼝,不开发前端视图,同时遵循默认优于配置,简化了插件配置流程,不需要配置xml,相对springmvc,⼤⼤简化了配置流程;

总结:1、Spring 框架就像⼀个家族,有众多衍⽣产品例如 boot、security、jpa等等。但他们的基础都是Spring的ioc、aop等. ioc 提供了依赖注⼊的容器, aop解决了⾯向横切⾯编程,然后在此两者的基础上实现了其他延伸产品的⾼级功能;2、springMvc主要解决WEB开发的问题,是基于Servlet 的⼀个MVC框架,通过XML配置,统⼀开发前端视图和后端逻辑;

3、由于Spring的配置⾮常复杂,各种XML、JavaConfig、servlet处理起来⽐较繁琐,为了简化开发者的使⽤,从⽽创造性地推出了springBoot框架,默认优于配置,简化了springMvc的配置流程;但区别于springMvc的是,springBoot专注于单体微服务接⼝开发,和前端解耦,虽然springBoot也可以做成springMvc前后台⼀起开发,但是这就有点不符合springBoot框架的初衷了;

SpringMVC中的Model对象用法说明

SpringMVC中的Model对象用法说明

SpringMVC中的Model对象⽤法说明

模型对象的作⽤主要是保存数据,可以借助它们将数据带到前端。

常⽤的模型对象有以下⼏个:

ModelAndView(顾名思义,模型和视图,既可以携带数据信息,也可以携带视图信息,常规⽤法如下)

/**

* ModelAndView 绑定数据到视图 (ModelMap⽤于传递数据 View对象⽤于跳转)

* @return

* @throws Exception

*/

@RequestMapping(value="/case2")

public ModelAndView case2() throws Exception {

ModelAndView mav = new ModelAndView();

mav.setViewName("/demo03/model.jsp");

mav.addObject("sex", "boy");

return mav;

}

Map,和modelAndView原理⼀样,同样是将数据⼀个⼀个放在requestScope中,前端取数据同样也是${模型数据}

/**

* ⽬标⽅法可以添加 Map 类型(实际上也可以是 Model 类型或 ModelMap 类型)的参数.

* @param map

* @return

*/

@RequestMapping("/case")

public String case1(Map map) throws Exception{

map.put("sex", "获取成功!!");

return "/demo03/model.jsp";

}

@SessionAttributes(相当于创建session对象,往session对象⾥放数据,这⾥⽤⼀个注解完美解决)

基本格式如下:

/**

* @SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外(实际上使⽤的是 value 属性值),

Spring、mvc和springmvc区别和联系

Spring、mvc和springmvc区别和联系

Spring、mvc和springmvc区别和联系

mvc是model,view,controller的缩写,泛指业务和显⽰分离的开发模式。

spring是⼀种轻量级的java开发框架:关键概念 Ioc 和 AOP,Ioc依赖概念 反射 、bean

控制反转:以前A控制B,现在B控制A,就叫控制反转。以前是程序员决定代码结构,现在是框架决定代码结构,也就是spring决定

依赖注⼊:其实就是传参的过程,把对象传给传给⽅法作为⼊参

Ioc:可以把IoC模式看做是⼯⼚模式的升华,可以把IoC看作是⼀个⼤⼯⼚,只不过这个⼤⼯⼚⾥要⽣成的对象都是在XML⽂件中给出

定义的,然后利⽤Java 的“反射”编程,根据XML中给出的类名⽣成相应的对象。从实现来看,IoC是把以前在⼯⼚⽅法⾥写死的对象⽣成代

码,改变为由XML⽂件来定义,也就是把⼯⼚和对象⽣成这两者独⽴分隔开来,⽬的就是提⾼灵活性和可维护性。

IoC是⼀个很⼤的概念,可以⽤不同的⽅式实现。其主要形式有两种:

1. 依赖查找:容器提供回调接⼝和上下⽂条件给组件。EJB和Apache Avalon 都使⽤这种⽅式。这样⼀来,组件就必须使⽤容器提供的

API来查找资源和协作对象,仅有的控制反转只体现在那些回调⽅法上(也就是上⾯所说的 类型1):容器将调⽤这些回调⽅法,从⽽

让应⽤代码获得相关资源。2. 依赖注⼊:组件不做定位查询,只提供普通的Java⽅法让容器去决定依赖关系。容器全权负责的组件的装配,它会把符合依赖关系的

对象通过JavaBean属性或者传递给需要的对象。通过JavaBean属性注射依赖关系的做法称为设值⽅法注⼊(Setter Injection);将依赖

关系作为构造函数参数传⼊的做法称为注⼊(Constructor Injection)

AOP:使⽤"横切"技术,AOP把软件系统分为两个部分:核⼼关注点和横切关注点。业务处理的主要流程是核⼼关注点,与之关系不⼤

SpringMVC拦截器interceptor用法详解

SpringMVC拦截器interceptor⽤法详解

Spring MVC-拦截器

今天就是把有关拦截器的知识做⼀个总结。

1.拦截器概述

1.1 什么是拦截器?

Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要⽤于拦截⽤户请求并作相应的处理。例如

通过拦截器可以进⾏权限验证、记录请求信息的⽇志、判断⽤户是否登录等。

要使⽤Spring MVC中的拦截器,就需要对拦截器类进⾏定义和配置。通常拦截器类可以通过两种⽅式来定义。

1.通过实现HandlerInterceptor接⼝,或继承HandlerInterceptor接⼝的实现类(如HandlerInterceptorAdapter)来定义。

2.通过实现WebRequestInterceptor接⼝,或继承WebRequestInterceptor接⼝的实现类来定义。

以实现HandlerInterceptor接⼝⽅式为例,⾃定义拦截器类的代码如下:

package com.mmm.interceptors;

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

* 创建⾃定义的拦截器

01.务必实现 HandlerInterceptor!

02.我们使⽤的拦截器其实就是针对于Handler的拦截器===》处理器拦截器

03.核⼼控制器中的HandleMapping返回的就是⼀个

处理器执⾏链 = Handler+ Interceptors(处理器拦截器)*/

public class MyInterceptor implements HandlerInterceptor{

SpringMVC框架知识点详解

SpringMVC框架知识点详解

官⽅的下载⽹址是:

⼀、Spring MVC简介

1.1Spring MVC⼯作流程

映射器:主要是根据浏览器上输⼊的url来映射所有满⾜要求的Handle(控制器类)

适配器:主要是决定调⽤哪个Handler来实现具体的业务逻辑

1.2Spring MVC VS Struts2

1)springmvc的⼊⼝是⼀个servlet,即前端控制器;

struts2⼊⼝是⼀个filter过虑器,即前端过滤器,

2)springmvc是基于⽅法开发(控制器类是单例的,不可能维护实体变量),传递参数是通过⽅法形参,可以设计为单例;

struts2是基于类开发(维护⼀个实体变量),传递参数是通过类的属性,只能设计为多例

3)springmvc通过参数解析器是将request对象内容进⾏解析成⽅法形参,将响应数据和页⾯封装成ModelAndView对象,最后⼜将模型数据

通过request对象传输到页⾯;

struts采⽤值栈存储请求和响应的数据,通过OGNL存取数据

4)springmvc开发运⾏速度快于struts2

⼆、Spring MVC⼯程搭建(xml)

2.1导⼊springioc,springweb , springmvc相关的jar包

2.2在/WEB-INF/ web.xml⽂件配置SpringMVC的前端控制器DispatcherServlet(前端控

制器)

DispatcherServlet

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:springmvc.xml

DispatcherServlet

*.action//拦截请求

注:在默认情况下:springmvc框架的配置⽂件必须叫-servlet.xml

且必须放在/WEB-INF/⽬录下,我们可以在web.xml⽂件中,为DispatcherServlet配置⼀个初始化参数,

Java项目教学第一学期-SSM框架讲义3-SpringMVC入门

Spring+SpringMVC+MyBatis讲义4——SpringMVC的核心类和注解

4 SpringMVC的核心类和注解

3.1 非注解的处理器映射器和适配器

SpringMVC是Spring框架的一个模块,springMVC和spring无需通过中间整合层进行整合。

SpringMVC是一个基于MVC的框架。

MVC是一个设计模式,MVC在B/S系统下的应用

MVC的工作原理:

SpringMVC的工作原理:

第一步: 用户发送请求至前端控制器DispatcherServlet。 前端控制器

(DispatcherServlet)

接受用户请求、响应、转发 处理器映射器

(HandlerMapping)

根据配置或注解找到最终要执行的Handler

处理器适配器

(HandlerAdapter) 处理器(Handler)

平常叫Controller 视图解析器

(ViewResolver) 视图

(View)

1.请求url 2.请求HandlerMapping获取Handler

3.返回一个执行链

HandlerExecutionChain{

HandlerInterceptor1

HandlerInterceptor2

Handler

} 4.请求

HandlerApapter执行Handler

5.执行Handler

6.执行完,返回ModelAndView 7. 返回

ModelAndView 8. 请求进行视图解析

ModelAndView 9.返回View 10. 视图渲染

将Model数据转化为response

11.响应结果 Spring+SpringMVC+MyBatis讲义4——SpringMVC的核心类和注解

第二步:DispatcherServlet收到请求调用HandlerMapping处理器映射器。

第三步:处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

SpringMVC--@RequestMapping注解以及SpringMVC获取请求参数

SpringMVC--@RequestMapping注解以及SpringMVC获取请求参数

三、@RequestMapping注解1、@RequestMapping注解的功能

@RequestMapping注解的作⽤就是将请求和处理请求的控制器⽅法关联 起来,建⽴映射关系。

SpringMVC 接收到指定的请求,就会来找到在映射关系中对应的控制器⽅法来处理这个请求。

注意:在使⽤@RequestMapping注解的时候,要保证在所有的控制器中所能匹配到的请求地址是唯⼀的;2、@RequestMapping注解的位置

@RequestMapping标识⼀个类:设置映射请求的请求路径的初始信息

@RequestMapping标识⼀个⽅法:设置映射请求请求路径的具体信息

注意:如果类和⽅法上都有路径信息,那么要先访问初始信息在访问具体信息,HTML路径要两个都写(⼀般⽤于不同模块同名请求路径的处理)

3、@RequestMapping注解的value属性

@RequestMapping注解的value属性通过请求的请求地址匹配请求映射

@RequestMapping注解的value属性是⼀个字符串类型的数组,表⽰该请求映射能够匹配多个请求地址 所对应的请求

@RequestMapping注解的value属性必须设置,⾄少通过请求地址匹配请求映射

4、@RequestMapping注解的method属性

@RequestMapping注解的method属性通过请求的请求⽅式(get或post)匹配请求映射

@RequestMapping注解的method属性是⼀个RequestMethod类型的数组,表⽰该请求映射能够匹配 多种请求⽅式的请求 若当前请求的请求地址满⾜请求映射的value属性,但是请求⽅式不满⾜method属性,则浏览器报错 405:Request method 'POST' not supported,设置多个参数不必同时满⾜!

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档