IntelliJ IDEA上手这一篇就够了,从入门到上瘾

前言

每次换电脑,最最最头疼的事情莫过于安装各种软件和搭建开发环境。这算是不想换电脑的一个原因吧(最主要还是穷)。除非是电脑坏了开不了机或者点一下卡一下,真不想换电脑。每次换电脑都得折腾好久。

趁着这次换电脑了,顺便整理下IDEA安装使用及配置。

官网提供的详细使用文档,英文好的可以直接上手了

http://www.jetbrains.com/help/idea/getting-started.html

IntelliJ IDEA简介

IDEA,全称IntelliJ IDEA,是 Java 语言的集成开发环境, IDEA 在业界被公认为是最好的 java 开发工具之一,一旦用上了就会上瘾。尤其在智能代码助手、代码自动提示、重构、 J2EE
支持、 Ant、 JUnit、 CVS 整合、代码审查、创新的 GUI 设计等方面的功能可以说是超常的。

IDEA在官网是这样解释自己的
Excel at enterprise, mobile and web development with Java, Scala and Groovy,
with all the latest modern technologies and frameworks available out of the
box.
简明翻译: IntelliJ IDEA 主要用于支持 Java、 Scala、 Groovy 等语言的开发工
具,同时具备支持目前主流的技术和框架,擅长于企业应用、移动应用和 Web 应
用的开发

IntelliJ IDEA 相比于Eclipse的优势

  • 强大的整合能力。比如: Git、 Maven、 Spring 等
  • 提示功能的快速、 便捷
  • 提示功能的范围广
  • 好用的快捷键和代码模板
  • 精准搜索

IntelliJ IDEA 下载安装

  1. 下载地址

http://www.jetbrains.com/idea/download/#section=windows

DEA 分为两个版本: 旗舰版(Ultimate)和社区版(Community)。
旗舰版:收费(限 30 天免费试用),功能全面,插件丰富,但是收费,按年收费;
社区版:免费试用,功能相对而言不是很丰富,但是不影响开发使用。

  1. 软硬件要求(官方要求)

以现目前最新版为例(现在最新版是idea-2021.3.2)

  • 操作系统: 64-bit versions of Microsoft Windows 10, 8
  • 内存:2 GB RAM minimum, 8 GB RAM recommended
  • 硬盘:2.5 GB hard disk space, SSD recommended
  • 屏幕:1024x768 minimum screen resolution
  • JRE:JRE 1.8 is bundled with the IntelliJ IDEA distribution. You do not need to install Java
    on your computer to run IntelliJ IDEA.
  • JDK A standalone JDK is required for Java development

个人建议配置: 内存 8G 或以上, CPU 最好 i5 以上, 最好安装块固态硬盘(SSD),将 IDEA
安装在固态硬盘上,这样流畅度会加快很多

  1. 安装过程

双击下载好的exe文件进行无脑安装即可


  1. 激活
    淘宝,你懂的。

目录结构介绍

  1. 安装目录介绍

bin:容器,执行文件和启动参数等

idea64.exe.vmoptions 是比较重要的配置文件,这里以我个人电脑为例(win10 64位 16G内存)

-Xms512m   # 设置初始的内存数,增加该值可以提高 Java 程序的启动速度
-Xmx1500m  #设置最大内存数,提高该值,可以减少内存 Garage 收集的频率,提高程序性能
-XX:ReservedCodeCacheSize=512m  #保留代码占用的内存容量
-XX:+IgnoreUnrecognizedVMOptions
-XX:+UseG1GC
-XX:SoftRefLRUPolicyMSPerMB=50
-XX:CICompilerCount=2
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-ea
-Dsun.io.useCanonCaches=false
-Djdk.http.auth.tunneling.disabledSchemes=""
-Djdk.attach.allowAttachSelf=true
-Djdk.module.illegalAccess.silent=true
-Dkotlinx.coroutines.debug=off
  • help:快捷键文档和其他帮助文档
  • jbr: 咱们在介绍intellij idea安装之前的准备时就给大家说过硬件和软件上的一个要求,如果你只是想运行java程序,那么你就用不着再去装jre了,因为intellij idea已经绑定好了。在jbr目录中,大家就能够看到它已经提供好了java的运行环境,当然,如果你要是想开发java程序的话,那么就得需要独立安装jdk了
  • lib: idea 依赖的类库
  • license:各个插件许可
  • plugin:插件
  1. 设置目录介绍

路径
C:\Users\用户.IntelliJIdea2019.3

这是 IDEA 的各种配置的保存目录。 这个设置目录有一个特性,就是你删除掉整
个目录之后,重新启动 IntelliJ IDEA 会再自动帮你生成一个全新的默认配置,
所以很多时候如果你把 IntelliJ IDEA 配置改坏了,删掉该目录,一切都会还原到默认值

① config 目录

此目录为IDEA最重要的目录。目录主要记录了: IDE 主要配置功能、自定义的代码模板、自定义的文件
模板、自定义的快捷键、 Project 的 tasks 记录等等个性化的设置

② system目录

system 目录是 IntelliJ IDEA 系统文件目录,是 IntelliJ IDEA 与开发项目一个
桥梁目录, 里面主要有:缓存、索引、容器文件输出等等

创建Java工程,实现Hell World

  1. 创建工程
  • Create New Project:创建一个新的工程
  • Import Project:导入一个现有的工程
  • Open:打开一个已有工程。比如:可以打开 Eclipse 项目。
  • Check out from Version Control:可以通过服务器上的项目地址 check out Github
    上面项目或其他 Git 托管服务器上的项目

这里选择 Create New Project

IntelliJ IDEA 没有类似 Eclipse 的工作空间的概念( Workspaces),最大单元就是
Project。 这里可以把 Project 理解为 Eclipse 中的 Workspace。

  1. 选择jdk版本,框架

  2. 选择模板

  3. 设置项目路径及项目名称

  4. 项目界面

  • 工程下的 src 类似于 Eclipse 下的 src 目录, 用于存放代码
  • 工程下的.idea 和 project01.iml 文件都是 IDEA 工程特有的。类似于 Eclipse 工
    程下的.settings、 .classpath、 .project 等
  1. 创建package和class

