IntelliJ IDEA 2018.3新建SpringBoot项目的流程如下:
分类: IntelliJ IDEA
IDEA 全称 IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手,代码自动提示,重构,J2EE支持、各类版本工具(git,svn,github等),JUnit,CVS整合,代码分析,创新的GUI设计等方面的功能可以说是超常的。IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。它的旗舰版本还支持HTML,CSS,PHP,MySQL,Python等。免费版只支持Java等极少数语言。
macOS Catalina(10.15.4)/IntelliJ IDEA 2018.3/Tomcat 9.0.33/Maven项目调试报错"Caused by: java.util.zip.ZipException: zip file is empty"
macOS Catalina(10.15.4)/IntelliJ IDEA 2018.3/Tomcat 9.0.33/Maven项目调试时报错,这个项目以前是可以正常调试的,一段时间之后,就不能正常调试之下了。
Ubuntu 16.04下创建IntelliJ IDEA图标快捷方式
一般在安装目录下面或者桌面上创建文件,命名为:idea.desktop
使用vim
编辑该文件
内容如下:
接着给予这个文件执行权限
以后双击这个图标,就可以直接启动IntelliJ IDEA
了。
IntelliJ IDEA 2016.2使用Spring 4.3.1.RELEASE,sockjs-1.1.1,stomp-1.2搭建基于Tomcat-7.0.68的WebSocket应用
接着上文IntelliJ IDEA 2016.2使用Spring 4.3.1.RELEASE搭建基于Tomcat-7.0.68的WebSocket应用
上文的最后我们说到,WebSocket
是需要定时心跳的,否则会在一段时间后自动断开连接,而更重要的是,不是所有的浏览器都支持WebSocket
,早期的IE 10
之前的版本就是不支持的,而这一部分的设备其实是不算少的,而sockjs
的出现,恰恰好来解决了这个问题。对于不支持WebSocket
的浏览器,sockjs
使用了多种方式来兼容这种情况,包括使用长轮询等方式,Spring
更是内建支持这种方式。
下面我们看如何在上篇文章的基础上,增加对于sockjs
的支持。
首先是STOMP
的文档官网地址 http://stomp.github.io/
代码的地址为https://github.com/jmesnil/stomp-websocket,项目下面的lib/stomp.js
就是我们想要的文件。也可以本站下载stomp.js.zip
接下来sockjs
的代码地址https://github.com/sockjs/sockjs-client,项目下面的dist/sockjs-1.1.1.js
就是我们想要的文件。也可以本站下载sockjs-1.1.1.js.zip
接下来我们把下载到的文件放到我们工程目录下面的web
->resources
->javascript
目录下面,如下图:
接下来,添加我们需要的com.fasterxml.jackson.core:jackson-annotations:2.8.1
,com.fasterxml.jackson.core:jackson-core:2.8.1
,com.fasterxml.jackson.core:jackson-databind:2.8.1
这三个jar
包,增加的方式参照上一篇中对于javax.servlet:javax.servlet-api:3.1.0
的操作方法。与上一篇的操作不同的是,这次添加的三个jar
包,都要放到编译完成后的War
包中。最后的结果如下图:
下面,我们开始进行代码的操作,我们在上篇文章中的src
->Tools
->WebSocket
中新增两个源代码文件SockJsController.java
,WebJsSocketConfig.java
.如下图:
其中的代码如下:
SockJsController.java
WebJsSocketConfig.java
然后修改WebSocket.jsp
最后,我们修改web
->WEB-INF
->web.xml
,在其中增加
修改后的最终结果如下:
参考链接
使用junit测试IntelliJ IDEA 2016.2建立的maven项目
在maven project
项目中引入junit
插件并不困难,只需要在pom.xml
中配置好依赖包即可(IDE
环境下,依赖项会自动生成)。另外,test
类文件需要按照/src/main/java/
的文件结构(main
改为test
)。
pom.xml
如下图:
IntelliJ IDEA 2016.2使用Spring 4.3.1.RELEASE搭建基于Tomcat-7.0.68的WebSocket应用
先参照 IntelliJ IDEA 2016.1建立Strut2工程并使用Tomcat调试建立新的工程,一步一步操作,包括最后引用Spring
框架部分。
经过上面的操作,Spring-WebSocket
的包应该已经被默认引入了,如下图所示:
这就意味着我们已经不需要再进行过多的额外配置了。
接下来,我们在src
->Tools
下面新建一个WebSocket
的目录,里面创建三个Java
文件。如下图:
每个文件中的代码如下:
SystemWebSocketHandler.java
WebSocketConfig.java
WebSocketHandshakeInterceptor.java
由于我们使用了Struts2
导致我们的网络请求优先被Struts2
的拦截器拦截,而Struts2
又处理不了websocket
请求,结果直接返回了404
错误。因此我们需要替换掉默认的在web.xml
中定义的Struts2
的拦截器,要求Struts2
不处理websocket
请求。
我们在src
->Tools
下面新建一个Filter
的目录,下面创建一个名为StrutsPrepareAndExecuteFilterEx.java
的源代码文件,如下图:
具体的代码如下:
StrutsPrepareAndExecuteFilterEx.java
这时候的代码是无法编译通过的,原因是依赖的javax
的Jar
包不存在。此时,我们需要手工引入javax.servlet:javax.servlet-api:3.1.0
这个Jar
包。如下图:
还要注意,刚刚添加进入的javax.servlet:javax.servlet-api:3.1.0
这个Jar
包,我们只在编译期间使用,在运行时候,使用Tomcat
自己实现的那个同名Jar
包。也就是这个包是个Provided
,而不是Compile
关系,具体如下图:
接下来,修改web.xml
指定Struts2
的拦截器为我们定义的拦截器
修改为
经过上面的修改后,依旧是没办法进行网络访问的,原因是web.xml
中的Spring
拦截器并没有拦截WebSocket
的数据请求。
修改为
注意增加的
下一步,配置Spring
的配置文件web
->WEB-INF
->dispatcher-servlet.xml
增加配置信息类的扫描目录包含我们刚刚创建的src
->Tools
->WebSocket
的目录(缺少这一步会导致我们通过注解实现的配置信息类没有被自动加载,导致无法访问),修改后的内容如下:
最后,调用的页面的代码
WebSocket.jsp
最后的客户端显示效果如下图所示:
注意:如此创建的WebSocket
是会在两三分钟后主动断开连接的,原因在于WebSocket
需要周期性的发送心跳报文来维持连接。后续我们会尝试使用sockjs
来实现自动发送心跳的逻辑。
具体的sockjs的接入方法,参考IntelliJ IDEA 2016.2使用Spring 4.3.1.RELEASE,sockjs-1.1.1,stomp-1.2搭建基于Tomcat-7.0.68的WebSocket应用
IntelliJ IDEA2016.2使用Gradle创建Java Web应用
1.如下图,第一步很简单的,File
->New
->Project
2.如下图,完成第一步后,会弹出这样一个窗体,然后在左边栏目找到Gradle
,然后在右边勾选Java
和Web
两个选项,最后点击Next
。
3.如下图,到了输入GroupId
和AcrtifactId
窗口了,对于这两个名字的解释
ArtifactID就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。
一般来说,包的命名习惯是域名的反过来,加个公司或者个人的名称吧,个人习惯。www.demo.com -> com.richard.demo; 那么都知道,test是项目名称,也是在最后面的,所有项目组的唯一标识符(groupId):com.richard, 项目的唯一标识符(ArtifactId)demo.
然后点击Next
。
4. 如下图,这个页面,刚进来默认选择的是Use default gradle wrapper(recommended)
, 我不选择这个是因为我本地有装Gradle
,所有不需要是用它默认的,如果选择它,那么创建项目之后,它就会去自动下载Gradle
,然后配置好,下载过 程一般都很慢,至少我在我电脑上很慢。所有我选择的是Use local gradle distribution
,。然后上面还有一个勾选,就是自动创建空的根目录文件夹,如果不选择,创建完的项目会没有Java
文件夹,所以勾选,让它自动创建吧,继续点击Next
。
5. 如下图,它默认的就是ArtifactId
的名字,项目的唯一标识嘛,然后module name
,如果不清楚应该填什么,可以按照默认的无所谓,点击Finish
,创建就这样完成了。
6.创建完成之后,如果你之前没有配置Tomcat
的话,是没办法运行的,所以也需要配置Tomcat
,如下图, 左侧是成功创建的项目文件目录,如果之前没有勾选Create directories for empty content roots automatically
, 那么就不会生成java
和resource
这个两个孔文件夹。这不的重点是点击Edit configuration
。
6. 弹出如下图配置框,点击左上角加号,往下滚动找到Tomcat Server
->Local
,点击Local
.
7. 如下图,弹出配置框,默认是配置Server
属性,输入这个配置的名字,name
,可以取任意的名字,点击Configure
选择本地Tomcat
的路径,都配置好了直接点击OK
就可以运行了。
8.如下图,然后选择Server
旁边的Deployment
, 页面之后,点击加号,在弹出的页面选择名字更长的那个,也就是后面有(exploded
)的那条,点击OK
。
9.如下图,在右侧输入Application context
的名字,这个对应就是等会儿运行时,默认路径(http://localhost:8080/demo/)中的demo, 所以如果你不配置这项,它的默认路径将会是(http://localhost:8080/)这样的。最后点击Apply
, 再点击OK
.
10.倒数第二步了,如下图,打开index.jsp
页面,长方形圈出来的是系统默认生成的,不用管,可以删掉,然后圆圈的是我自己写的。我只是为了让你知道,jsp页面长啥样子的,免得你看到它,以为是生成错文件了,点击有上角的运行按钮。
11.最后一步,见证如下成果。
参考链接
IntelliJ IDEA 2016.1.2建立Struts2+Spring+Hibernate+H2数据库项目
前言
参照IntelliJ IDEA 2016.1建立Strut2工程并使用Tomcat调试建立了项目后,然后按照IntelliJ IDEA 2016.1.1的Struts2项目中引入Junit4.12单元测试,引入Junit到项目之后,开始引入Hibernate
并且使用H2
作为数据存储,完成一个比较完整的示例服务器。
简单介绍一下H2
嵌入式数据库
H2
是一个短小精干的嵌入式数据库引擎,主要的特性包括:
- 免费、开源、快速;
- 嵌入式的数据库服务器,支持集群;
- 提供
JDBC
,ODBC
访问接口,提供基于浏览器的控制台管理程序; Java
编写,可使用GCJ
和IKVM.NET
编译;- 短小精干的软件,
1M
左右。
几个嵌入式数据库的对比:
实战
1.引入H2数据库
点击工程的"Project Structure
"图标,如下图所示:
在弹出的界面中根据顺序,依次选择,选择从Maven
服务器下载
在弹出的界面中根据顺序依次操作,点击搜索图标之后,要等待比较长的一段时间,才能看到下面的OK
按钮可以点击。目前H2
最新的版本是1.4.191
,因此输入"com.h2database:h2:1.4.191
"。详细操作如下图:
点击OK
按钮,关闭窗口后,稍等,会发现出现一个Problems
的提示,点击这个提示列表,如下图所示:
完成后点击OK
按钮关闭界面。
2.引入Hibernate框架
切换工程的视图到"Project
"模式下
项目上面右击鼠标,选择"Add Framework Support ...
"菜单,如下图:
在弹出的界面中选择"Hibernate
",如下图所示
点击后,出现下载进度,等待进度完成,如下图:
下载完成后,再次点击工程的"Project Structure
"图标,如下图:
同样在出现的界面中修复提示的Problems
,如下图:
增加"Hibernate
"配置文件,点击工程的"Project Structure
"图标,如下图:
增加"Hibernate
"配置文件,如下图:
选择文件的路径,此处我们使用默认路径,点击OK
即可。
此时我们点击工程目录,会发现,已经新增了一个名字为hibernate.cfg.xml
的配置文件,如下图:
3.配置Hibernate与H2数据库通信
按下面所示的修改hibernate.cfg.xml
文件,如下:
此时会提示我们,找不到Simulator.Hibernate.Model.Visitor
这个类,因此我们创建这个类,如下图所示:
三个文件的源代码如下:
Visitor.Java
中的代码如下:
代码解释一下,@Entry
,@Table
的注解来告知Hibernate
,这个是个数据库的表配置类,其中的每个成员变量对应数据库表的字段。
如下的注解
表示id
为整个表的自增主键。
VisitorDao.Java
中的代码如下,这个文件提供了访问数据的接口定义:
VisitorDaoImpl.Java
中的代码如下,这个文件对VisitorDao
中定义的接口进行了实现:
这部分的代码需要着重解释一下
这个语句,注意,这个语句中的"from Visitor"
为Visitor.Java
中定义的类的名称,由Hibernate
内部进行变量,表之间的对应。
如上操作之后,就可以在任意的Action
中通过调用VisitorDaoImpl
实现对于数据库的写入,查询了。
参考链接
IntelliJ IDEA 2016.1.1的Struts2项目中引入Junit4.12单元测试
使用IntelliJ IDEA 2016.1建立Strut2工程并使用Tomcat调试建立项目后,想引入Junit进行TDD的开发,总结如下:
1.点击工程右上方的"Project Structure
"图标
2.在弹出的界面中的左侧选择"Libraries
",然后如下图所示,按照编号的顺序,依次点击,输入数据。注意,如果此时"OK
"按键是灰色的,那么需要点击右侧的放大镜图标,让IntelliJ IDEA
去服务器上搜索一下,等他搜索完成了,那么下面的"OK
"按键自然是可以点击的了。
3.点击"OK
"按键
4.此时发现提示存在一个"Problem
",点击然后按照下图展示修复这个问题。
点击"OK
",关闭这个页面。
5.在工程的"src
"目录下面新建名为"test
"的目录,他的子目录与源代码的目录相同即可,IntelliJ IDEA
会自动把这个目录当作单元测试的目录,如下图所示:
测试代码如下:
然后右击测试文件,会出现如下图的菜单选项
有时候他不会出现这些菜单,那说明还没有测试函数,添加一个空的@Test
测试函数就可以了,比如下面的样子:
也可以使用JunitGenerator V2.0
这个插件来自动生成单元测试代码。
打开IntelliJ IDEA
工具,Alt+Ctrl+S
,弹出窗口如下:
在文本框中输入Plugins
进行插件搜索设置。
点击按钮,从插件资源库中安装新的插件。
从插件资源库中搜索JunitGenerator V2.0
版本,点击右侧的Install
按钮.
安装完成后,点击"Restart IntelliJ IDEA"重启IntelliJ IDEA。
现在可通过此工具自动完成test
类的生成了,在需要进行单元测试的类中Alt+Insert
生成的自动测试代码如下图所示
IntelliJ IDEA 2016.1建立Strut2工程并使用Tomcat调试
IntelliJ IDEA 2016.1
建立Strut2
工程的步骤如下:
1.从菜单中选择新建工程:
2.在弹出的窗口中,左侧的列表中,选择"Java
",在右侧的"Project SDK
"中指明需要的Java SDK
的版本,目前要求是1.8版本的,在下面的"Additional Libraries and Frameworks
"中找到"Struts 2
",并选中,同时选中"Web Application
"。
3.点击下面的"Next
"按钮。
4.等待IntelliJ IDEA
下载完成必须的插件。点击左侧的"Project
"边栏,之后可以到如下界面.
点击右侧的"Project Stucture
"按钮,如下图:
修复存在的问题:
点击后出现的界面如下:
在弹出的菜单中,选择"Put into /Web-INF/lib
"。
配置完成后的界面如下:
点击"OK
",关闭窗口。
5.编辑配置信息"Edit Configurations
"
6.在弹出的界面中点开右侧的"+"符号,也可以点击左侧顶部的"+"号。
7.在弹出的界面中,一直下拉,找到"Tomcat Server
",点击展开,选择"Local
"
8.下载并安装Tomcat 9
Windows下面,建议安装 "32-bit/64-bit Windows Service Installer
"
9.安装最新的 Java SE Development Kit
目前最新的版本是8u73
。保证电脑上面是最新的,如果使用JDK 7
的话,会由于Tomcat
的版本号太高导致在调试的时候报告如下错误:
这个错误的原因是由于JDK 1.7
是默认没有包含JMS
服务的,导致Idea
通过JMS
跟Tomcat
通信的时候失败。
10.设置Tomcat Server
配置完成后的界面显示如下:
此时底部提示"Warning No artificts configured
",点击底部的"Fix
"按钮。
出现的窗口中自动帮我们加入了"Tools:war exploded
"项目,点击下面的"Apply
"按钮后,点击"OK
"关闭设置页面。
11.调试,点击主界面上面的调试图标,即可进入调试,此时会在默认的浏览器上打开网页。
最后,浏览器上出现如下画面,说明设置成功。
12.创建一个简单的Stucts2
的MVC
例子----TimeConvert
(1)先创建一个Model
类来存放数据
首先,在src
目录上鼠标右击,选择"New
"-> "Java Class
"并在对话框中输入名字"Tools.Model.TimeConvertStore
",点击"OK
"。
里面的代码如下:
这个Model
类的public set
和get
方法允许访问private convertTime
字符串属性,Struts 2
框架需要将这个对象按照JavaBean
方式暴露给View(TimeConvert.jsp)
。
(2)创建View
页面来显示Model
类里存储的convertTime
.
在web
目录上鼠标右击,选择"New
"-> "File
"并在对话框中输入名字"TimeConvert.jsp
",点击"OK
"新建一个TimeConvert.jsp
的jsp
页面.
代码如下:
页面中的taglib
告诉Servlet
容器这个页面将使用Struts 2
的tags
并且将它们用s
来表示。
s:property
的tag
标签返回调用TimeConvertAction controller class
的getTimeConvertStore
方法后的值。这个方法返回一个TimeConvertStore
对象。在TimeConvertStore
加上了.convertTime
后,就可以告诉Struts 2
框架将调用TimeConvertStore
的getConvertTime
方法。TimeConvertStore
的getConvertTime
方法返回一个字符串,然后这个字符串将被s:property
标签显示。
(3)创建一个Action
类TimeConvertAction.java
作为Controller
.
在src
目录上鼠标右击,选择"New
"->"Java Class
"并在对话框中输入名字"Tools.Controller.TimeConvertAction
",点击"OK
".
代码如下:
(4)增加struts
配置到struts.xml
文件中
建立映射关系,将TimeConvertAction
类(Controller
)和TimeConvert.jsp
(View)映射在一起。映射后,Struts 2
框架就能够知道哪个类将响应用户的action
(the URL
),这个类的哪个方法将被调用,哪个View
能够得到这个方法的返回String
结果。
(5)在index.jsp
中增加链接
首先在jsp
页面顶部增加taglib
说明
然后在body
标签后增加p
标签
修改后的代码如下:
点击调试后,运行效果如下图:
点击超链接后显示如下:
13.增加多语言支持i18n
需要注意的是,对于index.jsp
中读取全局配置文件,需要先增加Spring
框架,否则是无法通过在struts.xml
中增加
来实现的。如下图所示:
在跟"TimeConvertAction.java
"相同的目录下面建立英文语言文件TimeConvertAction_en.properties
,中文语言文件TimeConvertAction_zh.properties
,注意,中文只能是Unicode编码的格式,否则会出现乱码。格式类似\u65f6\u95f4\u8f6c\u6362
这样的格式。
其中TimeConvertAction_en.properties
中的内容如下:
TimeConvertAction_cn.properties
中的内容如下:
然后修改TimeConvert.jsp
,在Title中引用我们定义的语言。修改
为:
修改后的TimeConvert.jsp
文件如下:
点击调试后,打开的页面中,会看到网页的Title变成了中文的"时间转换"。
14.Strut2
增加对Json
的支持
默认情况下Struts2
不支持直接返回JSON
,比较方便的方式是使用struts2-json-plugin
来支持。
(1)增加spring
框架,由于struts2-json-plugin
需要调用spring框架,因此需要增加spring框架。右击工程,选择"Add Framework Support...
"。
在弹出的窗口中,选择"Spring
","Spring MVC
"两项,同时在点击"Spring
"的时候,勾选"Create emtpy spring-config.xml
"。
然后点击"OK
",等待需要的Jar
包下载完成。成功下载完成后,可以在lib
目录下看到非常多的Jar
文件被添加进来了。在web
目录下的WEB-INF
目录下多出来了applicationContext.xml
,dispatcher-servlet.xml
这两个文件。
完成后点击界面上侧的"Project Structure
"图标,解决提示的Jar
包导出问题。
都选择第一项"Add 'xxxxxxxxxxx' to the artifact
".
(2)确认项目使用的Struts2
的版本。点击界面上侧的"Project Structure
"图标
从上图可以看到我们的Struts2
的版本是2.3.20.1
(3)手工去下载struts2-json-plugin插件,选择与我们的Struts2
的版本相同的版本的插件。之所以需要手工下载而不是要求IntelliJ IDEA
在Maven
中自动下载原因在于,由于我们建立项目的时候没有使用Maven
,因此我们项目Lib
目录下的Struts2
的Jar
包是没有带版本号的。而如果要求Maven
自动下载的话,会由于找不到带版本号的Struts2
的Jar
包,而自动引入一堆的带版本号的Struts2
的Jar
包。导致Struts2
的Jar
包出现两份,一份是有版本号的,一份是我们现在的样子。导致无法编译通过,因此还是手工引入即可。
由于我们的Struts2
的版本是2.3.20.1
,因此,我们下载2.3.20.1
版本的struts2-json-plugin
.
下载完成后放到项目的lib
目录下,然后右击struts2-json-plugin-2.3.20.1.jar
,选择"Add As Library
".
点击OK
后关闭。
继续点击界面右上侧的"Project Structure
"图标
修改src
目录下的struts.xml
。调整部分如下图所示。
action
的返回类型为json
时的可配置参数详解:
15.参考链接