Spring Boot 2.x使用篇(一)—— 初识Spring Boot

2023-10-27

1、Spring Boot 2.x概述

  2018年3月初,Spring Boot发生了重大版本更替,正式更新到了2.x的正式(GA)版本。在学习Spring Boot的过程中使用的参考书籍《深入浅出Spring Boot 2.x》使用的Spring Boot的版本是2.0.0.RELEASE版本。但在本地IDE中的联系项目使用的版本为2.1.6.RELEASE。这里需要注意的是Spring Boot 2.x和Spring Boot 1.x在使用上有很多地方存在不同,并且只能支持JDK 8或者以上的版本。

1.1 Spring Boot与Spring

  在之前的系列博客《Spring使用篇系列博客传送门》中,我们曾经讨论过在Spring框架中何时使用注解,何时使用XML的问题,在这里我觉得有必要再次将它提出来做一下明确。

  • 对于自己编写的业务类使用注解。例如,对于MVC开发,控制器使用@Controller注解,业务层使用@Service注解,持久层使用@Repository注解。

  • 对于一些公用的Bean,例如对于数据库、第三方资源等则使用XML进行配置。

  这已经是一个不成文的共识,直至今日这样的配置方式还在企业中广泛使用着。

  随着Spring的版本不断更新,在Spring 4.x时注解功能越来越强大,对于XML的依赖越来越少。与此同时,Pivotal团地在原有Spring的基础上主要通过注解的方式继续简化了Spring框架的开发,他们基于Spring框架开发了Spring Boot,所以Spring Boot并非是代替Spring框架,而是让Spring框架更加容易得到快速的使用。

  随着近年来微服务的流行,越来越多的企业需要快速的开发,而Spring Boot除了以注解为主的开发,还有其他的绑定,例如,对服务器进行了绑定和默认对Spring的最大化配置,所以开发者能够尽快进行代码开发、发布和测试自己的项目。这符合了现金微服务快速开发、测试和部署的需要,于是越来越多的企业选择Spring Boot作为开发的选型,进而使得Spring Boot更加兴旺流行起来。

1.2 Spring Boot与Spring MVC

  在之前的系列博客《Spring MVC使用篇系列博客传送门》中,详细介绍了如何使用Spring MVC框架开发一个MVC的Web项目,这里便不再赘述,如感兴趣请查看博看《Spring MVC使用篇(二)—— 环境搭建》。其核心是需要配置DispatcherServlet,也需要配置Spring IoC的容器。而对于这些配置可以选择使用web.xml的配置来实现,当然如果使用的是Servlet 3.1规范,也可以继承又Spring MVC提供的AbstractAnnotationConfigDispatcherServletInitializer来配置Spring MVC项目。

  传统的Spring MVC开发需要配置的内容还是比较多的,而且对设计人员要求较高。在开发完成后,开发者还需要找到对应的服务器去运行,例如Tomcat或者Jetty等,这样既要进行开发,又要进行配置和部署,工作量不小。

  而使用Spring Boot开发后,我们可以通过Maven引入多个相关的Spring Boot的starter,具体依赖如下所示。Spring Boot会将对应的jar包加载到工程中,而且它还会把绑定的服务器也加载到工程中,这些都不需要你再进行处理。正如Spring Boot承诺的那样,绑定服务器,并且实现Spring的尽可能配置,采用约定优于配置的原则。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.6.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.ccff.springboot.demo</groupId>
	<artifactId>chapter1</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>chapter1</name>
	<packaging>war</packaging>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<!--aop包-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-aop</artifactId>
		</dependency>

		<!--Web开发包,将载入Spring MVC所需要的包,且内嵌Tomcat-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<!--加载测试依赖包-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<!--引入插件-->
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