在src目录下创建一个package

在刚建的package下新建class

在HelloWorld类里声明主方法,控制台打印Hello World! 到此成功完成

模块(Module)简介

在 Eclipse 中我们有 Workspace(工作空间)和 Project(工程)的概念,在 IDEA
中只有 Project(工程)和 Module(模块)的概念
① Eclipse 中 workspace 相当于 IDEA 中的 Project
②Eclipse 中 Project 相当于 IDEA 中的 Module

eclipse在同一窗口可以管理 n 个项目,这在IntelliJ IDEA 是无法做到的。
IntelliJ IDEA 提供的解决方案是打开多个项目实例,
即打开多个项目窗口。 即: 一个 Project 打开一个 Window 窗口

在 IntelliJ IDEA 中 Project 是最顶级的级别,次级别是 Module。 一个 ProjectIntelliJ IDEA 的安装、 配置与使用可以有多个 Module。目前主流的大型项目都是分布式部署的, 结构都是类似这种多 Module 结构

下图为若依项目模块截图,根据model命名可以看出,他们之间处于同一项目下,彼此之间有着不可分割的业务关系

相比多个Module项目,小项目就没这么复杂,IntelliJ IDEA创建项目的时候默认的就是单Module结构的.

  1. IntelliJ IDEA 中一个项目是以Module为单位的,那么,下面我们就来看看建立和删除Module

① 怎么建立Module?

之后,我们可以在 Module 的 src 里写代码,此时 Project 工程下的 src 就没什么用了。可以删掉。

② 如何删除一个Module呢?

  • remove Module
  • delete Module

直到第二步完成,Module将彻底从磁盘上删除

查看项目配置

IDEA 常用配置

file-->Settings 进入设置界面

  1. Appearance & Behavior

① 设置主题

默认有如下三种主题,根据自己喜好设置即可

② 设置窗体及菜单的字体及大小

  1. Editor - General

① 设置鼠标滚轮修改字体大小

② 设置鼠标悬浮提示

③ 设置自动导包

  • Add unambiguous imports on the fly:自动导入不明确的结构
  • Optimize imports on the fly: 自动帮我们优化导入的包

④ 设置显示行号和方法间的分隔符

  • 如上图红圈所示, 可以勾选 Show line numbers:显示行数。 建议勾上,好定位代码
  • 如上图红圈所示, 可以勾选 Show method separators: 显示方法分隔线。建议勾上,单一个方法代码比较多时,好区分一个方法到哪结束

⑤ 忽略大小写提示

  • IntelliJ IDEA 的代码提示和补充功能默认是区分大小写的。我们输入stringb是没有提示的
  • 按照上图,我们把Match case 前的勾去掉后代码提示就不区分大小写了。输入stringb后就会有提示

⑥ 设置取消单行显示 tabs 的操作

在打开很多文件的时候, IntelliJ IDEA 默认是把所有打开的文件名 Tab 单行显示的。如果需要多行显示文件,超出部分不折叠,则按照上图设置即可

  1. Editor – Font

① 设置默认的字体、字体大小、字体行间距

  1. Editor – Color Scheme

① 修改代码中注释的字体颜色

  • Doc Comment – Text: 修改文档注释的字体颜色
  • Block comment: 修改多行注释的字体颜色
  • Line comment: 修改当行注释的字体颜色
  1. Editor – File and Code Templates

① 修改类头的文档注释信息

/**
@author xiezhr
@create ${YEAR}-${MONTH}-${DAY} ${TIME}
*/
  1. Editor – File Encodings

① 设置项目文件编码格式

  1. Build,Execution,Deployment

① 设置自动编译

  • Intellij Idea 默认状态为不自动编译状态, Eclipse 默认为自动编译。若你是刚才eclipse转过来的,这里需要设置下。
  1. 设置代码水平或垂直显示

快捷键设置

  1. 相信不少小伙伴是刚才eclipse转过来的,习惯了eclipse的快捷键,没问题Intellij Idea中支持将快捷键设置成eclipse快捷键。

  1. 导入快捷键设置


  1. 常用快捷键(标⭐的为常用)

① 编辑类

