计算机
类型
可以朗读
语音朗读
842千字
字数
2019-12-01
发行日期
展开全部
主编推荐语
《Spring实战(第4版)》:全面介绍Spring 5,涵盖反应式应用开发。
内容简介
本书从介绍Spring框架入手,介绍了Beans的配置、依赖注入、定制Bean、基于Java的容器、AOP、Spring Data、Spring MVC等知识。最新的第4版反映了Spring 5的变化,并新增了关于功能和开发反应式应用程序的内容,其中反应式应用程序开发章节涵盖反应流规范、RxJava 2、反应器、Spring WebFlux和反应支持等内容。
目录
- 版权信息
- 版权
- 版权声明
- 内容提要
- 前言
- 资源与支持
- 第1章 Spring框架概述
- 1.1 简介
- 1.2 Spring框架的模块
- 1.3 Spring IoC容器
- 1.4 使用Spring框架的好处
- 1.4.1 管理本地和全局事务的一致方法
- 1.4.2 声明式事务管理
- 1.4.3 安全
- 1.4.4 Java管理扩展
- 1.4.5 Java消息服务
- 1.4.6 缓存
- 1.5 一个简单的Spring应用程序
- 1.5.1 确定应用程序对象及其依赖关系
- 1.5.2 根据确定的应用程序对象创建POJO类
- 1.5.3 创建配置元数据
- 1.5.4 通过setter方法注入依赖项
- 1.5.5 创建Spring容器的一个实例
- 1.5.6 从Spring容器访问bean
- 1.6 Spring框架5的新功能
- 1.7 建立在Spring之上的框架
- 1.8 小结
- 第2章 Spring框架基础
- 2.1 简介
- 2.2 面向接口编程的设计方法
- 提高依赖类的可测试性
- Spring对“面向接口编程”设计方法的支持
- 使用“面向接口编程”设计方法的MyBank应用程序
- 2.3 使用静态和实例工厂方法创建Spring bean
- 2.3.1 通过静态工厂方法实例化bean
- 2.3.2 通过实例工厂方法实例化bean
- 注入由工厂方法创建的bean的依赖项
- 2.4 基于构造函数的DI
- 2.4.1 回顾基于setter的DI
- 2.4.2 基于构造函数的DI
- 基于构造函数和基于setter的DI机制的结合使用
- 2.5 将配置详细信息传递给bean
- 2.6 bean的作用域
- 2.6.1 singleton
- 1.singleton范围的bean和多个Spring容器
- 2.延迟初始化一个singleton范围的bean
- 2.6.2 prototype
- 2.6.3 为你的bean选择适当的范围
- 2.7 小结
- 第3章 bean的配置
- 3.1 简介
- 3.2 bean定义的继承
- 3.2.1 MyBank——bean定义继承示例
- 3.2.2 继承了什么
- bean定义继承示例——父bean定义非抽象
- bean定义继承示例——继承工厂方法配置
- 3.3 构造函数参数匹配
- 3.3.1 使用<constructor-arg>元素传递简单的值和bean引用
- 3.3.2 基于类型的构造方法参数匹配
- 1.构造函数参数表示不同的Spring bean
- 2.构造函数参数表示相关的Spring bean
- 3.构造函数参数表示标准Java类型和自定义类型
- 3.3.3 基于名称的构造函数参数匹配
- 1.@ConstructorProperties注解和bean定义继承
- 2.@ConstructorProperties注解和工厂方法
- 3.在Eclipse IDE中启用(或禁用)调试或“参数名称发现”标志
- 3.4 配置不同类型的bean属性和构造函数参数
- 3.4.1 Spring的内置属性编辑器
- 3.4.2 指定不同集合类型的值
- 1.将List、Map、Set和Properties类型的元素添加到集合类型
- 2.将bean引用添加到集合类型
- 3.将bean名称添加到集合类型
- 4.将null值添加到集合类型
- 3.4.3 指定数组的值
- 3.4.4 与<list>、<set>和<map>元素相对应的默认实现
- 3.5 内置属性编辑器
- 3.5.1 CustomCollectionEditor
- 3.5.2 CustomMapEditor
- 3.5.3 CustomDateEditor
- 3.6 向Spring容器注册属性编辑器
- 3.6.1 创建一个PropertyEditorRegistrar实现
- 3.6.2 配置CustomEditorConfigurer类
- 3.7 具有p和c命名空间的简明bean定义
- 3.7.1 p命名空间
- 3.7.2 c命名空间
- 3.8 Spring的util模式
- 3.8.1 <list>元素
- 3.8.2 <map>元素
- 3.8.3 <set>元素
- 3.8.4 <properties>元素
- 3.8.5 <constant>元素
- 3.8.6 <property-path>元素
- 3.9 FactoryBean接口
- 3.9.1 MyBank application——将事件存储在数据库中
- 3.9.2 MyBank——FactoryBean 示例
- 3.9.3 访问FactoryBean实例
- 3.10 模块化bean配置
- 3.11 小结
- 第4章 依赖注入
- 4.1 简介
- 4.2 内部bean
- 4.3 使用depends-on特性控制bean的初始化顺序
- 4.3.1 MyBank——bean之间隐式的依赖关系
- 4.3.2 隐性依赖问题
- 1.EventSenderSelectorServiceImpl——写入者
- 2.appConfig.properties
- 3.FixedDepositServiceImpl——读取者
- 4.如何解决隐含依赖问题
- 5.多个隐式依赖项
- 6.depends-on特性和bean定义继承
- 4.4 singleton和prototype范围的bean的依赖项
- 4.4.1 singleton bean的依赖项
- 4.4.2 Prototype bean的依赖项
- 4.5 通过singleton bean中获取prototype bean的新实例
- 4.5.1 ApplicationContextAware 接口
- 4.5.2 <lookup-method> 元素
- 4.5.3 <replaced-method> 元素
- 唯一地标识bean方法
- 4.6 自动装配依赖项
- 4.6.1 byType
- 4.6.2 constructor
- 4.6.3 byName
- 4.6.4 default / no
- 4.6.5 使bean无法用于自动装配
- 4.6.6 自动装配的局限性
- 4.7 小结
- 第5章 自定义bean和bean定义
- 5.1 简介
- 5.2 自定义bean的初始化和销毁逻辑
- 5.2.1 使Spring调用由destroy-method特性指定的cleanup方法
- 5.2.2 清理方法和prototype bean
- 5.2.3 为所有bean指定默认的bean初始化和销毁方法
- 5.2.4 InitializingBean 和DisposableBean 生命周期接口
- 5.2.5 JSR 250’s @PostConstruct 和@PreDestroy 注解
- 5.3 使用BeanPostProcessor与新创建的bean实例进行交互
- 5.3.1 BeanPostProcessor示例——验证bean实例
- 5.3.2 BeanPostProcessor示例——解析bean依赖项
- 5.3.3 FactoryBeans的BeanPostProcessor行为
- 5.3.4 RequiredAnnotationBeanPostProcessor
- 5.3.5 DestructionAwareBeanPostProcessor
- 5.4 使用BeanFactoryPostProcessor修改bean定义
- 5.4.1 BeanFactoryPostProcessor示例
- 5.4.2 PropertySourcesPlaceholderConfigurer
- 1.localOverride属性
- 2.<property-placeholder> 元素
- 5.4.3 PropertyOverrideConfigurer
- PropertyOverrideConfigurer示例
- 5.5 小结
- 第6章 使用Spring进行注解驱动开发
- 6.1 简介
- 6.2 用@Component标识Spring bean
- 6.3 @Autowired 通过类型自动装配依赖项
- 6.4 @Qualifier 按名称自动装配依赖项
- 6.4.1 使用qualifiers自动装配bean
- 6.4.2 创建自定义限定符注解
- 6.5 JSR 330的@Inject和@Named 注解
- Java 8的Optional类型
- 6.6 JSR 250的 @Resource注解
- 6.7 @Scope、@Lazy、@DependsOn和@Primary注解
- 6.7.1 @Scope
- 6.7.2 @Lazy
- 延迟自动装配依赖项
- 6.7.3 @DependsOn
- 6.7.4 @Primary
- 6.8 使用@Value简化注解的bean类的配置
- 6.8.1 在@Value注解中使用Spring表达式语言(SpEL)
- 6.8.2 在方法级和方法参数级使用@Value注解
- 6.8.3 在SpEL中使用数学、关系和逻辑运算符
- 6.8.4 使用SpEL获取bean的引用
- 6.8.5 在SpEL中使用正则表达式
- 6.8.6 在SpEL中使用映射和列表
- 6.8.7 在基于XML的bean定义中指定SpEL表达式
- 6.9 使用Spring的Validator接口验证对象
- 6.10 使用JSR 380(Bean Validation 2.0)注解指定约束
- 6.10.1 Spring中的JSR 380支持
- 验证方法
- 6.10.2 JSR 380有什么新功能
- 6.11 bean定义配置文件
- bean定义配置文件示例
- 1.开发和生产环境中的不同数据库
- 2.支持Hibernate和MyBatis
- 3.设置活跃配置文件
- 6.12 小结
- 第7章 基于Java的容器配置
- 7.1 简介
- 7.2 使用@Configuration和@Bean注解配置bean
- 在@Component和JSR 330的@Named类中定义@Bean方法
- 使用@ComponentScan搜索和注册bean
- 使用组件索引代替类路径扫描
- 7.3 注入bean依赖项
- 7.4 配置Spring容器
- 7.5 生命周期回调
- 7.6 导入基于Java的配置
- 解决依赖关系
- 7.7 附加主题
- 7.7.1 覆盖@Bean方法
- 7.7.2 配置BeanPostProcessors和BeanFactoryPostProcessors
- 7.7.3 导入应用程序上下文XML文件
- 7.7.4 有条件地包含@Bean和 @Configuration类
- 1.开发和生产环境中的不同数据库
- 2.对Hibernate和MyBatis的支持
- 7.8 小结
- 第8章 使用Spring进行数据库交互
- 8.1 简介
- 8.2 MyBank应用程序的需求
- 8.3 使用Spring JDBC模块开发MyBank应用程序
- 8.3.1 配置数据源
- 在Java EE环境中配置数据源
- 8.3.2 创建使用Spring的JDBC模块类的DAO
- 1.JdbcTemplate
- 2.NamedParameterJdbcTemplate
- 3.SimpleJdbcInsert
- 4.BankApp类
- 8.4 使用Hibernate开发MyBank应用程序
- 8.4.1 配置SessionFactory 实例
- 8.4.2 创建使用Hibernate API进行数据库交互的DAO
- 8.5 使用Spring的事务管理
- 8.5.1 MyBank的事务管理需求
- 8.5.2 编程式事务管理
- 8.5.3 声明式事务管理
- 8.5.4 Spring对JTA的支持
- 使用<jta-transaction-manager>元素配置JTA事务管理器
- 8.6 使用基于Java的配置开发MyBank应用程序
- 8.6.1 配置javax.sql.DataSource
- 8.6.2 配置Hibernate的SessionFactory
- 8.6.3 启用@Transactional支持
- 8.7 小结
- 第9章 Spring Data
- 9.1 简介
- 9.2 核心概念和接口
- 9.3 Spring Data JPA
- 9.3.1 代替存储库方法的自定义实现
- 9.3.2 将自定义方法添加到存储库
- 9.3.3 配置Spring Data JPA——基于Java的配置方法
- 9.3.4 配置Spring Data JPA——基于XML的配置方法
- 1.启用Spring Data JPA
- 2.配置LocalContainerEntityManagerFactoryBean
- 3.配置PlatformTransactionManager
- 9.3.5 查询方法
- 1.限制结果数量
- 2.排序结果
- 3.基于多个特性的查询
- 4.为查询添加分页
- 5.为查询添加排序
- 6.对大型结果集进行分页
- 7.流式查询结果
- 8.异步执行查询方法
- 9.使用@Query注解显式指定查询
- 9.4 使用Querydsl创建查询
- 9.4.1 将Spring Data与Querydsl集成
- 9.4.2 构造Predicate
- 9.5 按示例查询
- 9.6 Spring Data MongoDB
- 9.6.1 建模域实体
- 9.6.2 配置Spring Data MongoDB——基于Java的配置
- 9.6.3 配置Spring Data MongoDB——基于XML的配置
- 9.6.4 创建自定义存储库
- 9.6.5 将自定义方法添加到存储库
- 9.6.6 使用Querydsl创建查询
- 9.6.7 使用Query by Example创建查询
- 9.7 小结
- 第10章 使用Spring进行消息传递、电子邮件发送、异步方法执行和缓存
- 10.1 简介
- 10.2 MyBank应用程序的需求
- 10.3 发送JMS消息
- 10.3.1 配置ActiveMQ代理以在内嵌模式下运行
- 10.3.2 配置一个JMS ConnectionFactory
- 10.3.3 使用JmsTemplate发送JMS消息
- 10.3.4 在事务中发送JMS消息
- 10.3.5 动态JMS目标和JmsTemplate配置
- 10.3.6 JmsTemplate和消息转换
- 10.4 接收JMS消息
- 10.4.1 使用JmsTemplate同步接收JMS消息
- 10.4.2 使用消息侦听器容器异步接收JMS消息
- 10.4.3 使用@JmsListener注册JMS侦听器端点
- 10.4.4 使用spring-messaging模块的消息传递
- 10.5 发送电子邮件
- 10.5.1 使用MimeMessageHelper准备MIME消息
- 10.5.2 使用MimeMessagePreparator准备MIME消息
- 10.6 任务调度和异步执行
- 10.6.1 TaskExecutor 接口
- 10.6.2 TaskScheduler 接口
- 10.6.3 调度bean方法的执行
- 10.6.4 @Async和@Scheduled注解
- 1.@Async注解
- 2.@Scheduled注解
- 10.7 缓存
- 10.7.1 配置一个CacheManager
- 10.7.2 缓存注解——@Cacheable、@CacheEvict和@CachePut
- 1.@Cacheable
- 2.@CacheEvict
- 3.@CachePut
- 10.7.3 使用Spring cache模式进行缓存配置
- 10.8 运行MyBank应用程序
- 10.9 小结
- 第11章 面向切面编程
- 11.1 简介
- 11.2 一个简单的AOP示例
- 11.3 Spring AOP框架
- 11.3.1 代理的创建
- 11.3.2 expose-proxy特性
- 11.4 切入点表达式
- 11.4.1 @Pointcut注解
- 11.4.2 execution 和args 切入点指示符
- 将目标方法的参数传递给一个通知
- 11.4.3 bean切入点指示器
- 11.4.4 基于注解的切入点指示符
- 11.5 通知类型
- 11.5.1 前置通知
- 11.5.2 返回后通知
- 11.5.3 抛出后通知
- 11.5.4 后置通知
- 11.5.5 围绕通知
- 11.5.6 通过实现特殊接口创建通知
- 11.6 Spring AOP - XML模式样式
- 11.6.1 配置一个AOP切面
- 11.6.2 配置一个通知
- 1.配置一个返回后通知
- 2.配置一个抛出后通知
- 11.6.3 将切入点表达式与通知相关联
- 11.7 小结
- 第12章 Spring Web MVC基础知识
- 12.1 简介
- 12.2 示例Web项目的目录结构
- 12.3 了解“Hello World”网络应用程序
- 12.3.1 HelloWorldController.java——Hello World Web应用程序的控制器类
- 12.3.2 helloworld.jsp——展示“Hello World !!”消息的JSP页面
- 12.3.3 myapp-config.xml——Web应用程序上下文XML文件
- 12.3.4 web.xml——Web应用程序部署描述符
- 12.4 DispatcherServlet——前端控制器
- 访问ServletContext和ServletConfig对象
- 12.5 使用@Controller和@RequestMapping注解开发控制器
- 使用注解控制器开发“Hello World”Web应用程序
- 12.6 MyBank Web应用程序的需求
- 12.7 Spring Web MVC注解——@RequestMapping和 @RequestParam
- 12.7.1 使用 @RequestMapping将请求映射到控制器或者控制器方法
- 1. @RequestMapping注解和RequestMappingHandlerMapping
- 2.基于请求路径映射请求
- 3. 基于HTTP方法映射请求
- 4.基于请求的参数映射请求
- 5.基于请求的MIME类型映射请求
- 6.根据响应可接受的MIME类型映射请求
- 7.基于请求头的值映射请求
- 12.7.2 @RequestMapping 注解方法的参数
- 12.7.3 @RequestMapping 注解方法的返回类型
- 12.7.4 使用@RequestParam将请求参数传递给控制器方法
- 1.将所有的请求参数传递给控制器方法
- 2.使用name属性指定请求参数的名称
- 3.使用name特性指定请求参数的名称
- 4.通过使用required特性来指定请求参数是可选的还是必需的
- 5.使用defaultValue特性指定请求参数的默认值
- 12.8 验证
- 12.9 使用@ExceptionHandler注解处理异常
- 12.10 加载根Web应用程序上下文XML文件
- 12.11 小结
- 第13章 Spring Web MVC中的验证和数据绑定
- 13.1 简介
- 13.2 使用@ModelAttribute注解添加和获取模型特性
- 13.2.1 使用方法级的@ModelAttribute注解添加模型特性
- 13.2.2 使用@ModelAttribute注解获取模型特性
- 13.2.3 请求处理及@ModelAttribute注解的方法
- 13.2.4 使用@ModelAttribute注解的方法参数的行为
- 13.2.5 RequestToViewNameTranslator对象
- 13.3 使用@SessionAttributes注解缓存模型特性
- 13.4 Spring中对数据绑定的支持
- 13.4.1 WebDataBinder——Web请求参数的数据绑定器
- 13.4.2 配置WebDataBinder实例
- 1.在控制器类中定义一个@InitBinder 注解的方法
- 2.配置一个WebBindingInitializer实现
- 3.在@ControllerAdvice注解的类中定义@InitBinder方法
- 13.4.3 允许或禁止字段参与数据绑定过程
- 13.4.4 使用BindingResult对象检查数据绑定和验证错误
- 13.5 Spring中的验证支持
- 13.5.1 使用Spring的Validator接口验证模型特性
- 1.通过显式调用validate方法验证模型特性
- 2.使用JSR 380的@Valid注解调用模型特性验证
- 13.5.2 使用JSR 380注解指定约束
- 13.5.3 使用JSR 380注解验证对象
- 1.通过显式地调用validate方法验证模型特性
- 2.使用JSR 380的@Valid注解调用模型特性验证
- 13.6 Spring的form标签库
- Spring的form标签库对HTML5的支持
- 13.7 使用基于Java的配置方式来配置Web应用程序
- 13.8 小结
- 第14章 使用Spring Web MVC开发RESTful Web服务
- 14.1 简介
- 14.2 定期存款Web服务
- 14.3 使用Spring Web MVC实现RESTful Web服务
- 14.3.1 JSON (JavaScript对象表示法)
- 14.3.2 FixedDepositWS Web服务的实现
- 1.使用ResponseEntity指定HTTP响应
- 2.使用HttpServletResponse指定HTTP响应
- 3.使用@ResponseBody将方法的值返回给HTTP响应体
- 4.使用@RequestBody将HTTP请求体绑定到方法参数
- 5.使用@ResponseStatus设置HTTP响应状态
- 6.使用@ExceptionHandler处理异常
- 14.4 使用RestTemplate和WebClient访问RESTful Web服务
- 14.4.1 RestTemplate 的配置
- 14.4.2 使用RestTemplate访问FixedDepositWS Web服务
- 14.4.3 使用WebClient异步访问RESTful Web服务
- 14.5 使用HttpMessageConverter将Java对象与HTTP请求和响应相互转换
- 14.6 @PathVariable和@MatrixVariable 注解
- 14.7 小结
- 第15章 Spring Web MVC进阶——国际化、文件上传和异步请求处理
- 15.1 简介
- 15.2 使用处理程序拦截器对请求进行预处理和后处理
- 实现和配置处理程序拦截器
- 15.3 使用资源束进行国际化
- 15.3.1 MyBank Web应用程序的需求
- 15.3.2 MyBank Web应用程序的国际化和本地化
- 15.4 异步地处理请求
- 15.4.1 异步请求处理配置
- 15.4.2 从@RequestMapping方法返回Callable
- 15.4.3 从@RequestMapping方法中返回DefferedResult
- 1.@RequestMapping方法实现
- 2.计算DeferredResult实例的结果
- 3.异常处理
- 15.4.4 设置默认超时时间
- 15.4.5 拦截异步请求
- 15.5 Spring中的类型转换和格式化支持
- 15.5.1 创建自定义转换器
- 15.5.2 配置和使用自定义转换器
- 15.5.3 创建一个自定义的格式化器
- 15.5.4 配置一个自定义格式化器
- 15.5.5 创建AnnotationFormatterFactory以格式化仅使用@AmountFormat注解的字段
- 15.5.6 配置AnnotationFormatterFactory 的实现
- 15.6 Spring Web MVC中的文件上传支持
- 15.6.1 使用CommonsMultipartResolver上传文件
- 15.6.2 使用StandardServletMultipartResolver上传文件
- 15.7 小结
- 第16章 使用Spring Security保护应用程序
- 16.1 简介
- 16.2 MyBank Web应用程序的安全性需求
- 16.3 使用Spring Security保护MyBank Web应用程序
- 16.3.1 Web请求安全的配置
- 1.DelegatingFilterProxy过滤器的配置
- 2.配置Web请求安全
- 16.3.2 身份认证配置
- 16.3.3 使用Spring Security的JSP标签库保护JSP内容
- 16.3.4 保护方法
- 1.使用<global-method-security>元素配置方法级安全
- 2.使用@Secured注解指定bean方法的安全性约束
- 16.4 MyBank Web应用程序——使用Spring Security的ACL模块保护FixedDepositDetails实例
- 16.4.1 部署和使用ch16-bankapp-db-security项目
- 16.4.2 存储ACL和用户信息的数据库表
- 1.ACL_CLASS表
- 2.ACL_SID表
- 3.ACL_OBJECT_IDENTITY表
- 4.ACL_ENTRY表
- 5.USERS表
- 6.AUTHORITIES表
- 16.4.3 用户认证
- 16.4.4 Web请求安全
- 16.4.5 JdbcMutableAclService配置
- 16.4.6 方法级安全配置
- 16.4.7 域对象实例的安全
- 16.4.8 以编程方式管理ACL条目
- 16.4.9 MutableAcl及安全性
- 16.5 使用基于Java的配置方法配置Spring Security
- 16.5.1 使用WebSecurityConfigurerAdapter类配置Web请求安全
- 16.5.2 使用GlobalMethodSecurityConfiguration类配置方法级安全
- 16.5.3 将DelegatingFilterProxy过滤器注册到ServletContext
- 16.5.4 将DispatcherServlet和ContextLoaderListener注册到ServletContext
- 16.6 小结
- 第17章 Java的函数式编程
- 17.1 简介
- 17.2 命令式和函数式编程风格
- 17.3 lambda表达式
- 17.4 创建简单函数和高阶函数
- 17.4.1 简单函数
- 17.4.2 高阶函数
- 17.5 流API
- 17.5.1 中间操作和终结操作
- 17.5.2 延迟求值
- 17.5.3 顺序流和并行流
- 17.6 方法引用
- 17.7 小结
- 第18章 RxJava 2的反应式编程
- 18.1 简介
- 18.2 反应式流
- 心率监测应用程序
- 情况1:未通过HeartbeatSubscriber的onNext方法调用Subscription的cancle方法
- 情况2:未通过HeartbeatSubscriber的onNext方法调用Subscription的request方法
- 18.3 冷发布者和热发布者
- StockQuote应用程序
- 18.4 背压
- 18.5 小结
- 第19章 用Spring WebFlux、Spring Data和Spring Security开发反应式RESTful Web服务
- 19.1 简介
- 19.2 Reactor和RxJava 2定义的反应式类型
- 19.3 用Spring Data开发数据访问层
- 19.3.1 Reactor
- 定义反应式存储库
- 配置Spring Data MongoDB
- 测试数据访问层
- 19.3.2 RxJava 2
- 定义反应式存储库
- 测试数据访问层
- 19.4 使用Spring WebFlux开发Web层
- 19.4.1 编写反应式Web控制器
- 19.4.2 配置Spring WebFlux
- 19.4.3 配置ServletContext
- 19.4.4 使用WebClient与反应式RESTful Web服务交互
- 19.4.5 使用服务器发送事件接收数据
- 19.5 保护WebFlux应用程序的安全性
- 19.6 小结
- 附录A 下载和安装MongoDB数据库
- A.1 下载并安装MongoDB数据库
- 启动MongoDB数据库服务器
- A.2 连接MongoDB数据库
- 附录B 在Eclipse IDE中导入和运行示例项目
- B.1 下载和安装Eclipse IDE和Tomcat 9
- B.2 将示例项目导入Eclipse IDE中
- B.2.1 将示例项目导入Eclipse IDE中
- B.2.2 在Eclipse IDE中配置M2_REPO类路径变量
- B.3 在Eclipse IDE中配置Tomcat 9服务器
- B.4 在Tomcat 9服务器上部署Web项目
展开全部
出版方
人民邮电出版社
人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。