1.3 Spring Boot的优点

  根据官网的文档,Spring Boot具有以下优点:

  • 创建独立的Spring应用程序
  • 已经嵌入了Tomcat、Jetty或者Undertow,无需部署WAR文件
  • 允许通过Maven来根据需要获取starter
  • 尽可能地自动化配置Spring
  • 提供生产就绪型功能,如指标、健康系统和外部部署
  • 绝对没有代码生成,对XML没有要求配置

  通过上面官网文档的描述,我们可以看出:首先,Spring Boot是一个基于Spring框架搭建起来的应用,其次它会嵌入Tomcat、Jetty或者Undertow等服务器;同时提供通过Maven(或者Grandle)依赖的starter,这些starter可以直接获取开发所需的相关包,通过这些starter项目就能以Java Application的形式运行Spring Boot项目,而无须其他服务器配置;对于配置,Spring Boot提供Spring框架的最大自动化配置,大量使用自动化配置,使得开发者对Spring的配置尽量减少;此外还提供了一些监测、自动检测的功能和外部配置,与此同时没有附加代码和XML的配置要求。

  约定优于配置,这是Spring Boot的主导思想。 对于Spring Boot而言,大部分情况下存在默认配置,你甚至可以在没有任何定义的情况下使用Spring框架,如果需要自定义也只需要在配置文件中配置一些属性便可, 十分便捷。而对于部署这些项目必需的功能,Spring Boot提供starter的依赖,这样使得开发者能够尽可能快地搭建开发环境,快速进行开发和部署,这就是Spring Boot的特色。

  使用Spring Boot配置Spring MVC,开发控制器类的示例代码如下所示:

package com.ccff.springboot.demo.chapter1;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class Chapter1Application {
	@GetMapping("/index")
	public String index() {
		return "<h1>Hello Spring Boot 2.x!</h1>";
	}

	public static void main(String[] args) {
		SpringApplication.run(Chapter1Application.class, args);
	}

}

  直接运行上面的启动类,在控制台出现如下信息则说明Spring Boot已经启动成功。
在这里插入图片描述
  启动成功后,在浏览器内打开相应url查看输出信息如下:
在这里插入图片描述
  由此可见,Spring Boot允许直接进行开发,这就是它的优势。在传统所需要配置的地方,Spring Boot都进行了约定,也就是你可以直接以Spring Boot约定的方式进行开发和运行你的项目。

  当你需要修改配置的时候,它也提供了一些快速配置的约定,尽可能地配置好Spring项目和绑定对应的服务器,使得开发人员的配置更少,更加直接地开发项目。

2、IntelliJ IDEA中搭建Spring Boot开发环境

2.1 使用Spring Initializr自动创建项目

  首先启动IntelliJ IDEA开发环境,然后选择Create New Project,在弹出的窗口中选择Spring Initializr,将JDK版本设置为1.8,并选择创建服务的URL后点击Next进入下一步。具体如下图所示:
在这里插入图片描述
  其次,对我们创建的项目进行相应的配置后点击Next,进入下一步,需要注意的是这里我们仍然选择了War的打包形式。具体如下:
在这里插入图片描述
  然后,在新窗口中需要选择Spring Boot的版本为2.1.6,并根据自己的需要选择对应的starter进行依赖,IntelliJ IDEA也会为你建好工程。这里我们先选择Web进行初始项目的创建,点击Next进入下一步。具体如下图所示:
在这里插入图片描述
  最后,输入项目名称、项目保存位置,点击Finish,完成Spring Boot项目的创建。

2.2 IntelliJ IDEA中搭建多模块项目

  在本小节中,我们利用之前创建的Spring Boot项目,在IntelliJ IDEA中搭建一个由多个模块相互组成并形成依赖的Spring Boot项目。

  首先,将父项目中的.idea文件夹、.mvn文件夹、src文件夹、.gitignore文件、mvnw文件、mvnw.cmd文件、Help.md文件全部删除。

  其次,创建两个子module,分别为"chapter1"与"chapter2"。两个子module的创建方式与创建父项目的方法一致。

  然后,修改父项目中的pom.xml文件中的打包方式,将之前的打包成War包的形式修改为打包成pom的形式。具体如下所示:

<groupId>com.ccff.springboot.demo</groupId>
<artifactId>springboot-learning-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>	<!-- 这里由原来的war修改为现在的pom  -->

  接着,在父项目中的pom.xml文件中添加modules标签,声明其子module,具体配置如下:

<modules>
	<module>chapter1</module>
	<module>chapter2</module>
</modules>

  最后,分别修改chapter1和chapter2的子module中的pom.xml文件。将其中依赖的父项目修改为当前父项目,修改后的配置如下:

<parent>
	<groupId>com.ccff.springboot.demo</groupId>
	<artifactId>springboot-learning-demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<relativePath>../pom.xml</relativePath>