快捷键 快捷键说明
Ctrl + Space 补全代码,由于经常与操作系统的输入法的切换冲突,所以实际很少用。一般直接在 idea 中开启输入自动补全机制
Ctrl + Shift + Space 在列出的可选项中只显示出你所输入的关键字最相关的信息。⭐
Ctrl + Shift + Enter 代码补全后,自动在代码末尾添加分号结束符
Ctrl + P 在某个方法中,调用该按键后,会展示出这个方法的调用参数列表信息
Ctrl + Q 展示某个类或者方法的 API 说明文档
Ctrl + mouse 跳进到某个类或者方法源代码中进行查看⭐
Alt + Insert 自动生成某个类的 Getters, Setters, Constructors, hashCode/equals, toString 等代码 ⭐
Ctrl + O 展示该类中所有覆盖或者实现的方法列表
Ctrl + Alt + T 自动生成具有环绕性质的代码,比如:if..else,try..catch, for, synchronized 等等,使用前要先选择好需要环绕的代码块⭐
Ctrl + / 对单行代码,添加或删除注释。分为两种情况:如果只是光标停留在某行,那么连续使用该快捷键,会不断注释掉下一行的代码;如果选定了某行代码(选定了某行代码一部分也算这种情况),那么连续使用该快捷键,会在添加或删除该行注释之间来回切换⭐
Ctrl + Shift + / 对代码块,添加或删除注释。它与 Ctrl + / 的区别是,它只会在代码块的开头与结尾添加注释符号⭐
Ctrl + W 选中当前光标所在的代码块,多次触发,代码块会逐级变大⭐
Ctrl + Shift + W 是 Ctrl + W 的反向操作,多次触发,代码块会逐级变小,最小变为光标
Alt + Q 展示包含当前光标所在代码的父节点信息,比如在 java 方法中调用,就会展示方法签名信息
Alt + Enter 展示当前当前光标所在代码,可以变化的扩展操作
Ctrl + Alt + L 格式化代码⭐
Ctrl + Alt + O 去除没有实际用到的包,这在 java 类中特别有用⭐
Ctrl + Alt + I 按照缩进的设定,自动缩进所选择的代码段
Tab / Shift + Tab 缩进或者不缩进一次所选择的代码段⭐
Ctrl + X 或 Shift Delete 剪切当前代码⭐
Ctrl + C 或 Ctrl + Insert 拷贝当前代码⭐
Ctrl + V 或 Shift + Insert 粘贴之前剪切或拷贝的代码⭐
Ctrl + Shift + V 从之前的剪切或拷贝的代码历史记录中,选择现在需要粘贴的内容⭐
Ctrl + D 复制当前选中的代码⭐
Ctrl + Y 删除当前光标所在的代码行⭐
Ctrl + Shift + J 把下一行的代码接续到当前的代码行
Ctrl + Enter 当前代码行与下一行代码之间插入一个空行,原来所在的光标不变⭐
Shift + Enter 当前代码行与下一行代码之间插入一个空行,原来光标现在处于新加的空行上⭐
Ctrl + Shift + U 所选择的内容进行大小写转换⭐
Ctrl + Shift + ]/[ 从当前光标所在位置开始,一直选择到当前光标所在代码段起始或者结束位置
Ctrl + Delete 删除从当前光标所在位置开始,直到这个单词的结尾的内容
Ctrl + NumPad(+/-) 展开或收缩代码段⭐
Ctrl + Shift + NumPad(+) 展开所有代码段
Ctrl + Shift + NumPad(-) 收缩所有代码段
Ctrl + F4 关闭当前标签页
Shift + F6 修改名字⭐

② 查找替换

快捷键 快捷键说明
Ctrl + F 在当前标签页中进行查找,还支持正则表达式⭐
F3 如果找到了多个查找结果,每调用一次就会跳到下一个结果,很方便哦
Shift + F3 是 F3 的反向操作,即每调用一次就会跳到上一个结果
Ctrl + R 在当前标签页中进行替换操作⭐
Ctrl + Shift + F 通过路径查找⭐
Ctrl + Shift + R 通过路径替换⭐

图示 说明
向上箭头 就是 快捷键【Shift + F3】,每调用一次就会跳到上一个结果
向下箭头 就是 快捷键【F3】,每调用一次就会跳到下一个结果
加号符号 把当前的高亮项加入到选中的列表中
减号符号 把当前的高亮项从选中的列表中移除
勾选符号 把所有的查找结果同时选中,这很适合批量操作
文本内的向上箭头 打开查询结果列表面板
两个框加一个向下箭头 更多选项
Match Case 是否大小写敏感
Regex 正则表达式
Words 匹配单词
x matches x 表示的是找到的记录数

④ 查看使用情况

快捷键 快捷键说明
Alt + F7 在当前项目中的使用情况,会打开一个使用情况面板
Ctrl + F7 在当前文件中的使用情况,找的内容会低亮显示
Ctrl + Shift + F7 在当前文件中的使用情况,找的内容会高亮显示
Ctrl + Alt + F7 打开使用情况列表⭐

④ 编译运行

快捷键 快捷键说明
Ctrl + F9 编译项目(如果之前有编译过,那么只会编译那些修改的类或者依赖的包⭐
Ctrl + Shift + F9 编译选中的范围(如果在某个类中,那么只会编译当前类)
Alt + Shift + F10 会打开一个已经配置的运行列表,让你选择一个后,再运行
Alt + Shift + F9 会打开一个已经配置的运行列表,让你选择一个后,再以调试模式运行
Shift + F10 立即运行当前配置的运行实例,这个在单元测试中特别好用⭐
Shift + F9 立即以编译模式运行当前配置的运行实例⭐
Ctrl + Shift + F10 按照编辑器绑定的文件类型,运行相关的程序。比如一个 html 页面,调用后,会直接打开一个浏览器

⑤ 调试

快捷键 快捷键说明
F8 跳到当前代码下一行⭐
F7 跳入到调用的方法内部代码⭐
Shift + F7 会打开一个面板,让你选择具体要跳入的类方法,这个在复杂的嵌套代码中特别有用
Shift + F8 跳出当前的类,到上一级⭐
Alt + F9 让代码运行到当前光标所在处,非常棒的功能⭐
Alt + F8 打开一个表达式面板,然后进行进一步的计算
F9 结束当前断点的本轮调试(因为有可能代码会被调用多次,所以调用后只会结束当前的这一次);如果有下一个断点会跳到下一个断点中⭐
Ctrl + F8 在当前光标处,添加或者删除断点
Ctrl + Shift + F8 打开当前断点的面板,可以进行条件过滤哦

⑥ 导航

快捷键 快捷键说明
Ctrl + N 打开类查询框⭐
Ctrl + Shift + N 打开文件查询框⭐
Ctrl + Alt + Shift + N 打开文本查询框
Alt + 右箭头/左箭头 跳到下一个/上一个编辑器标签
F12 如果当前在编辑窗口,触发后,会跳到之前操作过的工具栏上
ESC 从工具栏上,再跳回原来的编辑窗口,一般与 F12 配合使用
Shift + ESC 隐藏最后一个处于活跃状态的工具窗口
Ctrl + Shift + F4 同时关闭处于活动状态的某些工具栏窗口
Ctrl + G 跳转至某一行代码⭐
Ctrl + E 打开曾经操作过的文件历史列表
Ctrl + Alt + 右箭头/左箭头 在曾经浏览过的代码行中来回跳
Ctrl + Shift + Backspace 跳转到最近的编辑位置(如果曾经编辑过代码)
Alt + F1 打开一个类型列表,选择后会导航到当前文件或者内容的具体与类型相关的面板中
Ctrl + B 或 Ctrl + 鼠标左键 如果是类,那么会跳转到当前光标所在的类定义或者接口;如果是变量,会打开一个变量被引用的列表⭐
Ctrl + Alt + B 跳转到实现类,而不是接口⭐
Ctrl + Shift + I 打开一个面板,里面包含类代码
Ctrl + Shift + B 打开变量的类型所对应的类代码,只对变量有用
Ctrl + U 打开方法的超类方法或者类的超类,只对有超类的方法或者类有效
Alt + 上/下箭头 在某个类中,跳到上一个/下一个方法的签名上
Ctrl + ]/[ 移动光标到类定义的终止右大括号或者起始左大括号
Ctrl + F12 打开类的结构列表⭐
Ctrl + H 打开类的继承关系列表
Ctrl + Shift + H 打开某个类方法的继承关系列表
Ctrl + Alt + H 打开所有类的方法列表,这些方法都调用了当前光标所处的某个类方法⭐
F2/Shift + F2 在编译错误的代码行中来回跳
F4 打开当前光标所在处的方法或类源码
Alt + Home 激活包路径的导航栏
F11 把光标所处的代码行添加为书签或者从书签中删除⭐
Ctrl + F11 把光标所处的代码行添加为带快捷键的书签或者从快捷键书签中删除。
Shift + F11 打开书签列表⭐

Ctrl + N (打开类查询框)

键入类名的关键字,会自动出现相关的类,很强大

Alt + F1(打开一个类型列表)

模板设置

模板包含Live Templates 和 Postfix Completion
二者的区别: Live Templates 可以自定义,而 Postfix Completion 不可以

  1. Live Templates(实时代码模板)

配置一些常用代码字母缩写,在输入简写时可以出现你预定义的固定模式的代码,使得开发效率大大提高.

Java 中输入 sout 会出现 System.out.println();

  1. 已有的常用模板

举例
① psvm

psvm 可生成 main 方法

② sout

sout 可生成 System.out.println()

③ fori
fori:可生成 for 循环
iter:可生成增强 for 循环
itar:可生成普通 for 循环

④ list.for
list.for 可生成集合 list 的 for 循环
List list = new ArrayList();
输入: list.for 即可输出
for(String s:list){
}

⑤ ifn
ifn 可生成 if(xxx = null)
inn:可生成 if(xxx != null)
xxx.nn 或 xxx.null

⑥ prsf
prsf 可生成 private static final
psf 可生成 public static final
psfi 可生成 public static final int
psfs 可生成 public static final String

  1. 如果对已有的模板不习惯,可以修改

  1. 如果对已有的模板不习惯,也可以定义自己的模板,步骤如下

① 定义一个模板的组

② 在上一步定义的模板组下定义一个模板

③ 选择应用范围

关联数据库

  1. 关联数据库

IntelliJ IDEA 的 Database 最大特性就是对于 Java Web 项目来讲,常使用的 ORM 框架,如 Hibernate、Mybatis 有很好的支持,比如配置好了 Database 之后,IntelliJ IDEA 会自动识别 domain 对象与数据表的关系,也可以通过 Database 的数据表直接生成 domain 对象等等

  1. 常用操作

  • 图标 1:同步当前的数据库连接。这个是最重要的操作。配置好连接以后或通过其他工具操作数据库以后,需要及时同步。
  • 图标 2:配置当前的连接。
  • 图标 3:断开当前的连接。
  • 图标 4:显示相应数据库对象的数据
  • 图标 5:编辑修改当前数据库对象

版本控制

不管是个人开发还是团队开发,都离不开版本控制,IntelliJ IDEA也集成了版本控制工具。

注:IntelliJ IDEA 虽然默认对这些版本控制工具提供插件支持,但是还需要我们自己安装版本控制客户端滴

  1. Git是我们常用的版本控制工具,是目前世界上最先进的分布式版本控制系统(没有之一)。
    我们这里就以Git为例,说一说IntelliJ IDEA怎么配置和使用Git

① 下载和安装Git客户端

官网下载地址:http://git-scm.com/downloads

全部无脑下一步安装即可

默认安装完成后,右键出现下图所示图标即表示安装成功

安装完成后,还需要最后一步设置,在命令行输入:

# 注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址

② 关联 git.exe

③ 关联 GitHub 上的账户,并测试连接

④ 在 GitHub 上创建账户下的一个新的仓库作为测试

⑤ 从当前github 账号上checkout项目

获取GitHub上项目路径,并将项目路径填入其中

按照以上步骤,在GitHub上的项目即克隆到了本地。是不是很简单哦

⑥ Git常用操作

clone:拷贝远程仓库
commit:本地提交
push:远程提交
pull:更新到本地

上面只提了最最最常用的命令,如果你想更加深入的了解git,建议参考

廖雪峰的Git教程

注:即使我们没有使用任何版本控制工具,IntelliJ IDEA也为我们提供了历史版本查看功能

断点调试功能

  1. debug 模式设置

设置 Debug 连接方式,默认是 Socket。Shared memory 是 Windows 特有的一个属性,一般在 Windows 系统下建议使用此设置,内存占用相对较少

  1. 常用断点调试说明
图标 显示 说明
step over 进入下一步,如果当前行断点是一个方法,则不进入当前方法体内
step into 进入下一步,如果当前行断点是一个方法,则进入当前方法体内
force step into 进入下一步,如果当前行断点是一个方法,则进入当前方法体内
step out 跳出
resume program 恢复程序运行,但如果该断点下面代码还有断点则停在下一个断点上
stop 停止
view breakpoints 查看所有断点
  1. 条件断点

在实际项目中,我们会遇到这样一种场景。我们已经定位问题(bug)就出在这个循环里,但是确定不了循环到第几次的时候报错,
当循环次数比较少,是3次或5次的时候,我们可以一次一次的调试。但当循环次数是100次,甚至1000次呢?这个时候我们就需要用到条件断点了。

在循环里增加条件判断,能大大提高我们的效率

我们在需要设置断点的语句前单击,当出现红色断点时,右键出现如下图所示,即可加入条件。

debug程序,程序在i=10的时候停止

配置maven

  1. Java项目构成

在介绍maven 前,我们先了解下一个Java项目需要哪些东西。

  • 如果我们需要log4j,就需要吧log4j相关的jar包放到classpath中,如果我们需要fastjson,就需要把fastjson相关的jar包放到classpath中。这就是依赖包的管理
  • 我们要确定项目的目录结构。例如,src目录存放Java源码,resources目录存放配置文件,bin目录存放编译生成的.class文件
  • 我们还需要配置环境,例如JDK的版本,编译打包的流程
  • 需要对代码进行编译,才能够让项目在一个独立的服务器上编译、测试、部署
  1. maven 简介

这些工作难度不大,但是非常琐碎且耗时。如果每一个项目都自己搞一套配置,肯定是费时费力。我们需要的是一个标准化的Java项目管理和构建工具

Maven就是是专门为Java项目打造的管理和构建工具,Maven有以下功能

  • 提供了一套标准化的项目结构
  • 提供了一套标准化的构建流程(编译,测试,打包,发布……)
  • 提供了一套依赖管理机制
  1. Maven 项目结构

  1. Maven构建流程

  1. IntelliJ IDEA 配置Maven

  1. 新建Maven项目

① 新建项目

②选择Maven项目

③设置项目参数

④配置本地Maven设置

⑤初始化项目

⑥项目构建完成

  1. 添加第三方jar包

mysql 是我们日常开发中常用的数据库,这里我们以导入MySQL驱动包为例

①当我们执行App.java中代码时,由于没加mysql驱动包,所以会报如下错误

②修改pom.xml文件,添加如下内容

<dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.20</version>
</dependency>

注:dependency标签中的内容我们不用死记,我们只需要到http://mvnrepository.com/查询,然后复制即可

③ 等待驱动下载完成

④ 再次运行,成功

创建web项目并配置tomcat

  1. 新建maven web项目

① 创建项目

②选择Maven webapp格式

③填写项目参数

④ 配置本地Maven相关参数

⑤配置java源代码目录

maven web项目默认是没有java源代码目录的,所以需要手动创建,并设置其为源代码目录
右键main目录-> New->Directory->输入java->右键java->Mark Directory as-> Sources Root
这样就创建了存放java源文件的目录了

⑥ 新建servlet


package com.xiezhr;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;

@WebServlet(name = "HelloServlet")
public class HelloServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.getWriter().println("<h1>Hello Servlet! Hello xiezhr!</h1>");
        response.getWriter().println(new Date().toLocaleString());
    }
}

