【开发IDE】
InteIliJ IDEA 2019.3.3 (Ultimate Edition)
JDK 13.0.2
Apache Maven 3.6.3
【问题小结】
#-> 问题1 右键无法新建Servlet文件模板
#-> 问题2 compile环境下的JDK版本问题
#-> 问题3 tomcat插件版本问题导致运行报错Compilation error
下面是详细的过程记录
创建新工程 File->New->Project->Maven,这里选择基于maven自带的骨架web-app创建一个web工程,注意要勾选“Create from archetype”,才能选择下面的骨架类型。
工程创建完毕后,目录结构如图所示。
和标准的web目录相比还缺少了一些文件夹,手动补齐main/java和main/resources
依次 main->New->Directory,会自动提示【java】和【resources】,直接双击即可
补充完后的目录结构如下:
在【java】目录下新建一个package【com.yy.servlet】,然后在这个包下新建一个servlet叫MyServlet.java
问题1 右键新建的时候会发现找不到Servlet这个文件模板,当然你可以直接新建一个Java Class然后自己继承HTTPServlet,但考虑开发效率,我们一般还是会通过模板直接创建更高效。
解决方法有以下两种。
#1-> 指定java为Source Roots
依次【File】->【Project Structure】->【Modules】->【Web】->【Source Roots】
指定 E:\IdeaProjects\mavenTest\src\main\java 为 Source Roots 点击OK,保存退出即可。
#2-> pom.xml添加servlet.jar
出现这个问题的原因是现在这个工程是通过maven直接创建的,什么jar包都没有依赖,工程无法识别servlet,所以直接在【pom.xml】 里添加servlet的jar包就可以了。
javax.servlet
javax.servlet-api
4.0.1
provided
tips:假如不清楚具体怎么写,可以到maven的中央仓库:https://mvnrepository.com/ 直接搜索所需要的jar包名称,选择合适的版本,同时会提供一段代码,如下图所示,直接将代码复制到pom.xml中即可。
添加完成以后,就能正常添加servlet文件了。这里还要注意一点,创建servlet的时候不要勾选【Create Java EE 6 annotated class】,这样创建的servlet总是找不到会报404错误,应该是地址没有指定清楚的缘故,还是手动在web.xml添加路径比较好。
web.xml手动添加servlet相关设置
Archetype Created Web Application
MyServlet
com.yy.servlet.MyServlet
MyServlet
/
打开MyServlet.java文件,编写简单的逻辑代码直接跳转到index.jsp,在doGet方法下添加
request.getRequestDispatcher("/index.jsp").forward(request,response);
在doPost方法下添加
doGet(request,response);
现在的pom.xml文件是这样的
4.0.0
com.yy
maven_web
1.0-SNAPSHOT
war
maven_web Maven Webapp
http://www.example.com
junit
junit
4.12
test
javax.servlet
javax.servlet-api
4.0.1
provided
直接compile,这里输出了1个[WARNING]和2个[ERROR]。
#->1个 [WARNING]
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
解决办法是在pom.xml中添加如下代码
UTF-8
#->2个 [ERROR]
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project maven_web: Compilation failure: Compilation failure:
[ERROR] 不再支持源选项 5。请使用 7 或更高版本。
[ERROR] 不再支持目标选项 5。请使用 7 或更高版本。
问题2 compile环境下的JDK版本问题
默认的compile插件版本是3.1,而这个版本对应的默认Java Compiler是1.5,也就是JDK 5。
结合[ERROR]的输出信息自然就明白了,JDK版本太低,“不再支持源选项 5。请使用 7 或更高版本”。
因此解决思路就是要修改jdk的版本即可。
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ maven_web ---
解决方法也有两种方式
参照官方文档:https://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html
#1> 直接指定Java language的(-source)版本和JVM(-target)版本即可。
在
[...]
UTF-8
13
13
[...]
另外需要注意一下有的JavaSE x完全等同于1.x,下图是JDK发布版本的命名规范。
注意从5开始就不再使用1.x的旧名,但并未完成舍弃,所以5-8这几个版本还是沿用了1.x的命名规范。假如这里想要使用Java8,下面两种写法是等价的。但最新版JavaSE13就不能这样写了。
[...]
UTF-8
1.8
1.8
[...]
[...]
UTF-8
8
8
[...]
#2->
org.apache.maven.plugins
maven-compiler-plugin
3.8.1
13
假如仅仅添加了maven-compiler-plugin,而没有指定-source和-target的版本,按照官网的说法,-source和-target默认版本是1.6。所以我特地测试了一下,结果如下,确实默认的版本就是JavaSE 6。
org.apache.maven.plugins
maven-compiler-plugin
3.8.1
现在通过maven工具栏中的“M”标志,执行mvn tomcat:run
打开浏览器,输入:http://localhost:8080/maven_web_2/MyServlet 回车
------2020-07-07-更新----------------------------------
这大概是一劳永逸的方法,直接修改maven安装目录下的settings.xml,在
jdk-1.8
true
1.8
1.8
1.8
1.8
问题3 tomcat插件版本问题导致运行报错Compilation error
原因是maven自带的tomcat插件默认使用的是tomcat6,版本太低,不兼容,造成compiler error
解决方案:调整Tomcat的版本,默认是6,我们这里修改成7,在
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
再次运行mvn tomcat7:run,成功!请注意这里不再是tomcat:run而是tomcat7:run
【参考资料】
http://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html
http://tomcat.apache.org/maven-plugin-2.1/tomcat7-maven-plugin/plugin-info.html
http://www.05bk.com/714.html
https://segmentfault.com/a/1190000021673498