</parent>

  在最后一步中有一个坑,这里需要特殊说明一下: 在修改子module依赖的父项目时,如果不指定relativePath的值,可能会出现如下错误提示:

maven报错:Non-resolvable parent POM

  这说明了子module中的relativePath属性指向的路径不对,需要手动修改,使其指向父项目的pom.xml文件

2.3 Spring Boot的依赖和自动配置

  我们以最常用的Spring MVC为例说明Spring Boot为什么在很少的配置下就能够运行。

  打开本地Maven仓库,找到Spring Boot的文件夹:org.springframework.boot下的spring-boot-start-web,进入后发现有一个名为"2.0.0.RELEASE"的文件夹,进入后打开名为"spring-boot-starter-web-2.0.0.RELEASE.pom"的文件,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starters</artifactId>
    <version>2.0.0.RELEASE</version>
  </parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <version>2.0.0.RELEASE</version>
  <name>Spring Boot Web Starter</name>
  <description>Starter for building web, including RESTful, applications using Spring
		MVC. Uses Tomcat as the default embedded container</description>
  <url>https://projects.spring.io/spring-boot/#/spring-boot-parent/spring-boot-starters/spring-boot-starter-web</url>
  <organization>
    <name>Pivotal Software, Inc.</name>
    <url>https://spring.io</url>
  </organization>
  <licenses>
    <license>
      <name>Apache License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0</url>
    </license>
  </licenses>
  <developers>
    <developer>
      <name>Pivotal</name>
      <email>info@pivotal.io</email>
      <organization>Pivotal Software, Inc.</organization>
      <organizationUrl>http://www.spring.io</organizationUrl>
    </developer>
  </developers>
  <scm>
    <connection>scm:git:git://github.com/spring-projects/spring-boot.git/spring-boot-starters/spring-boot-starter-web</connection>
    <developerConnection>scm:git:ssh://git@github.com/spring-projects/spring-boot.git/spring-boot-starters/spring-boot-starter-web</developerConnection>
    <url>http://github.com/spring-projects/spring-boot/spring-boot-starters/spring-boot-starter-web</url>
  </scm>
  <issueManagement>
    <system>Github</system>
    <url>https://github.com/spring-projects/spring-boot/issues</url>
  </issueManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
      <version>2.1.6.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <!-- JSON依赖 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-json</artifactId>
      <version>2.1.6.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <!-- Tomcat依赖 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <version>2.1.6.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <!-- Hibernate Validator依赖 -->
    <dependency>
      <groupId>org.hibernate.validator</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>6.0.7.Final</version>
      <scope>compile</scope>
    </dependency>
    <!-- Spring Web依赖 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.0.4.RELEASE</version>
      <scope>compile</scope>
    </dependency>
    <!-- Spring Web MVC依赖 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.0.4.RELEASE</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
</project>

  从上面的文件中可以看出,当加入spring-boot-starter-web后,它会通过Maven将对应的资源加载到我们的工程中,这样便能够形成依赖。

  但这样还不足以运行Spring MVC项目,要运行它还需要对Spring MVC进行配置,让它能够生产Spring MVC所需的对象,才能启用Spring MVC。

  为了探讨Spring MVC在Spring Boot自动配置的问题,我们还需要在本地Maven仓库中找到spring-boot-autoconfigure目录下的名为"2.1.6.RELEASE"的文件夹下的名为"spring-boot-autoconfigure-2.1.6.RELEASE.jar"的源码包。将其解压缩出来,打开它目录下的子目录:/org/springframework/boot/autoconfigtre/web.servlet后,我们可以看到很多配置类。其中DispatcherServletAutoConfiguration就是一个对DispatcherServlet进行自动配置的类,其源码中的一个内部类DispatcherServletConfiguration对Spring Boot的自动配置做最基本的配置。

2.4 使用自定义配置

  通过上一小节,我们知道在几乎没有任何配置下就能用Spring Boot启动Spring MVC项目,是因为Spring Boot通过Maven依赖找到对应的jar包和嵌入的服务器,然后使用默认自动配置类来创建默认的开发环境。

  但有的时候,我们需要对这些默认的环境进行修改以适应个性化的要求,这些在Spring Boot中也是非常简单的。正如@EnableConfigurationProperties注解那样,它允许读入配置文件的内容来自定义自动初始化所需的内容。

  在使用IntelliJ IDEA创建Spring Boot项目时,会在src/main/resources路径下创建一个名为"application.properties"的属性文件。它是一个默认的配置文件,通过它可以根据自己的需要实现自定义。

  假设当前8080端口已经被占用,因此我们希望使用8090端口号启动Tomcat,那么只需要在application.properties属性文件中添加如下属性配置:

server.port=8090

  事实上,在平时的日常开发中,除了使用properties文件外,yml文件也是一种十分常见的格式。yml文件的配置与properties文件只是简写和缩进的差别,因此差异并不大。

3、Spring Boot项目Quick Start

  在2.4小节中,我们修改了服务器的端口号,除此之外有时我们还需要修改Spring MVC的视图解析器。在开发中较为常用的视图之一为JSP。

  例如,现在控制器中返回一个字符串"index",那么我们希望它对应的是开发项目的/WEN-INF/jsp/index.jsp文件。

  首先,我们需要在chapter2 module中的pom.xml文件中添加该模块特有的JSP和JSTL依赖包,具体如下:

<dependency>
	<groupId>org.apache.tomcat.embed</groupId>
	<artifactId>tomcat-embed-jasper</artifactId>
	<scope>provided</scope>
</dependency>
<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>jstl</artifactId>
	<scope>provided</scope>
</dependency>

  其次,修改application.properties属性文件,设置Spring MVC视图解析器的前缀后后缀,具体属性配置如下:

server.port=8090

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

  然后,在com.ccff.springboot.demo.chapter2.controller包下创建名为"IndexController"的控制器,具体代码如下所示:

package com.ccff.springboot.demo.chapter2.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Created by wangzhefeng01 on 2019/8/2.
 */
@RestController
@RequestMapping("/Index")
public class IndexController {
    @GetMapping("/index")
    public String index(){
        return "index";
    }
}

  接着,在src/main下创建webapp/WEB-INF/jsp/index.jsp,具体代码如下所示:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Spring boot 视图解析器</title>
</head>
<body>
    <h1>测试视图解析器</h1>
</body>
</html>

  最后,运行Spring Boot启动类Chapter2Application,项目启动后在浏览器内输入url:,结果如下图所示:
在这里插入图片描述
  这里有一个很深的坑需要大家注意:在IndexController控制器中使用@Controller注解时会出现404的问题,报错信息如下:

spring boot整合jsp的时候访问页面错误日志:Path with "WEB-INF" or "META-INF":

  问题解析戳这里:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot 2.x使用篇(一)—— 初识Spring Boot 的相关文章

  • 在Java中使用命令行编译多个包

    您好 我一直在使用 IDE 但现在我需要从命令行运行和编译 问题是我有多个软件包 我试图找到答案 但没有任何效果 所以我有 src Support java files Me java files Wrapers java files 你知
  • 手动编辑 Jar 以更改包名称

    我有一个来自外部源的 jar 文件 jar 中的所有类都位于 com xyz 包中 我想将所有类移动到 com xyzold 包中 这是否像解压缩 jar 将 xzy 文件夹重命名为 xyzold 并重新压缩它一样简单 或者我还需要修改每个
  • Jackson - 反序列化嵌套 JSON

    我有一个 JSON 字符串 其格式如下 response execution status ready report cache hit true created on 2013 07 29 08 42 42 fact cache erro
  • jvm 次要版本与编译器次要版本

    当运行使用具有相同主要版本但次要版本高于 JVM 的 JDK 编译的类时 JVM 会抛出异常吗 JDK 版本并不重要 类文件格式版本 http blogs oracle com darcy entry source target class
  • 使用 Java 在 WebDriver 中按 Ctrl+F5 刷新浏览器

    我已经使用 java 刷新了 WebDriver 中的浏览器 代码如下 driver navigate refresh 如何使用 Java 在 WebDriver 中按 Ctrl F5 来做到这一点 我认为您可以使用 WebDriver 和
  • 无法使用 json 架构验证器根据预定义的 yaml 文件验证查询参数

    我需要根据预定义的 yaml 文件架构验证查询参数的架构 因此我使用 json 架构验证器 验证如何失败 我正在执行以下步骤 填充参数和相应的架构 final List
  • RMI 中的引用传递问题? [复制]

    这个问题在这里已经有答案了 有人可以告诉我我错在哪里 为什么这个 RMI 聊天应用程序不起作用 目标是通过远程对象或序列化对象实现客户端 服务器和逻辑之间的解耦 import javax swing import java awt even
  • 正则表达式获取字符串中的第一个数字和其他字符

    我是正则表达式的新手 想知道如何才能只获取字符串中的第一个数字 例如100 2011 10 20 14 28 55 在这种情况下 我希望它返回100 但该数字也可以更短或更长 我在想类似的事情 0 9 但它单独获取每个数字 100 2001
  • 是否有任何API可以将Microsoft Exchange服务器与Java应用程序集成以进行任务同步?

    我正在尝试将 Java Web 应用程序与 Microsoft Exchange 服务器集成以实现双向日历 即任务 同步 是否有用于此集成的 Java 开源 商业 API 谢谢 文卡特 看一眼j 交易所 http sourceforge n
  • 定期更新 SWT 会导致 GUI 冻结

    Problem 当 GUI 字段定期更新时 SWT 会冻结 我想要一个基于 SWT 的 GUI 其中文本字段的值会定期递增 最初我从单独的线程访问 textField 导致抛出异常 线程 Thread 0 org eclipse swt S
  • 有多少种方法可以将位图转换为字符串,反之亦然?

    在我的应用程序中 我想以字符串的形式将位图图像发送到服务器 我想知道有多少种方法可以将位图转换为字符串 现在我使用 Base64 格式进行编码和解码 它需要更多的内存 是否有其他可能性以不同的方式做同样的事情 从而消耗更少的内存 现在我正在
  • 容器中的 JVM 计算处理器错误?

    最近我又做了一些研究 偶然发现了这一点 在向 OpenJDK 团队抱怨之前 我想看看是否有其他人观察到这一点 或者不同意我的结论 因此 众所周知 JVM 长期以来忽略了应用于 cgroup 的内存限制 众所周知 现在从 Java 8 更新某
  • 从 @JsonProperty 值获取枚举常量

    我有一个标有 JsonProperty 的枚举 用于使用 Jackson 进行 JSON 序列化 反序列化 并且希望获取给定字符串 JsonProperty 的枚举值 public enum TimeBucket JsonProperty
  • 发生错误。请参阅日志文件 - eclipse juno

    每当我启动 Eclipse Juno 时 都会出现错误 发生错误 请查看日志文件 C Program Files eclipse configuration 1362989254411 log 有的网站说卸载jdk重新安装 我这样做了 但没
  • 我想在java中使用XQuery进行Xml处理

    我想用XQuery用于从 java 中的 Xml 获取数据 但我没有得到需要为此添加哪个 Jar 我在谷歌上搜索了很多 但没有得到任何有用的例子 例如我得到以下链接 https docs oracle com database 121 AD
  • 如何找到被点击的JLabel并从中显示ImageIcon?

    这是我的代码 我想知道哪个l单击 然后在新框架中显示该 ImageIcon e getSource 不起作用 final JFrame shirts new JFrame T shirts JPanel panel new JPanel n
  • 改变for循环的顺序?

    我遇到一种情况 我需要根据用户输入以不同的顺序循环遍历 xyz 坐标 所以我是 3D 空间中的一个区域 然后是一组像这样的 for 循环 for int x 0 x lt build getWidth x for int y 0 y lt
  • JavaFX - 为什么多次将节点添加到窗格或不同的窗格会导致错误?

    我现在正在学习基本的 JavaFX 我不明白我正在阅读的书中的这一说法 不 诸如文本字段之类的节点只能添加到一个窗格中一次 将节点添加到多次窗格或不同的窗格将导致运行时错误 我可以从书中提供的UML图看出它是一个组合 但我不明白为什么 库类
  • 警告:无法更改每个人的权限:

    当运行 Java 快速入门示例时https developers google com drive web quickstart java hl hu https developers google com drive web quicks
  • 每次我们调用浏览器时,在 selenium 中使用 driver.manage().window().maximize() 是否好?

    We use driver manage window maximize 最大化浏览器 我在网上看到一些使用的例子driver manage window maximize 尽管不需要最大化浏览器 例如 gmail 登录 我还看到使用 se

随机推荐