⑦修改web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>com.xiezhr.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>
</web-app>

⑧pom.xml添加servlet包依赖

<dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
</dependency>
  1. 配置tomcat

① 打开tomcat配置,并选择tomcat 路径

② 设置部署

③ 运行项目

④ 测试成功

本文转载于网络 如有侵权请联系删除

相关文章

  • 前端规范

    前言前端规范主要是为了让代码能有更好的可读性以及优雅性。不要为了规范而去规范,使用某些花里胡哨的写法,本质上是为了代码的维护性更强一些,所以才会制定规范来约束。主要针对vue2.0~其实我觉得vue2.0的options的写法是比较清晰的,在vue3.0去除了这些写法就需要一定的规范去让各个模块划分清晰一些,往react靠了,未来的趋势可能就是函数化编程,所以对于把控可维护性这块也需要去跟进,也可以配合ts以及eslint和各种插件去配合使用。主要针对以下方面推荐一些个人觉得比较好的写法以及规范等,现在放在这里一方面是方便自己阅读,还是就是分享给需要的人去参考一下,有一些是网上搜集的但是忘记出处了我会尽量标记出处,若觉得有问题或可改进的欢迎评论留言哦~推荐-Vue-Router写法推荐-Vue项目目录结构推荐-Vue实例选项顺序推荐-优雅引用字体推荐-200错误统一处理前后端分离接口规范前端工程工具链前端Git规范前端JS规范前端CSS规范1.推荐-Vue-Router写法推荐-Vue-Router写法 使用路由懒加载,实现方式是结合Vue异步组件和Webpack代码分割功能。 优点:

  • Linux操作系统,详解5个常用Linux终端命令

    Linux命令行提供了一种比图形界面使用更简单更轻松、跨版本的方法来完成常见的任务。今天我们与您分享12个让您震撼的Linux终端命令。1、有用的命令行快捷键常见的Linux键盘快捷键以下快捷键很有用,可以节省你的时间:CTRL+U:从光标处删除文本直到行首。CTRL+K:从光标处删除文本直到行尾。CTRL+Y:粘贴文本。CTRL+E:将光标移动到行尾。CTRL+A:将光标移动到行的开头。ALT+F:光标移动到后一个单词ALT+B:光标移动到前一个单词ALT+Backspace:Deletesthepreviousword.CTRL+W:剪切光标前面的字符至上一个空格处。Shift+Insert:将文本粘贴到终端中。为了说明上面的命令对我们有帮助,请查看下面的演示。sudoapt-getintallvlc该命令中存在拼写错误,为了使该命令起作用,需要更改intall才能进行安装。想象一下,光标在该行的末尾。有几种方法可以回到“install”一词来进行更改。您可以按两次ALT+B,这会将光标置于以下位置(由^符号表示):sudoapt-get^installvlc然后,按光标键并将s插

  • K8S中容器应用目录挂载数据卷后,就无法启动,报错权限问题

    背景使用中常会遇到,在不挂载数据卷(如PVC)时,容器就能正常运行,但是考虑到数据的持久化,把应用目录挂载到持久卷后,容器就无法启动,会报类似各种权限错误。示例此处以jenkins为例:未挂载数据卷:yaml如下,非关键字段已做删减apiVersion:apps/v1 kind:Deployment metadata: name:jenkins namespace:default spec: selector: matchLabels: k8s-app:jenkins qcloud-app:jenkins template: metadata: labels: k8s-app:jenkins qcloud-app:jenkins spec: containers: -image:jenkins:2.60.3 imagePullPolicy:Always name:jenkins复制结果:容器正常启动运行:挂载数据卷:yaml如下,非关键字段已做删减apiVersion:apps/v1 kind:Deployment metadata: labels: k8s-app:jenkins q

  • 实战经验:Oracle DG 的归档缺失修复

    客户某天反馈说:”DG库自0221以来就已经不同步了,请核查。“于是我远程登录进行查看。故障检查检查归档同步情况一、查看数据库的情selectdatabase_role,flashback_on,open_mode,current_scnfromv$database DATABASE_ROLEFLASHBACK_ONOPEN_MODECURRENT_SCN --------------------------------------------------------------------- PHYSICALSTANDBYNOREADONLYWITHAPPLY16657544972059复制二、查看归档的最大线程与最大接收的归档情况。selectthread#,max(sequence#)fromv$archived_loggroupbythread#; 生产库: SQL>selectthread#,max(sequence#)fromv$archived_loggroupbythread#; THREAD#MAX(SEQUENCE#) ------------------

  • 从 O(NlogN) 到 O(N) 的优化:「二分滑动窗口」& 「双指针」 ...

    题目描述这是LeetCode上的「1438.绝对差不超过限制的最长连续子数组」,难度为Medium。给你一个整数数组nums,和一个表示限制的整数limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于limit。如果不存在满足条件的子数组,则返回0。示例1:输入:nums=[8,2,4,7],limit=4 输出:2 解释:所有子数组如下: [8]最大绝对差|8-8|=0<=4. [8,2]最大绝对差|8-2|=6>4. [8,2,4]最大绝对差|8-2|=6>4. [8,2,4,7]最大绝对差|8-2|=6>4. [2]最大绝对差|2-2|=0<=4. [2,4]最大绝对差|2-4|=2<=4. [2,4,7]最大绝对差|2-7|=5>4. [4]最大绝对差|4-4|=0<=4. [4,7]最大绝对差|4-7|=3<=4. [7]最大绝对差|7-7|=0<=4. 因此,满足题意的最长子数组的长度为2。 复制示例2:输入:nums=[10,1,2,4,7,2],limit=5 输出:4

  • python 自定义优先级队列

    priorityQueueimportheapqclassPriorityQueue: definit(self): self._queue=[] self._index=0defpush(self,item,priority): heapq.heappush(self._queue,(-priority,self._index,item)) self._index+=1 defpop(self): returnheapq.heappop(self._queue)[-1]复制push,popclassItem: ...definit(self,name): ...self.name=name ...defrepr(self): ...return'Item({!r})'.format(self.name) ... q=PriorityQueue() q.push(Item('foo'),1) q.push(Item('bar'),5) q.push(Item('spam'),4) q.push(Item(

  • React 16 Roadmap

    一.概览从功能上看,React16规划中有4个关键特性:ConcurrentModeHooksSuspenseforCodeSplittingforDataFetchingforSSRModernizingReactDOM其中,ConcurrentMode(之前叫AsyncRendering)无疑是最值得期待的东西,或将引领变革(合作式调度机制可能泛化成为浏览器能力)单从形式上看,Hooks是对函数式组件的增强,使之能与类组件平起平坐,甚至(期望)取而代之。实质意义在于进一步将更多的函数式思想引入到前端领域,比如Effect、Monad等。算是在提出v=f(d)的UI层函数式思路之后,在这条路上的进一步探索Suspense在CodeSplitting场景已经露过面了,主要贡献在于用户体验与开发体验上。DataFetching的场景类似,在提升开发体验(统一数据请求及缓存方式)的同时,兼顾用户体验(显示Loading)。而SSR场景下的Suspense能力则与前两种不同,考虑更多的是页面加载性能与用户体验之间的平衡,期望通过服务端渲染与客户端渲染的配合(Hydration),让页面尽快达

  • 创建角色随机名字(mysql抽取随机记录)和mysql游标的使用

    最近在开发中遇到了一些问题,在此记录一下解决的方法,已作备忘。 1、现在创建游戏角色的时候,基本上都是支持角色名字随机的,以前此功能在客户端用代码实现,然后向服务器请求并验证,后来发现有时候连续几次都失败,所以改成在服务器实现。实现方法主要考虑使用mysql随机查询记录,在网上查了很多方案,然后用在了我们游戏中。实现方案是,将所有随机名字都插入到一张表中,然后从中随机取一条当前角色表中没有出现过的名字。BEGIN DECLARErandnumintDEFAULT0; SELECTFLOOR(RAND()*309034)INTOrandnum; SELECTrnameINTO_nameFROM`names`WHERE((_sex=sex)AND (rnamenotin(SELECTNameFROMlongwen.playerWHERE_world=WorldID))AND (id>randnum))LIMIT1; setreturnvalue=0; END复制 2、接运营的需求,有时候因为服务器维护,需要给所有玩家送一些东西,这时候涉及离线玩家,所以我们

  • 如何优雅地发朋友圈?你需要这款简洁好看的小程序

    小程序体验师:梁爽春雨夏雷秋霜冬雪,朝霞落日晨雾晚风。普通的一天中,我们能看到各种各样的风景。人来人往,相遇离别,每一天,都能产生新的故事和回忆。这些故事和回忆,曾让人怦然心动的风景和小情绪,记在心里终究逐渐模糊,写在纸上又嫌太过繁琐。那么,为何不写成日签呢?今天,知晓程序(微信号zxcx0101)推荐的小程序,就可以让你用一张图片两句签名,生成一张日签。用简单的记录,抓住平凡的每一天里的喜怒哀乐。关注「知晓程序」公众号,微信后台回复「0109」,一张图教你玩转小程序。生成日签打开小程序,就可以看到它提供的4个模板。这4个模板包括两个带图版本,两个纯文字版本。每个模板都会给出示例,用户可以根据不同的模板生成不同布局的日签。模板底部有缩略图,点击缩略图可以直接打开实例图片。选定了模板之后,点击模板任意位置就可以进入编辑页面,编辑自己的心情日签了。左边是带图版的编辑页面,右边是纯文字版的编辑页面。按照提示填好文字,写上落款,上传图片,一张文艺好看的心情日签就生成了。保存与分享编辑完毕后,点击生成图片,就会为您生成一张独属于自己的心情日签。生成页面会停在这里,如果预览效果不满意,可以退回上一

  • FreeMark学习(二)

    (1)用户定义指令宏和变换器变量是两种不同类型的用户定义指令,它们之间的区别是宏是在模板中使用macro指令定义,而变换器是在模板外由程序定义,这里只介绍宏基本用法 宏是和某个变量关联的模板片断,以便在模板中通过用户定义指令使用该变量,下面是一个例子:<#macrogreet> <fontsize="+2">HelloJoe!</font></#macro>  作为用户定义指令使用宏变量时,使用@替代FTL标记中的#<@greet></@greet>如果没有体内容,也可以使用:<@greet/>参数在macro指令中可以在宏变量之后定义参数,如:<#macrogreetperson> <fontsize="+2">Hello${person}!</font></#macro> 可以这样使用这个宏变量:<@greetperson="Fred"/>and<@greetperson="

  • uni-app小程序滑动事件

    <viewclass="relative"@touchmove="handletouchmove"@touchstart="handletouchstart"@touchend="handletouchend"> </view> 复制 data(){ return{ flag:0, text:'', lastX:0, lastY:0 } } 复制 methods:{ handletouchmove:function(event){ //console.log(event) if(this.flag!==0){ return; } letcurrentX=event.touches[0].pageX; letcurrentY=event.touches[0].pageY; lettx=currentX-this.lastX; letty=currentY-this.lastY; lettext=''; this.mindex=-1; //左右方向滑动 if(M

  • 软工作业-wc(java实现)

    WC(源程序特征统计程序) githud地址:https://github.com/705393356/wc.git 一、PSP表-预估耗时 PSP2.1 PersonalSoftwareProcessStages 预估耗时(分钟) Planning 计划 60 ·Estimate ·估计这个任务需要多少时间 60 Development 开发 560 ·Analysis ·需求分析(包括学习新技术) 10 ·DesignSpec ·生成设计文档 30 ·DesignReview ·设计复审(和同事审核设计文档) 30 ·CodingStandard ·代码规范(为目前的开发制定合适的规范) 10 ·Design ·具体设计 30 ·Coding ·具体编码 360 ·CodeReview ·代码复审 30 ·Test ·测试(自我测试,修改代码,提交修改) 60 Reporting 报告 100 ·TestReport ·测试报告 60 ·SizeMeasurement ·计算工作量 10 ·Postmortem&

  • 什么样的项目适合自动化测试

    ①需求稳定,不会频繁变更 自动化测试最大的挑战就是需求的变化,而自动化脚本本身就需要修改、扩展、debug,去适应新的功能,如果投入产出比太低,那么自动化测试也失去了其价值和意义; 折中的做法是选择相对稳定的模块和功能进行自动化测试,变动较大、需求变更较频繁的部分用手工测试; ②多平台运行,组合遍历型、大量的重复任务 测试数据、测试用例、自动化脚本的重用性和移植性较强,降低成本,提高效率和价值; ③软件维护周期长,有生命力 自动化测试的需求稳定性要求、自动化框架的设计、脚本开发与调试均需要时间,这其实也是一个软件开发过程,如果项目周期较短,没有足够的时间去支持这一过程,那自动化测试也就不需要了; ④被测系统开发较为规范,可测试性强 主要出于这几点考虑:被测试系统的架构差异、测试技术和工具的适应性、测试人员的能力能否设计开发出适应差异的自动化测试框架;

  • Redis是单线程的,但Redis为什么这么快?

    近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”、什么是“热数据和冷数据”,复杂一点的会问到缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题,这些看似不常见的概念,都与我们的缓存服务器相关,一般常用的缓存服务器有Redis、Memcached等,而笔者目前最常用的也只有Redis这一种。 如果你在以前面试的时候还没有遇到过面试官问你《为什么说Redis是单线程的以及Redis为什么这么快!》,那么你看到这篇文章的时候,你应该觉得是一件很幸运的事情!如果你刚好是一位高逼格的面试官,你也可以拿这道题去面试对面“望穿秋水”般的小伙伴,测试一下他的掌握程度。 好啦!步入正题!我们先探讨一下Redis是什么,Redis为什么这么快、然后在探讨一下为什么Redis是单线程的? 一.Redis简介 Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和消息中间件。 它支持多种类型的数据结构,如字符串(String),散列(Hash),列表(List),集合(Set),有序集合(SortedSet或者是ZSet)与范围查询,Bitmaps,H

  • 年中总结

    一年过去一半了,也有半年不回家了,25号就回家了,刚订好票。这半年,总结一下吧。 6月的考试:      ——痛苦 这学期最终果然还是挂了一科。数字逻辑,呵呵,没什么可说的,本来就没有一天认真看过书,实在对这货没兴趣。 别的科目。 概率论,靠着考前一天多的通宵+运气+RP+老师比较好,最终竟然有81分……就我这个学习态度……囧 数据结构,本来挺重要的一门课,但老师超水,貌似我上过的课加一块也就差不多七八节的样子……老师水,最后也有80 计算理论,本来也很有深度的一个课程,很抽象,很偏重理论,博士教的,呵呵>_<反正我是没怎么学,靠着考前一晚上通宵+运气+RP+%&@最终竟然也有80。。没什么说的。 高级英语,这学期真的没学英语啊,都是水过去的啊,囧,75分,很满足了其实。以后就没有英语课了…… 西班牙语,一然酱帮忙选上的,挺不错的,只是貌似没有很多时间学的样子……最后老师给开卷,78没挂就行了 体育,一个学分,哈哈。这个挺得意的,虽然没打过篮球,但还是考试的时候RP爆发,3步上篮全场来回两趟竟然跑了27秒!!也就是大概95分的成绩,我自己都惊呆了,哎,RP爆发没办法

  • Mayor&#39;s posters

    Mayor'sposters 线段树+离散化 将海报覆盖的区间在线段树中进行标记,最后统计存在于树中的海报类型 由于本题的数据范围比较大,需要对坐标进行离散化。之后再递归的遍历每一个节点,将存在的标记存放到set中,最终set中元素的数量就是海报的类型 注意: 离散化后,区间之间的相对宽度会发生变化,比如[1,10000]离散化后,变成[1,2],显然后者的覆盖范围要远小于前者。这点要注意,所以格外添加\(l+1\)和\(r+1\) 除了建树的过程外,对于访问子节点的操作都需要下放懒标记,所以在修改和询问时要push_down #include<iostream> #include<algorithm> #include<set> #include<vector> usingnamespacestd; typedefpair<int,int>PII; constexprintN=2e5+100; structNode{ intl,r; intt; }tr[N*4]; intn,g[N],cnt; vector<

  • 二叉树,平衡树,2-3树,红黑树

    二叉树(BST) 二叉树中,将比父结点大的数放在右结点,比父结点小的数放在左结点,查找时只需要将其跟父结点对比,大则进入右边,小则进入左边,依次往下; 但是数据本身是有序的,就导致查询跟链表一样,查询深度太深,效率低下,所以后面引出了平衡二叉树,降低层次。 平衡树(AVL) 对二叉树的改进,插入删除的时候,保证每个结点对应的左子树和右子树的高度(结点深度)差小于等于1; 拿百度百科的图片当例子 a中,5的平衡因子= 左子树深度3- 右子树的深度2=平衡因子1,结果为平衡; b中,3的平衡因子=左子树深度2-右子树的深度4=平衡因子-2,结果为不平衡; 如果超过了就对结构平衡改造(旋转结点),以此来达到树平衡,这样我们在查找的时候就可以按照二分查找来检索,也不会出现退化成链表的情况; 因为平衡树要求每个结点的左子树和右子树的高度差至多等于1,导致需要频繁通过左旋和右旋来进行调整,使性能大打折扣,于是就有了红黑树。 2-3树 2-3数是一种平衡的多路查找树,跟二叉树规则有点像; 结点可以存放一个或两个元素,结点要么是有3个子结1个两元素的根结,要么是2个子结1个单元素

  • windows命令行工具导出系统日志——wevtutil

    前言 当拿到windows的shell但是没有图形化界面时(如cs的shell、msf的shell、命令执行的shell等),需要查询日志却无法使用日志查看器,可以使用wevtutil工具导出日志文件。 wevtutil工具常用命令 列出所有已注册的事件日志 C:\>wevtutilel复制 将System日志导出到文件C:\System_log.evtx C:\>wevtutileplSystemC:\System_log.evtx复制 导出远程桌面日志到C:\rdp_log.evtx C:\>wevtutileplMicrosoft-Windows-RemoteDesktopServices-RdpCoreTS/OperationalC:\rdp_log.evtx复制 在应用日志中的最后100个条目中搜索ID为1704的事件 C:\>wevtutilqeApplication/q:"Event/System/EventID=1704"/c:100/f:text 复制  

  • 技术部新年开工第一场会议

    今天是2018年过完年后第一天上班,终于经过了2017年的探索后,技术部开始了新的工作部署。 作为前端开发工作者,我的工作基本是不变的,那就是撸代码。 不过在撸代码的同时,也要学习一些其他的东西,比如公司架构和开发流程,代码管理,项目部署等知识,毕竟不想当将军的士兵不是好士兵。 技术部基本架构: 技术总监(1人) 技术副总监(1人)、产品经理(3人分别对接三个开发小组) 开发 -资金端开发小组(技术负责人+前端2人、后端3人+app2人) -资产端开发小组(技术负责人+前端1人、后端3人+app2人) -erp开发小组(技术负责人+前端1人、后端3人) -测试小组(测试主管+测试专员2人) -ui小组(ui设计师2人) 以上就是公司的基本架构。 公司开发流程: 一、技术副总监负责项目开发时间的整体调控。 二、产品经理和副总监对技术总监负责,产品经理和运营部所对接需求后,需要和相关小组负责人、测试总监对接,然后技术负责人确定是否可以开发,项目排期等,测试总监确定测试排期,出测试用例。此时产品经理对项目具有决定权(技术负责人可以提出异议)。 三、确定排期后,副总监负责项目的排期监督。项

  • IntelliJ IDEA快捷键

    说明IntelliJIDEA的便捷操作性,快捷键的功劳占了一大半,对于各个快捷键组合请认真对待。IntelliJIDEA本身的设计思维是提倡键盘优先于鼠标的,所以各种快捷键组合层出不穷,对于快捷键设置也有各种支持,对于其他IDE的快捷键组合也有预设模板进行支持。关于各个快捷键的频率分类上可能每个人都有各自的看法,下面的整理也只是以我个人的使用习惯来划分的。对于下面各个快捷键的使介绍描述也许用我个人语言翻译起来不够准确或是不全面,且在不同的文件类型上按出来的效果也可能结果不太一样,所以 强烈建议 你自己把各个快捷键都亲自操作下体会下各个快捷键的实际用法。Ctrl快捷键介绍Ctrl+F在当前文件进行文本查找 (必备)Ctrl+R在当前文件进行文本替换 (必备)Ctrl+Z撤销 (必备)Ctrl+Y删除光标所在行或删除选中的行 (必备)Ctrl+X剪切光标所在行或剪切选择内容Ctrl+C复制光标所在行或复制选择内容Ctrl+D复制光标所在行或复制选择内容,并把复制内容插入光标位置下面 (必备)Ctrl+W递进式选择代码块。

  • Python 自动化处理 Yaml 文件

    1.Yaml是什么 Yaml是一种简洁的非标记语言。 Yaml是一个可读性高,用来表达数据序列化的格式。 Yaml以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁。 Yaml特别适合用来表达或编辑数据结构、各种配置文件、文件大纲等。   2.Yaml文件规则 区分大小写; 注释标识为#; 使用缩进表示层级关系; 使用空格键缩进,而非Tab键; 缩进的空格数目不固定,只需要相同层级的元素左侧对齐; 文件中的字符串不需要使用引号标注,但若字符串包含有特殊字符则需用引号标注;   3.Yaml文件数据结构Yaml文件内容—示例1: China: family: name:Smile_Family parents: -John -Jane children: -Lily -Frank address: province:BeiJing region:chaoyang city:BeiJing Yaml文件内容—示例2: China: family:{name:Smile_Family,parents:[John,Jane],children:[L

相关推荐

推荐阅读